【问题标题】:Hide/close menu when mouse is clicked outside its focus当鼠标在其焦点之外单击时隐藏/关闭菜单
【发布时间】:2013-03-19 16:30:51
【问题描述】:

我有一个旧代码,其中完成了 WIn 32 编程。

在这里,有一个托盘图标,右键单击时会启动一个菜单。

但是,即使在其焦点区域之外单击时,菜单仍然存在。

当我在其他地方单击鼠标时如何关闭菜单?

像 Qt 这样的框架可以很好地管理它。我是否必须跟踪鼠标指针,捕捉点击并查看它是否落在菜单区域之外?

代码在旧版 C 中,没有使用面向对象的概念..所以我不能在这里覆盖一些东西。

请多多指教,谢谢。

【问题讨论】:

  • 有许多应用程序似乎无法正确执行此操作。你并不孤单:)

标签: winapi menu


【解决方案1】:

阅读文档底部TrackPopupMenu函数的备注:http://msdn.microsoft.com/en-us/library/windows/desktop/ms648002(v=vs.85).aspx

具体来说:

要显示通知图标的上下文菜单,当前窗口 必须是应用程序调用前的前台窗口 TrackPopupMenu 或 TrackPopupMenuEx。否则菜单不会 当用户在菜单或窗口之外单击时消失 创建了菜单(如果它是可见的)。如果当前窗口是子窗口 窗口,您必须将(顶级)父窗口设置为前景 窗口。

【讨论】:

  • 那么,在这种情况下,当没有实际的应用程序窗口时,我将什么句柄传递给SetForegroundWindow( HANDLE)。菜单后面显示的窗口几乎可以是任何应用程序..
  • 你必须有一个窗口,否则你从哪里得到你的托盘图标被点击的消息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多