[msw 2.8.7] Problem saving application settings when system is shut down

Vadim Zeitlin vadim at wxwidgets.org
Thu Apr 17 17:23:49 PDT 2008


On Thu, 17 Apr 2008 22:19:27 +0200 Eric Jensen <ml at j-dev.de> wrote:

EJ> just creating a dummy window did not work. Even creating a dummy
EJ> wxFrame in wxApp::OnEndSession() did not change the behavior. Which
EJ> confused me a bit, cause i'm still not 100% sure what actually
EJ> triggers killing the process.

 My hypothesis is that the destruction of the last window belonging to it
does.

EJ> Your second idea worked though. Here is what we have now:
EJ> 
EJ> void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event))
EJ> {
EJ>     //if(GetTopWindow()) GetTopWindow()->Close(true);
EJ>     // Windows will terminate the process soon after we
EJ>     // return from WM_ENDSESSION handler anyhow, so make
EJ>     // sure we at least execute our cleanup code before
EJ> 
EJ>     if(wxTopLevelWindows.GetCount()>0) {
EJ>         wxTopLevelWindows[0]->SetHWND(NULL);
EJ>     }
EJ> 
EJ>     const int rc = OnExit();
EJ>     wxEntryCleanup();
EJ> 
EJ>     // calling exit() instead of ExitProcess() or not doing
EJ>     // anything at all and being killed by Windows has the
EJ>     // advantage of executing the dtors of global objects
EJ>     exit(rc);
EJ> }
EJ> 
EJ> Saving the old HWND and calling ::DestroyWindow() on it later does not
EJ> work (leads to a crash).
EJ> 
EJ> I'll do some more testing tomorrow.

 Please let me know if you discover any problems with this or whether I
should go ahead and apply it.

 Thanks,
VZ

-- 
TT-Solutions: wxWidgets consultancy and technical support
               http://www.tt-solutions.com/



More information about the wx-users mailing list