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

标签 c++ toggle hide wxwidgets menubar

我想让我的 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/

相关文章:

Javascript - 单击按钮时,第二次单击后 CSS 属性切换

JQuery - 重置切换状态

c++ - 如何在 Mac OS(gcc 编译器)中隐藏控制台窗口?

jquery - JSON数据发送回页面后如何使用jquery显示元素

c++ - const_reference 或 map 的迭代器(当不实际迭代时)

c++ - 通过平方时间复杂度求幂

javascript - 使用本地存储在 2 个样式表之间切换(一次切换)

android - 是否可以隐藏从应用程序调用的号码?

c++ - 如何按某些属性对列表进行排序(只有列表的一个条目)C++

c++ - 窗口的 C\C++ LINPACK 源代码免费用于商业用途?