本帖最后由 sbtddh 于 2011-08-17 16:31:52 编辑

解决方案 »

  1.   

    if   (!menu.LoadMenu(m_ctiTrayIcon.m_tnd.uID))   
    return   0; 
    if   (!(pMenu   =   menu.GetSubMenu(0)))   
    return   0; ::SetMenuDefaultItem(pMenu-> m_hMenu,   0,   TRUE); CPoint   pos; 
    GetCursorPos(&pos); 
    ::SetForegroundWindow(m_ctiTrayIcon.m_tnd.hWnd);     
    ::TrackPopupMenu(pMenu-> m_hMenu,   0,   pos.x,   pos.y,   
    0,   m_ctiTrayIcon.m_tnd.hWnd,   NULL); 
    menu.DestroyMenu(); 
      

  2.   

    SetForegroundWindow主要就是这个函数
      

  3.   

    在你弹出菜单之前,设置你的窗口为最前窗口,代码如下:POINT   p; 
    GetCursorPos(   &   p   ); //   Increase   the   thread   priority   by   invoking   SetForegroundWindow. 
    SetForegroundWindow(); //设置窗口在最前面m_Menu.TrackPopupMenu(   TPM_LEFTALIGN   |   TPM_RIGHTBUTTON,   p.x,   p.y,   this   ); 
        4)调用TrackPopupMenu()之前,你必须先调用SetForegroundWindow(   m_hWnd   ),然后调用PostMessage(   m_hWnd,   WM_NULL,   0,   0   ):                   POINT   point; 
                      GetCursorPos(   &point   ); 
                      SetForegroundWindow(   m_hWnd   ); 
                      TrackPopupMenu(   hPopup, 
                            TPM_RIGHTALIGN   |   TPM_LEFTBUTTON   |   TPM_RIGHTBUTTON, 
                            point.x, 
                            point.y, 
                            0, 
                            m_hWnd,   0   ); 
                      PostMessage(   m_hWnd,   WM_NULL,   0,   0   );