右键单击托盘后,弹出一菜单,关闭不了,只有选择某一项或在程序窗口内单击鼠标是才能关闭菜单,为什么会这样?
下面是部分程序:
else if(lParam==WM_RBUTTONDOWN)//鼠标右键单击弹出菜单

CMenu menu;
menu.LoadMenu(IDR_APP_MENU); //载入事先定义的菜单

CMenu* pMenu=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd(),NULL);
::PostMessage( m_hWnd, WM_NULL, 0, 0 );
pMenu->DestroyMenu();
}

解决方案 »

  1.   

    将AfxGetMainWnd()改为NULL或者GetDesktopWindow()试试。
      

  2.   

    pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd(),NULL);
    ::PostMessage( m_hWnd, WM_NULL, 0, 0 );
     ~~~~~~~~~~~~::SendMessage看看
    pMenu->DestroyMenu();
      

  3.   

    改为this也不行。有没有例子可以参考呢?
      

  4.   

    case WM_RBUTTONDOWN:
    POINT point;
                   HMENU hMenu, hSubMenu;
                   // Get mouse position
                   GetCursorPos(&point);
                   // Popup context menu
                   hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MYMENU));
                   hSubMenu = GetSubMenu(hMenu, 0);
                   SetMenuDefaultItem(hSubMenu, IDM_DEFAULTCMD, FALSE);
                   SetForegroundWindow(hMainDlg);         // Per KB Article Q135788
                   TrackPopupMenu(hSubMenu,
                      TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN,
                      point.x, point.y, 0, hWnd, NULL);
                   PostMessage(hMainDlg, WM_NULL, 0, 0);   // Per KB Article Q135788
                   DestroyMenu(hMenu);
      

  5.   

    终于找到了例子:VCKBASE 上的Helptip
    在GetCursorPos(&pos);侯加
    ::SetForegroundWindow(nid.hWnd); //nid为托盘结构体
    谢谢大家的参与!