Сообщение MFC в диалоговом окне

я создал диалоговое приложение MFC.

Теперь я хочу использовать сообщение, но не могу его найти. Я читал, что MFC создаст его для меня, но он будет скрыт. так как я могу манипулировать messageloop?

мне нужно сообщение, чтобы получать события от моего значка в трее, который я создал для этого приложения.

так что я могу использовать что-то вроде этого:

long CALLBACK WndProc(HWND hWnd, UINT nMsg, UINT wParam, LONG lParam)
{
switch(nMsg)
{
case (WM_USER + 1):
{
switch(lParam)
{
case WM_RBUTTONUP:
{
/**/
}
}
return 0;
}

default:
return DefWindowProc(hWnd, nMsg, wParam, lParam);
}
}

Я все еще новичок в MFC.

0

Решение

После установки иконки в системный трей с помощью Shell_NotifyIcon этот значок станет расширением вашего диалогового интерфейса. Когда пользователь взаимодействует с этим значком, сообщения пользовательского интерфейса автоматически перенаправляются в ваш диалог операционной системой.

Для обслуживания этих пользовательских сообщений вам необходимо выполнить несколько шагов:

(1) Добавить определение обработчика сообщений (ON_MESSAGE (WM_TRAY_NOTIFY, OnTrayNotify)) внутри файла (.cpp). Должен быть внутри блока BEGIN_MESSAGE_MAP / END_MESSAGE_MAP:

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
...
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TRAY_NOTIFY, OnTrayNotify)
END_MESSAGE_MAP()

(2) Добавьте реализацию обработчика сообщений в файл (.cpp), чтобы выполнить реальную работу.

void CTestDlg::OnTrayNotify(UINT nID, LPARAM lEvent)
{
if (nID==TRAYICON_ID1)
{
// handle messages here
if (lEvent==WM_LBUTTONDBLCLK)
{  // do left button double click, usually restore application
}
if (lEvent==WM_RBUTTONUP)
{  // do right button up, usually popup a menu at clicked location
}
}
}

(3) Добавить определение прототипа этого обработчика сообщений (afx_msg void OnTrayNotify (UINT nID, LPARAM lEvent);) внутри файла (.h). Должен быть внутри блока BEGIN_MESSAGE_MAP / END_MESSAGE_MAP:

// Generated message map functions
//{{AFX_MSG(CTestDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
...
//}}AFX_MSG
afx_msg void OnTrayNotify(UINT nID, LPARAM lEvent);
DECLARE_MESSAGE_MAP()

(4) Добавить определение внутри (.h) файла

#define WM_TRAY_NOTIFY WM_USER+567
#define TRAYICON_ID1 0x1234

Код выше предполагает:

  • Имя диалога — CTestDlg, замените его на имя вашего диалога
  • Идентификатор сообщения обратного вызова пользователя (uCallbackMessage), используемый для настройки Shell_NotifyIcon, — WM_TRAY_NOTIFY
  • Идентификатор иконки в трее (uID) sed для настройки Shell_NotifyIcon — TRAYICON_ID1
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]