From 6046e57acc865a87cf9f94d27d3c0fb4b0aa18ac Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 30 Mar 2004 20:50:59 +0000 Subject: [PATCH] implemented wxApp::OnExceptionInMainLoop() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26506 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/app.h | 11 ++++----- src/msw/app.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/include/wx/msw/app.h b/include/wx/msw/app.h index 058849b80f..10e1dbd4fb 100644 --- a/include/wx/msw/app.h +++ b/include/wx/msw/app.h @@ -50,20 +50,18 @@ public: void OnEndSession(wxCloseEvent& event); void OnQueryEndSession(wxCloseEvent& event); +#if wxUSE_EXCEPTIONS + virtual bool OnExceptionInMainLoop(); +#endif // wxUSE_EXCEPTIONS + protected: int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT - /* Windows-specific wxApp definitions */ - public: - // Implementation static bool RegisterWindowClasses(); static bool UnregisterWindowClasses(); - // idle processing - // --------------- - #if wxUSE_RICHEDIT // initialize the richedit DLL of (at least) given version, return TRUE if // ok (Win95 has version 1, Win98/NT4 has 1 and 2, W2K has 3) @@ -74,7 +72,6 @@ public: // wasn't found at all static int GetComCtl32Version(); -public: // the SW_XXX value to be used for the frames opened by the application // (currently seems unused which is a bug -- TODO) static int m_nCmdShow; diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 6143dbb852..7d430057a9 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -76,6 +76,11 @@ #include "wx/msw/wrapcctl.h" +// For MB_TASKMODAL +#ifdef __WXWINCE__ +#include "wx/msw/wince/missing.h" +#endif + #if (!defined(__MINGW32__) || wxCHECK_W32API_VERSION( 2, 0 )) && \ !defined(__CYGWIN__) && !defined(__DIGITALMARS__) && !defined(__WXWINCE__) && \ (!defined(_MSC_VER) || (_MSC_VER > 1100)) @@ -535,6 +540,10 @@ wxApp::~wxApp() delete [] argv; } +// ---------------------------------------------------------------------------- +// wxApp idle handling +// ---------------------------------------------------------------------------- + void wxApp::OnIdle(wxIdleEvent& event) { wxAppBase::OnIdle(event); @@ -565,6 +574,10 @@ void wxApp::WakeUpIdle() } } +// ---------------------------------------------------------------------------- +// other wxApp event hanlders +// ---------------------------------------------------------------------------- + void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event)) { if (GetTopWindow()) @@ -582,6 +595,10 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event) } } +// ---------------------------------------------------------------------------- +// miscellaneous +// ---------------------------------------------------------------------------- + /* static */ int wxApp::GetComCtl32Version() { @@ -720,3 +737,43 @@ bool wxApp::Yield(bool onlyIfNeeded) return TRUE; } +#if wxUSE_EXCEPTIONS + +// ---------------------------------------------------------------------------- +// exception handling +// ---------------------------------------------------------------------------- + +bool wxApp::OnExceptionInMainLoop() +{ + // ask the user about what to do: use the Win32 API function here as it + // could be dangerous to use any wxWindows code in this state + switch ( + ::MessageBox + ( + NULL, + _T("An unhandled exception occurred. Press \"Abort\" to \ +terminate the program,\r\n\ +\"Retry\" to exit the program normally and \"Ignore\" to try to continue."), + _T("Unhandled exception"), + MB_ABORTRETRYIGNORE | + MB_ICONERROR| + MB_TASKMODAL + ) + ) + { + case IDABORT: + throw; + + default: + wxFAIL_MSG( _T("unexpected MessageBox() return code") ); + // fall through + + case IDRETRY: + return false; + + case IDIGNORE: + return true; + } +} + +#endif // wxUSE_EXCEPTIONS -- 2.45.2