今天抄了一个托盘程序,发现有一个自定义的消息
#define WM_SHOWTASK WM_USER+1
是用来处理点击托盘图标的可是如何触发的该消息呢?
(这样的例子好像还不少,有一个孙鑫教程里的例子也是这样的,一个网络聊天程序
定义了一个WM_RECVDATA,可以处理网络消息,可是如何触发的该消息没有写)
听说是自动触发,真的吗?如果是,还有哪些是这样的啊?请各位指点,谢谢!
#define WM_SHOWTASK WM_USER+1
是用来处理点击托盘图标的可是如何触发的该消息呢?
(这样的例子好像还不少,有一个孙鑫教程里的例子也是这样的,一个网络聊天程序
定义了一个WM_RECVDATA,可以处理网络消息,可是如何触发的该消息没有写)
听说是自动触发,真的吗?如果是,还有哪些是这样的啊?请各位指点,谢谢!
PostMessage/SendMessage还需要自己进行消息映射
ON_MESSAGE
NOTIFYICONDATA
其中成员
uCallbackMessage就是指定自定义的消息名称
在置托盘时给其付值,然后在消息处理中像处理其它消息一样处理该消息就可以了
在.h中增加 afx_msg LRESULT OnRouteChange(WPARAM wParam,LPARAM lParam);
在.cpp中增加 ON_MESSAGE(WM_ROUTECHANGE,OnRouteChange)
然后再增加函数体 LRESULT C***::OnRouteChange(WPARAM wParam,LPARAM lParam)
{
//****
return TRUE;
}
这样,该类的消息响应已经完成,然后其它类就可以给该类发送自定义的WM_ROUTECHANGE消息了。
//taskicon.h
#define WM_SHOWTASK WM_USER+101void toTray(HWND hWnd,HINSTANCE hInstance)
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_SMALL));
nid.hWnd=hWnd;
strcpy(nid.szTip,"TEST");
nid.uCallbackMessage=WM_SHOWTASK;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uID=IDI_SMALL;
Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
// ShowWindow(hWnd,SW_HIDE);//隐藏主窗口
}
这是响应的部分:switch(message)
{
case WM_SHOWTASK:
wmId=LOWORD(lParam); switch(wmId)
{
case WM_RBUTTONUP:
GetCursorPos(&point);
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON|TPM_RIGHTALIGN,
point.x, point.y,0,hWnd,NULL);
return 0;
}
}