我做了一个单文档应用程序,程序启动后就在  SYSTEM  TRAY  添加一个图标,然后隐藏主窗口。在  SYSTEM  TRAY  的右键消息处理中,弹出一个菜单。(主窗口一直隐藏)  
问题是,这个右键菜单只有在我选择了其中一项时,才会消失,否则无论我点其他或桌面任何位置,这个菜单都不会消失,这不应该吧?

解决方案 »

  1.   

    调用一下SetForegroundWindow(hWnd/*程序主窗口句柄*/);
    这是Windows的一个Bug,在MSDN中有提及.
      

  2.   

    在弹出菜单的前边加入SetForegroundWindow()函数就行:
    例:
    SetForegroundWindow();
    TrackPopupMenu(menu.m_hMenu,flag,p.x,p.y,0,m_hWnd,NULL);
      

  3.   

    very easy!
    例如:
    void CMainFrame::OnListenMessage(WPARAM wParam,LPARAM lParam) 
    {
      //The example of how to process the message!
         UINT uID;//发出该消息的图标的ID
         UINT uMouseMsg;//鼠标动作
         POINT pt;
     //获得消息的ID
         uID=(UINT) wParam;
     //获得当前的消息
         uMouseMsg=(UINT) lParam;     if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
         {
            switch(uID)
           {
             case IDR_MAINFRAME://如果是我的图标
              GetCursorPos(&pt);//取得鼠标位置
      //虽然窗口不可见,但是可以在此激活
      ::SetForegroundWindow( m_hWnd); 
              CMenu menu;
      menu.LoadMenu(IDR_MENU_NEW);
      menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,pt.x,pt.y,this);   
      //使窗口失去焦点
      ::PostMessage( m_hWnd, WM_NULL, 0, 0 );
      break;
           }
         }
      

  4.   

    SetForegroundWindow();
    TrackPopupMenu (…………);
    PostMessage(WM_NULL, 0, 0);see http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q135788&
    我来了。