wxWidgets中的可切换菜单栏(何时隐藏?)

Toggleable MenuBar in wxWidgets (when to hide?)

本文关键字:何时 隐藏 菜单栏 wxWidgets      更新时间:2023-10-16

我想让wxWidgets应用程序中的菜单栏可以像Firefox和Windows资源管理器那样切换。这意味着当它被隐藏并按下ALT键时,它就会显示出来。这相对容易:当在成员变量m_pMenuBar中创建菜单时,我保存菜单,并在GetKeyCode() == WXK_ALT时捕获wxEVT_CHAR_HOOK,用wxFrame::SetMenuBar(m_pMenuBar)启用菜单。

但现在我想知道什么时候该再次禁用菜单。我知道wxFrame::SetMenuBar(nullptr)可以禁用。显然,当在相应的wxEVT_MENU事件中单击菜单项时。但在支持这种可切换菜单的程序中,当你按下一个键(这不是快捷方式)或点击屏幕上的某个地方(不要点击菜单)时,菜单也会被隐藏。感觉菜单"失去了焦点,失去了意义"。由于我已经在拍摄wxEVT_CHAR_HOOK,所以可以在按键时隐藏。鼠标的问题更复杂。我试过一个计时器来检查是否按下了鼠标按钮,但这看起来很难看,当你选择子菜单时也不起作用。

所以我的问题是:我应该在什么时候或在哪些事件上隐藏菜单?

非常感谢!jffmichi

当重写wxApp::FilterEvent()时,这似乎是一种罕见的情况:一旦显示菜单栏,设置一个标志,并在获得鼠标事件时在该方法的重写版本中检查它。如何检测点击是否发生在菜单上仍然是一个问题,您可能需要计算wxEVT_MENU_{OPEN,CLOSE},并且只有在当前没有打开菜单时才关闭菜单栏。

最后请注意,在OS X下,菜单栏根本无法隐藏(但您可以切换到全屏模式),您不应该尝试执行任何操作。