X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3a5bcc4db0851bf8cd3063917511b0b17c7f9679..625d14abfaf803bec9e8c1c42ed2b4bc94afd75e:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 6143dbb852..688ca701e2 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)) @@ -94,8 +99,13 @@ extern void wxSetKeyboardHook(bool doIt); // NB: all "NoRedraw" classes must have the same names as the "normal" classes // with NR suffix - wxWindow::MSWCreate() supposes this +#ifdef __WXWINCE__ + wxChar *wxCanvasClassName; + wxChar *wxCanvasClassNameNR; +#else const wxChar *wxCanvasClassName = wxT("wxWindowClass"); const wxChar *wxCanvasClassNameNR = wxT("wxWindowClassNR"); +#endif const wxChar *wxMDIFrameClassName = wxT("wxMDIFrameClass"); const wxChar *wxMDIFrameClassNameNoRedraw = wxT("wxMDIFrameClassNR"); const wxChar *wxMDIChildFrameClassName = wxT("wxMDIChildFrameClass"); @@ -249,6 +259,20 @@ bool wxApp::Initialize(int& argc, wxChar **argv) // ensure that base cleanup is done if we return too early wxCallBaseCleanup callBaseCleanup(this); +#ifdef __WXWINCE__ + wxString tmp = GetAppName(); + tmp += wxT("ClassName"); + wxCanvasClassName = wxStrdup( tmp.c_str() ); + tmp += wxT("NR"); + wxCanvasClassNameNR = wxStrdup( tmp.c_str() ); + HWND hWnd = FindWindow( wxCanvasClassNameNR, NULL ); + if (hWnd) + { + SetForegroundWindow( (HWND)(((DWORD)hWnd)|0x01) ); + return false; + } +#endif + // the first thing to do is to check if we're trying to run an Unicode // program under Win9x w/o MSLU emulation layer - if so, abort right now // as it has no chance to work @@ -262,7 +286,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) ( NULL, _T("This program uses Unicode and requires Windows NT/2000/XP/CE.\nProgram aborted."), - _T("wxWindows Fatal Error"), + _T("wxWidgets Fatal Error"), MB_ICONERROR | MB_OK ); @@ -298,20 +322,19 @@ bool wxApp::Initialize(int& argc, wxChar **argv) RegisterWindowClasses(); -#if defined(__WXMICROWIN__) && !defined(__WXWINCE__) +#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__) // Create the brush for disabling bitmap buttons - LOGBRUSH lb; lb.lbStyle = BS_PATTERN; lb.lbColor = 0; lb.lbHatch = (int)LoadBitmap( wxhInstance, wxT("wxDISABLE_BUTTON_BITMAP") ); if ( lb.lbHatch ) { - wxDisableButtonBrush = ::CreateBrushIndirect( & lb ); + wxDisableButtonBrush = ::CreateBrushIndirect( &lb ); ::DeleteObject( (HGDIOBJ)lb.lbHatch ); } - //else: wxWindows resources are probably not linked in -#endif + //else: wxWidgets resources are probably not linked in +#endif // !__WXMICROWIN__ && !__WXWINCE__ #if wxUSE_PENWINDOWS wxRegisterPenWin(); @@ -509,6 +532,11 @@ void wxApp::CleanUp() delete wxWinHandleHash; wxWinHandleHash = NULL; + +#ifdef __WXWINCE__ + free( wxCanvasClassName ); + free( wxCanvasClassNameNR ); +#endif } // ---------------------------------------------------------------------------- @@ -535,6 +563,10 @@ wxApp::~wxApp() delete [] argv; } +// ---------------------------------------------------------------------------- +// wxApp idle handling +// ---------------------------------------------------------------------------- + void wxApp::OnIdle(wxIdleEvent& event) { wxAppBase::OnIdle(event); @@ -565,6 +597,10 @@ void wxApp::WakeUpIdle() } } +// ---------------------------------------------------------------------------- +// other wxApp event hanlders +// ---------------------------------------------------------------------------- + void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event)) { if (GetTopWindow()) @@ -582,6 +618,10 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event) } } +// ---------------------------------------------------------------------------- +// miscellaneous +// ---------------------------------------------------------------------------- + /* static */ int wxApp::GetComCtl32Version() { @@ -720,3 +760,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 wxWidgets 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