为什么右下角的弹出菜单不消失?关于托盘
我写的程序,最小化后在右下角,单击右键有弹出菜单
但是当我点击程序主窗口另外的地方,例如桌面,弹出菜单不消失
除非点击程序主窗口才右下角的弹出菜单才会消失,很怪异,为什么?
添加托盘图标的代码如下:
int CGkDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
//任务栏图标数据结构初始化
// TODO: Add your specialized creation code here
m_tnid.cbSize=sizeof(NOTIFYICONDATA);
m_tnid.hWnd=this->m_hWnd;
if(this->m_hWnd != NULL)
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid.uCallbackMessage=MYWM_NOTIFYICON;
//用户定义的回调消息
CString szToolTip;
szToolTip=_T("IP电话网守");
_tcscpy(m_tnid.szTip, szToolTip);
m_tnid.uID=ID_SYSTRAY;
HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDI_ICONGK);
m_tnid.hIcon=hIcon;
::Shell_NotifyIcon(NIM_ADD,&m_tnid);
if(hIcon)
::DestroyIcon(hIcon);
return 0;
}
处理右键单击,左键双击和点击主窗口最小化的函数如下:
LRESULT CGkDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case MYWM_NOTIFYICON:
//如果是用户定义的消息
if(lParam==WM_LBUTTONDBLCLK)
{ //鼠标双击时主窗口出现
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
}
else if(lParam==WM_RBUTTONDOWN){
//鼠标右键单击弹出菜单
CMenu menu;
menu.LoadMenu(IDR_POP_MENU);
//载入事先定义的右键弹出菜单
CMenu* pMenu=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
pMenu->TrackPopupMenu
(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
pos.x,pos.y,AfxGetMainWnd());
}
break;
case WM_SYSCOMMAND:
//如果是系统消息
if(wParam==SC_MINIMIZE){
//接收到最小化消息时主窗口隐藏
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
return 0;
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}