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