wxWidgets中的Toggleable MenuBar(何时隐藏?)

时间:2015-03-19 02:19:51

标签: c++ toggle hide wxwidgets menubar

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

但现在我想知道何时再次禁用菜单。我知道可以使用wxFrame::SetMenuBar(nullptr)进行禁用。显然,当在相应的wxEVT_MENU事件中单击菜单项时。但是在支持这种可切换菜单的程序中,当您按下某个键(不是快捷键)或点击屏幕某处(并且不要点击菜单)时,菜单也会被隐藏。这感觉就像菜单一样,失去了它的重点和消失#34;由于我已经捕获wxEVT_CHAR_HOOK,因此可以隐藏在按键上。鼠标的东西更复杂。我尝试了一个计时器来检查是否按下了鼠标按钮,但是当你选择子菜单时,这看起来相当丑陋并且不起作用。

所以我的问题是:我应该在何时或哪些事件中隐藏菜单?

非常感谢! jffmichi

1 个答案:

答案 0 :(得分:1)

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

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