如何关闭TrackPopupMenuEx弹出的菜单

C++实习生 2013-12-27 11:49:11
我使用TrackPopupMenuEx函数弹出一个右键菜单。
但是这个菜单如果不去点击,就会一直显示在界面上。
如何使用代码关闭这个菜单呢:
例:
HMENU hPopMenu = TrackPopupMenuEx(...)

...全文
308 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2013-12-28
  • 打赏
  • 举报
回复
引用 3 楼 aasmfox 的回复:
这个弹出的菜单是在右下角托盘区。 按ESC,没有用的。到其它地方点一下,也是没有用的。 没有没有点击这个菜单,它是一直显示在右下角。 希望明白我意思的大哥给点提示。如何在代码中关闭这个菜单。 我用EndMenu()不行。 我用destroyMenu()不行。 我用WM_CANCELMODE消息也行。 不知道是我写错了,还是方法不对。
不会吧?托盘区菜单也可以使用esc键(360似乎不管用)或在别的地方点击一下消失啊
C++实习生 2013-12-28
  • 打赏
  • 举报
回复
这个弹出的菜单是在右下角托盘区。
按ESC,没有用的。到其它地方点一下,也是没有用的。

没有没有点击这个菜单,它是一直显示在右下角。


希望明白我意思的大哥给点提示。如何在代码中关闭这个菜单。
我用EndMenu()不行。
我用destroyMenu()不行。
我用WM_CANCELMODE消息也行。
不知道是我写错了,还是方法不对。
zwfgdlc 2013-12-28
  • 打赏
  • 举报
回复
To display a context menu for a notification icon, the current window must be the foreground window before the application calls TrackPopupMenu or TrackPopupMenuEx. Otherwise, the menu will not disappear when the user clicks outside of the menu or the window that created the menu (if it is visible). 调用TrackPopupMenuEx之前先调用SetForegroundWindow把主窗口前置.
worldy 2013-12-28
  • 打赏
  • 举报
回复
按esc键或者别的地方点一下,不就关闭了
dvlinker 2013-12-28
  • 打赏
  • 举报
回复
		// 加上这一句,点其它的地方,托盘菜单才会消失
		::SetForegroundWindow( m_tnd.hWnd );

		// 弹出菜单 
		CPoint pos; 
		GetCursorPos( &pos ); 
		CWnd* pWnd = AfxGetMainWnd();
		menu.TrackPopupMenu( TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON, pos.x, pos.y, AfxGetMainWnd(), NULL );

		menu.DestroyMenu();

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧