托盘上的菜单右键弹出后,然后再别的地方,比如桌面,菜单无法隐藏掉,一直在托盘上,除非操作下菜单才能隐藏掉,只需要加上一句话
::SetForegroundWindow(m_nid.hWnd);
就可以解决这个问题。
void CXXXDlg::CreateTray()
{
m_nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); //NOTIFYICONDATA m_nid 托盘成员变量
m_nid.hWnd= this->m_hWnd;
m_nid.uID = 128;
m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
m_nid.uCallbackMessage = WM_SHOWTASK;
m_nid.hIcon=LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(128));
Shell_NotifyIcon(NIM_ADD, &m_nid);
}
LRESULT CXXXDlg::onShowTask(WPARAM wParam,LPARAM lParam) //托盘响应消息 { if(wParam !=128) return 1; switch(lParam) { case WM_RBUTTONUP: { ::SetForegroundWindow(m_nid.hWnd); //点击别的地方,托盘隐藏 LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint); m_menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, lpoint->x, lpoint->y, this); delete lpoint; break; } case WM_LBUTTONDBLCLK: { this->ShowWindow(SW_SHOW); SetForegroundWindow(); } break; } return 0; }