我想让我的 wxWidgets 应用程序中的菜单栏可以切换,例如 Firefox 和 Windows Explorer 正在做的事情。这意味着当它被隐藏并且你按下 ALT 键时它就会显示出来。这相对简单:我在成员变量 m_pMenuBar
中创建菜单时保存菜单,并捕获 wxEVT_CHAR_HOOK
启用菜单 wxFrame::SetMenuBar(m_pMenuBar)
当 GetKeyCode() == WXK_ALT
时。
但现在我想知道什么时候再次禁用菜单。我知道可以使用 wxFrame::SetMenuBar(nullptr)
来禁用。显然,当在相应的wxEVT_MENU
事件中单击菜单项时。但是在支持此类可切换菜单的程序中,当您按下某个键(不是快捷方式)或单击屏幕某处(不要点击菜单)时,菜单也会隐藏。感觉就像菜单“失去了焦点并消失了”。因为我已经捕获了wxEVT_CHAR_HOOK
,所以在按键时隐藏是可能的。鼠标的事情更复杂。我尝试了一个计时器来检查是否按下了鼠标按钮,但这看起来很丑陋并且在您选择子菜单时不起作用。
所以我的问题是:我应该在什么时候或在哪些事件上隐藏菜单?
非常感谢! jffmichi
最佳答案
这看起来像是覆盖 wxApp::FilterEvent() 时的罕见情况之一。将是适当的:显示菜单栏后,设置一个标志并在您收到鼠标事件时在此方法的覆盖版本中检查它。还有一个问题是如何检测点击是否发生在菜单上,您可能需要计算 wxEVT_MENU_{OPEN,CLOSE}
并且仅在当前没有打开菜单时关闭菜单栏.
最后请注意,您不应该尝试在菜单栏根本无法隐藏的 OS X 下执行任何操作(但您可以切换到全屏模式)。
关于c++ - wxWidgets 中的可切换菜单栏(何时隐藏?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136123/