Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

System Tray !!!

1.8K
07 июля 2008 года
ViToBrother
149 / / 13.05.2007
[CENTER]Привет всем участникам форума !!![/CENTER]
У меня вот какой вопрос.
Я пишу прогу каторая работает в System Tray и при нажатие на иконку в
System Tray-е мне надо определить координаты курсора а вот как пожалуйста помогите :confused::confused::confused: !!!

 
Код:
void CRDTDlg::OnSystemTrayIcon(WPARAM wp, LPARAM lp)
{
 
    if(lp == RIGHT_CLICK) {
        AfxMessageBox("Right Click !");
    }
}
1.9K
07 июля 2008 года
max_dark
256 / / 11.11.2005
Я обычно делаю так:
Код:
LRESULT CALLBACK MainProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) {
    LRESULT result = 0;

    switch (umsg) {
// .....
        case WM_SYSTRAYICON: {
                switch (lparam) {
                    case WM_RBUTTONUP: {
                            POINT pt;
                            GetCursorPos(&pt);
                            SetForegroundWindow(hwnd);
                            TrackPopupMenu(hmenu, 0, pt.x, pt.y, 0, hwnd, NULL);
                        }
                        break;
                    case WM_LBUTTONUP: {
                            SendMessage(hwnd, WM_COMMAND, ID_MAIN_SHOWHIDE, 0);
                        }
                        break;
                }
            }
            break;
// ......
        default: result = DefWindowProc(hwnd, umsg, wparam, lparam);
    }
    return result;
}
1.8K
08 июля 2008 года
ViToBrother
149 / / 13.05.2007
Спасибо !!!
1.8K
11 июля 2008 года
ViToBrother
149 / / 13.05.2007
Друзья я создаю проэкт Dialog based и мне надо чтоб он создавался в заданных координатах например int myx = 10; int myy = 50; как зделать ???? Зарание спасибо !!!!
1.9K
11 июля 2008 года
max_dark
256 / / 11.11.2005
MoveWindow в инициализации диалога
1.8K
19 июля 2008 года
ViToBrother
149 / / 13.05.2007
1. Как зделать чтобы диалоговое окно появлялось поверх всех окон ?
2. Как при работе программы в трее отслеживать например правый клик по десктопу ?

[RIGHT]Зарание спасибо !!![/RIGHT]
1.9K
19 июля 2008 года
max_dark
256 / / 11.11.2005
1. Смотри в сторону SetWindowLong/GWL_EXSTYLE
если на вскидку то
 
Код:
int SetOnTop(HWND hwnd, int on) {
    int old=(GetWindowLong(hwnd, GWL_EXSTYLE)&(!WS_EX_TOPMOST));
    return SetWindowLong(hwnd, GWL_EXSTYLE, (on==0?old:old|WS_EX_TOPMOST));
}

2. Здесь, скорее всего, поможет только глобальный хук на мышь
3.7K
19 июля 2008 года
0nni
326 / / 24.06.2008
Цитата: ViToBrother
1. Как зделать чтобы диалоговое окно появлялось поверх всех окон ?
[RIGHT]Зарание спасибо !!![/RIGHT]


SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); (логичское сложение"or" в Си кажется заменятемся на "|") - это сделает окно в стиле поверх всех окон.
SetForegroundWindow(hWnd); - просто переместит окно на передний план.

Цитата: max_dark
1. Смотри в сторону SetWindowLong/GWL_EXSTYLE
если на вскидку то
 
Код:
int SetOnTop(HWND hwnd, int on) {
    int old=(GetWindowLong(hwnd, GWL_EXSTYLE)&(!WS_EX_TOPMOST));
    return SetWindowLong(hwnd, GWL_EXSTYLE, (on==0?old:old|WS_EX_TOPMOST));
}


Или этот вариант - результат выполнения HWND_TOPMOST именно изменение EX_STYLE

Цитата: ViToBrother

2. Как при работе программы в трее отслеживать например правый клик по десктопу ?
[RIGHT]Зарание спасибо !!![/RIGHT]


Ищи на тему Hook-и.
Или безумный вариант WindowFromPoint() + GetKeyState() (:D), [COLOR="Red"]не[/COLOR] рекомендую, но иногда можно и его использовать.

3.7K
19 июля 2008 года
0nni
326 / / 24.06.2008
А зачем вообще перехватывать клики по рабочему столу?
Опиши зачем тебе это надо, если это то о чем я думаю, то есть гораздо более красивые решения.
1.8K
19 июля 2008 года
ViToBrother
149 / / 13.05.2007
Цитата: 0nni
А зачем вообще перехватывать клики по рабочему столу?
Опиши зачем тебе это надо, если это то о чем я думаю, то есть гораздо более красивые решения.



Уважаемый 0nni у меня прога иконка которой в тоэе и при нажатие на иконку у меня появляется диалог и мне нужно чтобб при нажатие правым кликом на десктоп или другое место этот диалог закрывался !!! :rolleyes:

1.9K
20 июля 2008 года
max_dark
256 / / 11.11.2005
Вот код библиотеки с глобальным хуком
Код:
#include <windows.h>
#include "..\\shared\\shared.h"


#define XHOOK_API __declspec(dllexport)

extern "C"
{
    XHOOK_API void Release(HINSTANCE xmod);
    //XHOOK_API LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam);
    XHOOK_API void Init(HINSTANCE xmod);
};

HINSTANCE xmod;
HHOOK xhook;


void OutError()
{
    LPVOID lpMsgBuf;
    DWORD err=GetLastError();
    //if(!err)return;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        err,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0,NULL);
    MessageBox( NULL,(LPTSTR)lpMsgBuf, "Error", MB_ICONINFORMATION );
    LocalFree( lpMsgBuf );
    SetLastError(0);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
  if(fdwReason==DLL_PROCESS_ATTACH)
  {
    xmod=hinstDLL;
    xhook=0;
    if(!xmod)OutError();
  }
  return TRUE;
}

XHOOK_API void Release(HINSTANCE xmod)
{
  UnhookWindowsHookEx(xhook);
}

#define GetMainWindow() FindWindow(wnd_class,wnd_title)

LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    WORD umsg;
    HWND main=NULL;
    if(nCode==HC_ACTION)
    {
    PMSG msg=(PMSG)lParam;
    POINT pt;
    switch(msg->message)
    {
      case WM_MBUTTONDOWN:
      case WM_NCMBUTTONDOWN:
        msg->message=WM_NULL;
        return 0;
      case WM_MBUTTONUP:
      case WM_NCMBUTTONUP:
        GetCursorPos(&pt);
        main=GetMainWindow();
        if(IsWindow(main))
        {
            SendMessage(main,msg->message,0,MAKELPARAM(pt.x,pt.y));
            msg->message=WM_NULL;
        }
        return 0;
      default: break;
    }
    }
    return CallNextHookEx(xhook,nCode,wParam,lParam);
}

XHOOK_API void Init(HINSTANCE xmod)
{
    xhook=SetWindowsHookEx(WH_GETMESSAGE,HookProc,xmod,0);
    if(!xhook) {
        OutError();
        MessageBeep(IDOK);
    }
}

Здесь перехватывается нажатия/отпускания средней кнопки мыши и пересылаются в главное окно(т.е. основная обработка проходит в коде самой проги)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог