X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6046e57acc865a87cf9f94d27d3c0fb4b0aa18ac..7a80bdc851ea4606a7e51570d2b62093594cd47d:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 7d430057a9..2cf9c66e86 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -99,14 +99,17 @@ 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 -const wxChar *wxCanvasClassName = wxT("wxWindowClass"); -const wxChar *wxCanvasClassNameNR = wxT("wxWindowClassNR"); -const wxChar *wxMDIFrameClassName = wxT("wxMDIFrameClass"); -const wxChar *wxMDIFrameClassNameNoRedraw = wxT("wxMDIFrameClassNR"); -const wxChar *wxMDIChildFrameClassName = wxT("wxMDIChildFrameClass"); -const wxChar *wxMDIChildFrameClassNameNoRedraw = wxT("wxMDIChildFrameClassNR"); - -HBRUSH wxDisableButtonBrush = (HBRUSH) 0; +#ifdef __WXWINCE__ +WXDLLIMPEXP_CORE wxChar *wxCanvasClassName; +WXDLLIMPEXP_CORE wxChar *wxCanvasClassNameNR; +#else +WXDLLIMPEXP_CORE const wxChar *wxCanvasClassName = wxT("wxWindowClass"); +WXDLLIMPEXP_CORE const wxChar *wxCanvasClassNameNR = wxT("wxWindowClassNR"); +#endif +WXDLLIMPEXP_CORE const wxChar *wxMDIFrameClassName = wxT("wxMDIFrameClass"); +WXDLLIMPEXP_CORE const wxChar *wxMDIFrameClassNameNoRedraw = wxT("wxMDIFrameClassNR"); +WXDLLIMPEXP_CORE const wxChar *wxMDIChildFrameClassName = wxT("wxMDIChildFrameClass"); +WXDLLIMPEXP_CORE const wxChar *wxMDIChildFrameClassNameNoRedraw = wxT("wxMDIChildFrameClassNR"); // ---------------------------------------------------------------------------- // private functions @@ -180,7 +183,7 @@ void wxGUIAppTraits::AfterChildWaitLoop(void *dataOrig) { wxEndBusyCursor(); - const ChildWaitLoopData * const data = (ChildWaitLoopData *)dataOrig; + ChildWaitLoopData * const data = (ChildWaitLoopData *)dataOrig; delete data->wd; @@ -188,6 +191,9 @@ void wxGUIAppTraits::AfterChildWaitLoop(void *dataOrig) // the other windows reenabled, the activation is going to return to the // window which had had it before data->winActive->Destroy(); + + // also delete the temporary data object itself + delete data; } bool wxGUIAppTraits::DoMessageFromThreadWait() @@ -254,6 +260,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 @@ -267,11 +287,11 @@ 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 ); - return FALSE; + return false; } #endif // wxUSE_UNICODE && !wxUSE_UNICODE_MSLU @@ -294,30 +314,8 @@ bool wxApp::Initialize(int& argc, wxChar **argv) #endif // wxUSE_OLE -#if wxUSE_CTL3D - if (!Ctl3dRegister(wxhInstance)) - wxLogError(wxT("Cannot register CTL3D")); - - Ctl3dAutoSubclass(wxhInstance); -#endif // wxUSE_CTL3D - RegisterWindowClasses(); -#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 ); - ::DeleteObject( (HGDIOBJ)lb.lbHatch ); - } - //else: wxWindows resources are probably not linked in -#endif - #if wxUSE_PENWINDOWS wxRegisterPenWin(); #endif @@ -325,7 +323,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) wxWinHandleHash = new wxWinHashTable(wxKEY_INTEGER, 100); #if !defined(__WXMICROWIN__) && !defined(__WXWINCE__) - wxSetKeyboardHook(TRUE); + wxSetKeyboardHook(true); #endif callBaseCleanup.Dismiss(); @@ -355,8 +353,8 @@ bool wxApp::RegisterWindowClasses() wndclass.hInstance = wxhInstance; wndclass.hCursor = ::LoadCursor((HINSTANCE)NULL, IDC_ARROW); - // Register the frame window class. - wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1); + // register the class for all normal windows + wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); wndclass.lpszClassName = wxCanvasClassName; wndclass.style = styleNormal; @@ -412,7 +410,7 @@ bool wxApp::RegisterWindowClasses() wxLogLastError(wxT("RegisterClass(no redraw MDI child)")); } - return TRUE; + return true; } // --------------------------------------------------------------------------- @@ -421,7 +419,7 @@ bool wxApp::RegisterWindowClasses() bool wxApp::UnregisterWindowClasses() { - bool retval = TRUE; + bool retval = true; #ifndef __WXMICROWIN__ // MDI frame window class. @@ -429,7 +427,7 @@ bool wxApp::UnregisterWindowClasses() { wxLogLastError(wxT("UnregisterClass(MDI parent)")); - retval = FALSE; + retval = false; } // "no redraw" MDI frame @@ -437,7 +435,7 @@ bool wxApp::UnregisterWindowClasses() { wxLogLastError(wxT("UnregisterClass(no redraw MDI parent frame)")); - retval = FALSE; + retval = false; } // MDI child frame window class. @@ -445,7 +443,7 @@ bool wxApp::UnregisterWindowClasses() { wxLogLastError(wxT("UnregisterClass(MDI child)")); - retval = FALSE; + retval = false; } // "no redraw" MDI child frame @@ -453,7 +451,7 @@ bool wxApp::UnregisterWindowClasses() { wxLogLastError(wxT("UnregisterClass(no redraw MDI child)")); - retval = FALSE; + retval = false; } // canvas class name @@ -461,14 +459,14 @@ bool wxApp::UnregisterWindowClasses() { wxLogLastError(wxT("UnregisterClass(canvas)")); - retval = FALSE; + retval = false; } if ( !::UnregisterClass(wxCanvasClassNameNR, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(no redraw canvas)")); - retval = FALSE; + retval = false; } #endif // __WXMICROWIN__ @@ -484,16 +482,13 @@ void wxApp::CleanUp() wxAppBase::CleanUp(); #if !defined(__WXMICROWIN__) && !defined(__WXWINCE__) - wxSetKeyboardHook(FALSE); + wxSetKeyboardHook(false); #endif #if wxUSE_PENWINDOWS wxCleanUpPenWin(); #endif - if ( wxDisableButtonBrush ) - ::DeleteObject( wxDisableButtonBrush ); - #if wxUSE_OLE #ifdef __WXWINCE__ ::CoUninitialize(); @@ -508,12 +503,13 @@ void wxApp::CleanUp() // unregister the classes now UnregisterWindowClasses(); -#if wxUSE_CTL3D - Ctl3dUnregister(wxhInstance); -#endif - delete wxWinHandleHash; wxWinHandleHash = NULL; + +#ifdef __WXWINCE__ + free( wxCanvasClassName ); + free( wxCanvasClassNameNR ); +#endif } // ---------------------------------------------------------------------------- @@ -581,7 +577,7 @@ void wxApp::WakeUpIdle() void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event)) { if (GetTopWindow()) - GetTopWindow()->Close(TRUE); + GetTopWindow()->Close(true); } // Default behaviour: close the application with prompts. The @@ -591,7 +587,7 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event) if (GetTopWindow()) { if (!GetTopWindow()->Close(!event.CanVeto())) - event.Veto(TRUE); + event.Veto(true); } } @@ -602,8 +598,7 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event) /* static */ int wxApp::GetComCtl32Version() { -//FIX ME FOR DIGITALMARS!! -#if defined(__WXMICROWIN__) || defined(__WXWINCE__) || defined(__DIGITALMARS__) +#if defined(__WXMICROWIN__) || defined(__WXWINCE__) return 0; #else // cache the result @@ -690,7 +685,7 @@ int wxApp::GetComCtl32Version() bool wxApp::Yield(bool onlyIfNeeded) { // MT-FIXME - static bool s_inYield = FALSE; + static bool s_inYield = false; #if wxUSE_LOG // disable log flushing from here because a call to wxYield() shouldn't @@ -705,10 +700,10 @@ bool wxApp::Yield(bool onlyIfNeeded) wxFAIL_MSG( wxT("wxYield called recursively" ) ); } - return FALSE; + return false; } - s_inYield = TRUE; + s_inYield = true; // we don't want to process WM_QUIT from here - it should be processed in // the main event loop in order to stop it @@ -732,9 +727,9 @@ bool wxApp::Yield(bool onlyIfNeeded) wxLog::Resume(); #endif // wxUSE_LOG - s_inYield = FALSE; + s_inYield = false; - return TRUE; + return true; } #if wxUSE_EXCEPTIONS @@ -746,7 +741,7 @@ bool wxApp::Yield(bool onlyIfNeeded) 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 + // could be dangerous to use any wxWidgets code in this state switch ( ::MessageBox ( @@ -777,3 +772,33 @@ terminate the program,\r\n\ } #endif // wxUSE_EXCEPTIONS + +// ---------------------------------------------------------------------------- +// deprecated event loop functions +// ---------------------------------------------------------------------------- + +#if WXWIN_COMPATIBILITY_2_4 + +#include "wx/evtloop.h" + +void wxApp::DoMessage(WXMSG *pMsg) +{ + wxEventLoop *evtLoop = wxEventLoop::GetActive(); + if ( evtLoop ) + evtLoop->ProcessMessage(pMsg); +} + +bool wxApp::DoMessage() +{ + wxEventLoop *evtLoop = wxEventLoop::GetActive(); + return evtLoop ? evtLoop->Dispatch() : false; +} + +bool wxApp::ProcessMessage(WXMSG* pMsg) +{ + wxEventLoop *evtLoop = wxEventLoop::GetActive(); + return evtLoop && evtLoop->PreProcessMessage(pMsg); +} + +#endif // WXWIN_COMPATIBILITY_2_4 +