2015-03-19 69 views
0

我想让我的wxWidgets应用程序中的菜单栏可切换,例如Firefox和Windows资源管理器正在这样做。这意味着当它隐藏时,按下显示的ALT键。这是相对容易的:我在成员变量m_pMenuBar中创建时保存菜单,并在时启用菜单wxFrame::SetMenuBar(m_pMenuBar)并捕获wxEVT_CHAR_HOOKwxWidgets中的可切换菜单栏(何时隐藏?)

但现在我想知道什么时候再次禁用菜单。我知道禁用可以用wxFrame::SetMenuBar(nullptr)完成。很明显,当在相应的wxEVT_MENU事件中单击菜单项时。但是在支持这种可切换菜单的程序中,当您按下某个键(不是快捷键)或点击屏幕某处(并且不要点击菜单)时,菜单也会隐藏起来。感觉就像菜单“失去了焦点和消失”。由于我已经在拍摄wxEVT_CHAR_HOOK,所以隐藏在按键上将是可能的。鼠标的东西比较复杂。我尝试了一个计时器来检查鼠标按钮是否被按下,但这看起来相当难看,并且在您选择子菜单时不起作用。

所以我的问题是:什么时候应该隐藏菜单?

非常感谢! jffmichi

回答

1

这看起来像是极少数情况下覆盖wxApp::FilterEvent()将是适当的:一旦显示菜单栏,设置一个标志,并检查它在你的方法的重写版本,每当你得到一个鼠标事件。如何检测点击是否出现在菜单上仍然存在问题,您可能需要统计wxEVT_MENU_{OPEN,CLOSE},并且只在当前没有菜单打开时关闭菜单栏。

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