我编了一个在系统托盘的程序,当右键单击弹出菜单时,我不选菜单,单击其他地方和按esc键都不行?

解决方案 »

  1.   

    需要用到下面两个函数:
    SetForegroundWindow()、PostMessage()具体做法如下://函数OnListen()为响应托盘消息的函数
    void CMainFrame::OnListen(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;
           }
         }
         return; 
    }