如何实现任务栏图标按钮菜单
我想写一个程序具有任务栏图标的功能,并且在鼠标右键单击时能弹出菜单,但是不知为何菜单无法弹出,请大家帮忙看看。
我的具体操作如下:
1.我用VC建立了一个对话框程序命名为TEST
2.添加NOTIFYICONDATA类型的成员变量 tnd。
然后调用Shell_NotifyIcon创建了一个任务栏图标程序。将如下代码写在OnInitDialog()中
NOTIFYICONDATA tnd;
tnd.cbSize=sizeof(NOTIFYICONDATA);
tnd.hWnd=this->m_hWnd;
tnd.uID=IDI_TEST;
tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage=WM_POPMENU;
tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_TEST));
strcpy(tnd.szTip,"提示信息");
Shell_NotifyIcon(NIM_ADD,&tnd);
3.手动添加了WM_POPMENU消息,创建消息响应函数OnPopmenu,创建IDI_TEST菜单资源
4.在OnPopmenu函数中添加如下代码:
if(wParam!=tnd.uID || (lParam!=WM_RBUTTONUP && lParam!=WM_LBUTTONDBLCLK))
{
return 0;
}
CMenu menu;
if(!menu.LoadMenu(tnd.uID))
{
return 0;
}
CMenu* pSubMenu=menu.GetSubMenu(0);
if(!pSubMenu)
{
return 0;
}
if(lParam==WM_RBUTTONUP)
{
::SetMenuDefaultItem(pSubMenu->m_hMenu,0,TRUE);
CPoint mouse;
GetCursorPos(&mouse);
::SetForegroundWindow(tnd.hWnd);
::TrackPopupMenu(pSubMenu->m_hMenu,0,mouse.x,mouse.y,0,tnd.hWnd,NULL);
}