X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0588f8d7031e89ea02a44199031f3ce0060d3f3b..3c203a185145a1aa720faf53e7f6fbebb35bce7a:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index bcbe186896..2c0de2d845 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -54,6 +54,7 @@ #include "wx/dynlib.h" #include "wx/msw/private.h" +#include "wx/msw/ole/oleutils.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" @@ -67,6 +68,10 @@ #define wxUSE_OLE 0 #endif // broken compilers +#if defined(__POCKETPC__) || defined(__SMARTPHONE__) +#include +#endif + #if wxUSE_OLE #include #endif @@ -81,6 +86,7 @@ #include "wx/msw/wince/missing.h" #endif +// For DLLVER_PLATFORM_WINDOWS #if (!defined(__MINGW32__) || wxCHECK_W32API_VERSION( 2, 0 )) && \ !defined(__CYGWIN__) && !defined(__DIGITALMARS__) && !defined(__WXWINCE__) && \ (!defined(_MSC_VER) || (_MSC_VER > 1100)) @@ -100,18 +106,16 @@ 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; +WXDLLIMPEXP_CORE wxChar *wxCanvasClassName; +WXDLLIMPEXP_CORE wxChar *wxCanvasClassNameNR; #else -const wxChar *wxCanvasClassName = wxT("wxWindowClass"); -const wxChar *wxCanvasClassNameNR = wxT("wxWindowClassNR"); +WXDLLIMPEXP_CORE const wxChar *wxCanvasClassName = wxT("wxWindowClass"); +WXDLLIMPEXP_CORE const wxChar *wxCanvasClassNameNR = wxT("wxWindowClassNR"); #endif -const wxChar *wxMDIFrameClassName = wxT("wxMDIFrameClass"); -const wxChar *wxMDIFrameClassNameNoRedraw = wxT("wxMDIFrameClassNR"); -const wxChar *wxMDIChildFrameClassName = wxT("wxMDIChildFrameClass"); -const wxChar *wxMDIChildFrameClassNameNoRedraw = wxT("wxMDIChildFrameClassNR"); - -HBRUSH wxDisableButtonBrush = (HBRUSH) 0; +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 @@ -280,7 +284,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) // program under Win9x w/o MSLU emulation layer - if so, abort right now // as it has no chance to work #if wxUSE_UNICODE && !wxUSE_UNICODE_MSLU - if ( wxGetOsVersion() != wxWINDOWS_NT && wxGetOsVersion() != wxWINDOWS_CE ) + if ( wxGetOsVersion() != wxWINDOWS_NT && wxGetOsVersion() != wxWINDOWS_CE && wxGetOsVersion() != wxWINDOWS_SMARTPHONE && wxGetOsVersion() != wxWINDOWS_POCKETPC ) { // note that we can use MessageBoxW() as it's implemented even under // Win9x - OTOH, we can't use wxGetTranslation() because the file APIs @@ -301,44 +305,14 @@ bool wxApp::Initialize(int& argc, wxChar **argv) InitCommonControls(); #endif // __WIN95__ -#if wxUSE_OLE || wxUSE_DRAG_AND_DROP - -#if wxUSE_OLE - // we need to initialize OLE library -#ifdef __WXWINCE__ - if ( FAILED(::CoInitializeEx(NULL, COINIT_MULTITHREADED)) ) - wxLogError(_("Cannot initialize OLE")); -#else - if ( FAILED(::OleInitialize(NULL)) ) - wxLogError(_("Cannot initialize OLE")); -#endif +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) + SHInitExtraControls(); #endif -#endif // wxUSE_OLE - -#if wxUSE_CTL3D - if (!Ctl3dRegister(wxhInstance)) - wxLogError(wxT("Cannot register CTL3D")); - - Ctl3dAutoSubclass(wxhInstance); -#endif // wxUSE_CTL3D + wxOleInitialize(); 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: wxWidgets resources are probably not linked in -#endif // !__WXMICROWIN__ && !__WXWINCE__ - #if wxUSE_PENWINDOWS wxRegisterPenWin(); #endif @@ -376,8 +350,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; @@ -512,16 +486,7 @@ void wxApp::CleanUp() wxCleanUpPenWin(); #endif - if ( wxDisableButtonBrush ) - ::DeleteObject( wxDisableButtonBrush ); - -#if wxUSE_OLE -#ifdef __WXWINCE__ - ::CoUninitialize(); -#else - ::OleUninitialize(); -#endif -#endif + wxOleUninitialize(); // for an EXE the classes are unregistered when it terminates but DLL may // be loaded several times (load/unload/load) into the same process in @@ -529,10 +494,6 @@ void wxApp::CleanUp() // unregister the classes now UnregisterWindowClasses(); -#if wxUSE_CTL3D - Ctl3dUnregister(wxhInstance); -#endif - delete wxWinHandleHash; wxWinHandleHash = NULL; @@ -651,7 +612,17 @@ int wxApp::GetComCtl32Version() // if so, then we can check for the version if ( dllComCtl32.IsLoaded() ) { -#ifdef DLLVER_PLATFORM_WINDOWS +#ifndef DLLVER_PLATFORM_WINDOWS + typedef struct _DllVersionInfo + { + DWORD cbSize; + DWORD dwMajorVersion; // Major version + DWORD dwMinorVersion; // Minor version + DWORD dwBuildNumber; // Build number + DWORD dwPlatformID; // DLLVER_PLATFORM_* + } DLLVERSIONINFO; + typedef HRESULT (CALLBACK* DLLGETVERSIONPROC)(DLLVERSIONINFO *); +#endif // try to use DllGetVersion() if available in _headers_ wxDYNLIB_FUNCTION( DLLGETVERSIONPROC, DllGetVersion, dllComCtl32 ); if ( pfnDllGetVersion ) @@ -673,7 +644,6 @@ int wxApp::GetComCtl32Version() dvi.dwMinorVersion; } } -#endif // if DllGetVersion() is unavailable either during compile or // run-time, try to guess the version otherwise