我的应用程序使用 wxWidgets 提供的docview
框架。在我的wxView
派生类的OnClose()
方法中,我必须知道是只有这个窗口即将关闭还是整个应用程序即将关闭。(我必须在所有窗口关闭之前做一些内务工作。)
当应用程序退出时,在视图关闭之前,是否有任何事件被触发?
我试图在wxApp::OnExit()
中设置一个标志,但是OnExit()
只有在所有窗口都关闭后才被调用,所以这不起作用。
**更新一些澄清:**我不想知道是谁发起了应用程序的关闭。我需要在wxView::OnClose()
中找出用户是否只是关闭了这个单一窗口或整个应用程序。
3条答案
按热度按时间mrzz3bfm1#
我最终得到了一个解决方案,这可能是一个变通方案,但似乎工作得很好,至少在macOS上是这样。我在我的
wxApp
派生类中重写了FilterEvent()
:字符串
无论用户点击“Appname Menu > Quit Appname”还是使用快捷键CMD+q,
if
子句都是true
,并且设置了标志。根据
m_about_to_quit
的状态,我现在可以在wxView::OnClose()
中区分这个视图是关闭还是应用程序即将关闭,并在必要时进行内务处理。注意事项:使用SDI GUI模式,显示主框架(至少在macOS上)。如果用户关闭该主框架,应用程序将关闭而不会将
m_about_to_quit
设置为true
。在这种情况下,您还需要在主框架的OnClose
事件中设置m_about_to_quit
。7uhlpewt2#
应用程序可以被程序显式关闭,也可以因为用户关闭了主窗口而被隐式关闭。在后一种情况下,你会得到
wxEVT_CLOSE_WINDOW
,所以你可以抓住它并在那里做任何你需要做的事情-例如,这通常用于建议在关闭前保存更改。0aydgbwb3#
wxAppConsole::OnExit
应该做的工作:字符串