每次在图标上单击右键后弹出菜单,必须要点菜单一下它才会消失,而别的程序都不是这样地啊,在其它地方点一下,菜单就消失了。     这是代码:switch (lParam)
{
case WM_RBUTTONUP:  
{
POINT point;
::GetCursorPos(&point);  // 得到鼠标位置
CMenu menu;
CMenu* pSubMenu;
menu.LoadMenu(IDR_POPMENU);  // 加载菜单
if (!(pSubMenu = menu.GetSubMenu(0)))
return 0;
// 确定弹出菜单的位置
         ::TrackPopupMenu(pSubMenu->m_hMenu, 0, point.x, point.y, 0, GetSafeHwnd(), NULL);
menu.DestroyMenu();
}
break;case WM_LBUTTONDOWN:
{
ShowWindow(SW_RESTORE);
}
break;
}return 0;

解决方案 »

  1.   

    LPPOINT lpoint=new tagPOINT;
    ::GetCursorPos(lpoint);
    ::SetForegroundWindow(this->GetSafeHwnd());//必须先将窗口置前才能“点击菜单外任何地方都关闭菜单” CMenu popupMenu; popupMenu.CreatePopupMenu(); popupMenu.AppendMenu(MF_STRING,CMD_COPY, "Select Class Name");
    popupMenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,lpoint->x,lpoint->y,this,0);
      

  2.   

    在显示菜单前先调用SetForegroundWindow();
    ::SetForegroundWindow(m_hWnd)
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
    m_hWnd);
    m_hWnd.PostMessage(WM_NULL);
      

  3.   

    CMenu popMenu;
    popMenu.LoadMenu(m_MenuID);
    CPoint posMouse;
    GetCursorPos(&posMouse);
    ::SetForegroundWindow(m_hWnd);
    popMenu.GetSubMenu(0)->TrackPopupMenu(0, posMouse.x, posMouse.y, this);
    popMenu.DestroyMenu();