c++ wxWidgets中应用程序即将关闭时的事件

uoifb46i  于 2024-01-09  发布在  其他
关注(0)|答案(3)|浏览(144)

我的应用程序使用 wxWidgets 提供的docview框架。在我的wxView派生类的OnClose()方法中,我必须知道是只有这个窗口即将关闭还是整个应用程序即将关闭。(我必须在所有窗口关闭之前做一些内务工作。)
当应用程序退出时,在视图关闭之前,是否有任何事件被触发?
我试图在wxApp::OnExit()中设置一个标志,但是OnExit()只有在所有窗口都关闭后才被调用,所以这不起作用。

**更新一些澄清:**我不想知道是谁发起了应用程序的关闭。我需要在wxView::OnClose()中找出用户是否只是关闭了这个单一窗口或整个应用程序。

mrzz3bfm

mrzz3bfm1#

我最终得到了一个解决方案,这可能是一个变通方案,但似乎工作得很好,至少在macOS上是这样。我在我的wxApp派生类中重写了FilterEvent()

  1. int MyApp::FilterEvent(wxEvent& event) {
  2. const wxEventType evt_type = event.GetEventType();
  3. const int evt_id = event.GetId();
  4. if( evt_type == wxEVT_MENU && evt_id == wxID_EXIT ) {
  5. m_about_to_quit = true;
  6. }
  7. }

字符串
无论用户点击“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

7uhlpewt

7uhlpewt2#

应用程序可以被程序显式关闭,也可以因为用户关闭了主窗口而被隐式关闭。在后一种情况下,你会得到wxEVT_CLOSE_WINDOW,所以你可以抓住它并在那里做任何你需要做的事情-例如,这通常用于建议在关闭前保存更改。

0aydgbwb

0aydgbwb3#

wxAppConsole::OnExit应该做的工作:

  1. class MyApp : public wxApp {
  2. public:
  3. //...
  4. virtual int OnExit();
  5. //...
  6. };
  7. int MyApp::OnExit() {
  8. // Perform cleanup or any actions before the application exits
  9. //...
  10. // Returning 0 indicates a normal exit, you can return a different value if needed
  11. return 0;
  12. }

字符串

展开查看全部

相关问题