X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3ac59f211b7b167e49327add5a5d9a25135c0171..f5e2134e5b3a59e4b63d6f27289b41e10ad1ca03:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index fd8d8e723a..5d3f400257 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -49,6 +49,7 @@ #endif #include "wx/cmdline.h" +#include "wx/filename.h" #include "wx/module.h" #include "wx/msw/private.h" @@ -135,16 +136,12 @@ wxApp *wxTheApp = NULL; // NB: all "NoRedraw" classes must have the same names as the "normal" classes // with NR suffix - wxWindow::MSWCreate() supposes this -const wxChar *wxFrameClassName = wxT("wxFrameClass"); -const wxChar *wxFrameClassNameNoRedraw = wxT("wxFrameClassNR"); +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"); -const wxChar *wxPanelClassName = wxT("wxPanelClass"); -const wxChar *wxPanelClassNameNR = wxT("wxPanelClassNR"); -const wxChar *wxCanvasClassName = wxT("wxCanvasClass"); -const wxChar *wxCanvasClassNameNR = wxT("wxCanvasClassNR"); HICON wxSTD_FRAME_ICON = (HICON) NULL; HICON wxSTD_MDICHILDFRAME_ICON = (HICON) NULL; @@ -192,9 +189,9 @@ END_EVENT_TABLE() bool wxApp::Initialize() { // the first thing to do is to check if we're trying to run an Unicode - // program under Win9x - if so, abort right now as it has no chance to - // work -#if wxUSE_UNICODE + // 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 ) { // note that we can use MessageBoxW() as it's implemented even under @@ -203,20 +200,14 @@ bool wxApp::Initialize() ::MessageBox ( NULL, - _T("This program uses Unicode and requires Windows NT/2000.\nProgram aborted."), + _T("This program uses Unicode and requires Windows NT/2000/XP.\nProgram aborted."), _T("wxWindows Fatal Error"), MB_ICONERROR | MB_OK ); return FALSE; } -#endif // wxUSE_UNICODE - - // Some people may wish to use this, but - // probably it shouldn't be here by default. -#ifdef __WXDEBUG__ - // wxRedirectIOToConsole(); -#endif +#endif // wxUSE_UNICODE && !wxUSE_UNICODE_MSLU wxBuffer = new wxChar[1500]; // FIXME @@ -251,9 +242,11 @@ bool wxApp::Initialize() ; #endif // Win16 +#if wxUSE_OLE // we need to initialize OLE library if ( FAILED(::OleInitialize(NULL)) ) wxLogError(_("Cannot initialize OLE")); +#endif #endif // wxUSE_OLE @@ -325,6 +318,7 @@ bool wxApp::Initialize() bool wxApp::RegisterWindowClasses() { WNDCLASS wndclass; + wxZeroMemory(wndclass); // for each class we register one with CS_(V|H)REDRAW style and one // without for windows created with wxNO_FULL_REDRAW_ON_REPAINT flag @@ -333,16 +327,12 @@ bool wxApp::RegisterWindowClasses() // the fields which are common to all classes wndclass.lpfnWndProc = (WNDPROC)wxWndProc; - wndclass.cbClsExtra = 0; - wndclass.cbWndExtra = sizeof( DWORD ); // VZ: what is this DWORD used for? wndclass.hInstance = wxhInstance; - wndclass.hIcon = (HICON) NULL; wndclass.hCursor = ::LoadCursor((HINSTANCE)NULL, IDC_ARROW); - wndclass.lpszMenuName = NULL; // Register the frame window class. wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1); - wndclass.lpszClassName = wxFrameClassName; + wndclass.lpszClassName = wxCanvasClassName; wndclass.style = styleNormal; if ( !RegisterClass(&wndclass) ) @@ -353,7 +343,7 @@ bool wxApp::RegisterWindowClasses() } // "no redraw" frame - wndclass.lpszClassName = wxFrameClassNameNoRedraw; + wndclass.lpszClassName = wxCanvasClassNameNR; wndclass.style = styleNoRedraw; if ( !RegisterClass(&wndclass) ) @@ -409,49 +399,6 @@ bool wxApp::RegisterWindowClasses() return FALSE; } - // Register the panel window class. - wndclass.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH ); - wndclass.lpszClassName = wxPanelClassName; - wndclass.style = styleNormal; - - if ( !RegisterClass(&wndclass) ) - { - wxLogLastError(wxT("RegisterClass(panel)")); - - return FALSE; - } - - // Register the no redraw panel window class. - wndclass.lpszClassName = wxPanelClassNameNR; - wndclass.style = styleNoRedraw; - - if ( !RegisterClass(&wndclass) ) - { - wxLogLastError(wxT("RegisterClass(no redraw panel)")); - - return FALSE; - } - - // Register the canvas and textsubwindow class name - wndclass.hbrBackground = (HBRUSH)NULL; - wndclass.lpszClassName = wxCanvasClassName; - - if ( !RegisterClass(&wndclass) ) - { - wxLogLastError(wxT("RegisterClass(canvas)")); - - return FALSE; - } - - wndclass.lpszClassName = wxCanvasClassNameNR; - wndclass.style = styleNoRedraw; - if ( !RegisterClass(&wndclass) ) - { - wxLogLastError(wxT("RegisterClass(no redraw canvas)")); - - return FALSE; - } - return TRUE; } @@ -464,24 +411,8 @@ bool wxApp::UnregisterWindowClasses() bool retval = TRUE; #ifndef __WXMICROWIN__ - // frame window class. - if ( !UnregisterClass(wxFrameClassName, wxhInstance) ) - { - wxLogLastError(wxT("UnregisterClass(frame)")); - - retval = FALSE; - } - - // "no redraw" frame - if ( !UnregisterClass(wxFrameClassNameNoRedraw, wxhInstance) ) - { - wxLogLastError(wxT("UnregisterClass(no redraw frame)")); - - return FALSE; - } - // MDI frame window class. - if ( !UnregisterClass(wxMDIFrameClassName, wxhInstance) ) + if ( !::UnregisterClass(wxMDIFrameClassName, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(MDI parent)")); @@ -489,7 +420,7 @@ bool wxApp::UnregisterWindowClasses() } // "no redraw" MDI frame - if ( !UnregisterClass(wxMDIFrameClassNameNoRedraw, wxhInstance) ) + if ( !::UnregisterClass(wxMDIFrameClassNameNoRedraw, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(no redraw MDI parent frame)")); @@ -497,7 +428,7 @@ bool wxApp::UnregisterWindowClasses() } // MDI child frame window class. - if ( !UnregisterClass(wxMDIChildFrameClassName, wxhInstance) ) + if ( !::UnregisterClass(wxMDIChildFrameClassName, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(MDI child)")); @@ -505,45 +436,29 @@ bool wxApp::UnregisterWindowClasses() } // "no redraw" MDI child frame - if ( !UnregisterClass(wxMDIChildFrameClassNameNoRedraw, wxhInstance) ) + if ( !::UnregisterClass(wxMDIChildFrameClassNameNoRedraw, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(no redraw MDI child)")); retval = FALSE; } - // panel window class. - if ( !UnregisterClass(wxPanelClassName, wxhInstance) ) - { - wxLogLastError(wxT("UnregisterClass(panel)")); - - retval = FALSE; - } - - // no redraw panel window class. - if ( !UnregisterClass(wxPanelClassNameNR, wxhInstance) ) - { - wxLogLastError(wxT("UnregisterClass(no redraw panel)")); - - retval = FALSE; - } - - // canvas and textsubwindow class name - if ( !UnregisterClass(wxCanvasClassName, wxhInstance) ) + // canvas class name + if ( !::UnregisterClass(wxCanvasClassName, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(canvas)")); retval = FALSE; } - if ( !UnregisterClass(wxCanvasClassNameNR, wxhInstance) ) + if ( !::UnregisterClass(wxCanvasClassNameNR, wxhInstance) ) { wxLogLastError(wxT("UnregisterClass(no redraw canvas)")); retval = FALSE; } -#endif - // __WXMICROWIN__ +#endif // __WXMICROWIN__ + return retval; } @@ -566,6 +481,13 @@ void wxApp::ConvertToStandardCommandArgs(const char* lpCmdLine) argv[0] = new wxChar[260]; // 260 is MAX_PATH value from windef.h ::GetModuleFileName(wxhInstance, argv[0], 260); + // also set the app name from argv[0] + wxString name; + wxFileName::SplitPath(argv[0], NULL, &name, NULL); + + SetAppName(name); + + // copy all the other arguments to wxApp::argv[] for ( int i = 1; i < argc; i++ ) { argv[i] = copystring(args[i - 1]); @@ -779,7 +701,7 @@ int wxEntry(WXHINSTANCE hInstance, wxCHECK_MSG( wxTheApp, 0, wxT("You have to define an instance of wxApp!") ); // save the WinMain() parameters - if (lpCmdLine) // MicroWindows pass NULL for this + if (lpCmdLine) // MicroWindows passes NULL wxTheApp->ConvertToStandardCommandArgs(lpCmdLine); wxTheApp->m_nCmdShow = nCmdShow; @@ -1000,16 +922,12 @@ bool wxApp::DoMessage() { s_hadGuiLock = TRUE; - size_t count = s_aSavedMessages.Count(); + size_t count = s_aSavedMessages.GetCount(); for ( size_t n = 0; n < count; n++ ) { MSG& msg = s_aSavedMessages[n]; - if ( !ProcessMessage((WXMSG *)&msg) ) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - } + DoMessage((WXMSG *)&msg); } s_aSavedMessages.Empty(); @@ -1477,29 +1395,6 @@ void wxWakeUpIdle() //----------------------------------------------------------------------------- -wxIcon -wxApp::GetStdIcon(int which) const -{ - switch(which) - { - case wxICON_INFORMATION: - return wxIcon("wxICON_INFO"); - - case wxICON_QUESTION: - return wxIcon("wxICON_QUESTION"); - - case wxICON_EXCLAMATION: - return wxIcon("wxICON_WARNING"); - - default: - wxFAIL_MSG(wxT("requested non existent standard icon")); - // still fall through - - case wxICON_HAND: - return wxIcon("wxICON_ERROR"); - } -} - // For some reason, with MSVC++ 1.5, WinMain isn't linked in properly // if in a separate file. So include it here to ensure it's linked. #if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__TWIN32__) && !defined(WXMAKINGDLL))