我的系统托盘中的应用程序有一个弹出菜单。我遇到的问题是,如果不选择项目,我就无法让菜单消失。
当我点击Windows中的其他地方时,怎么能让弹出菜单消失?
以下是显示弹出菜单的代码:
LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if( message == WM_MYMESSAGE && lParam == WM_RBUTTONDOWN)
{
m_menu.CreatePopupMenu();
POINT point;
GetCursorPos(&point);
m_menu.AppendMenu(MF_POPUP, WM_MAXIMIZE, _T("Maximize"));
m_menu.AppendMenu(MF_POPUP, WM_EXIT, _T("Exit"));
m_menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
}
return CDialog::WindowProc(message, wParam, lParam);
}
我尝试使用CMenu::DestroyMenu
没有运气。
答案 0 :(得分:4)
对我有用的解决方案是在调用SetForegroundWindow();
之前调用TrackPopupMenu
函数。
我在TrackPopupMenu
函数说明的Remarks中找到了解决方案。
答案 1 :(得分:0)
添加TPM_RETURNCMD标志。 使用此标志,如果选择了菜单项或用户在外部单击,TrackPopupMenu函数将返回。
CMenu menu;
CMenu *pSub = NULL;
// popup a menu to get the number of pages to display
VERIFY(menu.LoadMenu(IDR_MY_MENU));
pSub = menu.GetSubMenu(0);
int command = pSub->TrackPopupMenu(
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD,
point.x,
point.y,
this);
这对我有用。