对话框窗口中的MFC消息循环
MFC messageloop in dialog window
我创建了一个MFC对话框应用程序
现在我想使用messagelloop,但是我找不到它。我读到mfc将为我创建它,但它将被隐藏。那么如何操作消息循环呢?
我需要messagelloop从我为该应用程序创建的托盘图标接收事件。
所以我可以这样写:
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的初学者。
通过Shell_NotifyIcon将图标安装到系统托盘后,该图标成为对话框UI的扩展。当用户与此图标交互时,UI消息将由操作系统自动重定向到您的对话框。
要提供这些用户消息,您需要执行以下几个步骤:
(1)在(.cpp)文件中添加一个消息处理程序定义(ON_MESSAGE(WM_TRAY_NOTIFY, OnTrayNotify))。必须在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)在(.h)文件中添加这个消息处理程序的原型定义(afx_msg void OnTrayNotify(UINT nID, LPARAM lEvent);)。必须在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,将其更改为您的对话框名称
- 用于设置Shell_NotifyIcon的用户回调消息标识符(uCallbackMessage)是WM_TRAY_NOTIFY
- 用于设置Shell_NotifyIcon的托盘图标标识符(uID)为TRAYICON_ID1
相关文章:
- OpenGL 的 Win32 主消息循环
- Winapi:可以通过异步程序调用中断消息循环
- WinApi消息循环,Postmessage的工作原理与SendMessage类似
- 如何从VCL项目的消息循环中调用其他功能
- Win32 消息循环 - 我应该中断还是返回
- WinAPI设备通知-未进入消息循环
- SetWindowsHookEx忽略来自消息循环的PostMessage
- 相对于 3D 应用程序中的 Windows 消息循环的计时错误
- infine windows消息循环-c++
- EDSDK消息循环在Windows 8.1下不起作用
- Sleep() in Windows 消息循环
- 对话框消息是否发送到自定义消息循环
- 是否可以捕获翻译/调度消息循环中的窗口消息/事件
- 为什么会有这种行为 - 我的全局钩子与消息循环一起使用,但不适用于空循环
- C++ WTL8.1 如何在具有消息循环的新线程中创建窗口
- WINAPI的消息循环让我发疯
- WinAPI-带有自己回调的消息循环
- WinProc()与主消息循环
- CAppModule与CAtlExeModuleT,获取应用程序消息循环
- 当挂接 Windows 的消息循环时,KBDLLHOOKSTRUCT 的 dwExtraInfo 有什么用