]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/app.cpp
A few tweaks and cleanups
[wxWidgets.git] / src / msw / app.cpp
index fd8d8e723a94a032c003c09bb55c4949545865c6..598355cff1ec36a84c51dad5eaa8be0fedd6e2ec 100644 (file)
@@ -49,6 +49,7 @@
 #endif
 
 #include "wx/cmdline.h"
 #endif
 
 #include "wx/cmdline.h"
+#include "wx/filename.h"
 #include "wx/module.h"
 
 #include "wx/msw/private.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
 
 // 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 *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;
 
 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
 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
     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,
         ::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;
     }
          _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
 
 
     wxBuffer = new wxChar[1500]; // FIXME
 
@@ -251,9 +242,11 @@ bool wxApp::Initialize()
         ;
 #endif // Win16
 
         ;
 #endif // Win16
 
+#if wxUSE_OLE
     // we need to initialize OLE library
     if ( FAILED(::OleInitialize(NULL)) )
         wxLogError(_("Cannot initialize OLE"));
     // we need to initialize OLE library
     if ( FAILED(::OleInitialize(NULL)) )
         wxLogError(_("Cannot initialize OLE"));
+#endif
 
 #endif // wxUSE_OLE
 
 
 #endif // wxUSE_OLE
 
@@ -325,6 +318,7 @@ bool wxApp::Initialize()
 bool wxApp::RegisterWindowClasses()
 {
     WNDCLASS wndclass;
 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
 
     // 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;
 
     // 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.hInstance     = wxhInstance;
-    wndclass.hIcon         = (HICON) NULL;
     wndclass.hCursor       = ::LoadCursor((HINSTANCE)NULL, IDC_ARROW);
     wndclass.hCursor       = ::LoadCursor((HINSTANCE)NULL, IDC_ARROW);
-    wndclass.lpszMenuName  = NULL;
 
     // Register the frame window class.
     wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
 
     // Register the frame window class.
     wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
-    wndclass.lpszClassName = wxFrameClassName;
+    wndclass.lpszClassName = wxCanvasClassName;
     wndclass.style         = styleNormal;
 
     if ( !RegisterClass(&wndclass) )
     wndclass.style         = styleNormal;
 
     if ( !RegisterClass(&wndclass) )
@@ -353,7 +343,7 @@ bool wxApp::RegisterWindowClasses()
     }
 
     // "no redraw" frame
     }
 
     // "no redraw" frame
-    wndclass.lpszClassName = wxFrameClassNameNoRedraw;
+    wndclass.lpszClassName = wxCanvasClassNameNR;
     wndclass.style         = styleNoRedraw;
 
     if ( !RegisterClass(&wndclass) )
     wndclass.style         = styleNoRedraw;
 
     if ( !RegisterClass(&wndclass) )
@@ -409,49 +399,6 @@ bool wxApp::RegisterWindowClasses()
         return FALSE;
     }
 
         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;
 }
 
     return TRUE;
 }
 
@@ -464,24 +411,8 @@ bool wxApp::UnregisterWindowClasses()
     bool retval = TRUE;
 
 #ifndef __WXMICROWIN__
     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.
     // MDI frame window class.
-    if ( !UnregisterClass(wxMDIFrameClassName, wxhInstance) )
+    if ( !::UnregisterClass(wxMDIFrameClassName, wxhInstance) )
     {
         wxLogLastError(wxT("UnregisterClass(MDI parent)"));
 
     {
         wxLogLastError(wxT("UnregisterClass(MDI parent)"));
 
@@ -489,7 +420,7 @@ bool wxApp::UnregisterWindowClasses()
     }
 
     // "no redraw" MDI frame
     }
 
     // "no redraw" MDI frame
-    if ( !UnregisterClass(wxMDIFrameClassNameNoRedraw, wxhInstance) )
+    if ( !::UnregisterClass(wxMDIFrameClassNameNoRedraw, wxhInstance) )
     {
         wxLogLastError(wxT("UnregisterClass(no redraw MDI parent frame)"));
 
     {
         wxLogLastError(wxT("UnregisterClass(no redraw MDI parent frame)"));
 
@@ -497,7 +428,7 @@ bool wxApp::UnregisterWindowClasses()
     }
 
     // MDI child frame window class.
     }
 
     // MDI child frame window class.
-    if ( !UnregisterClass(wxMDIChildFrameClassName, wxhInstance) )
+    if ( !::UnregisterClass(wxMDIChildFrameClassName, wxhInstance) )
     {
         wxLogLastError(wxT("UnregisterClass(MDI child)"));
 
     {
         wxLogLastError(wxT("UnregisterClass(MDI child)"));
 
@@ -505,45 +436,29 @@ bool wxApp::UnregisterWindowClasses()
     }
 
     // "no redraw" MDI child frame
     }
 
     // "no redraw" MDI child frame
-    if ( !UnregisterClass(wxMDIChildFrameClassNameNoRedraw, wxhInstance) )
+    if ( !::UnregisterClass(wxMDIChildFrameClassNameNoRedraw, wxhInstance) )
     {
         wxLogLastError(wxT("UnregisterClass(no redraw MDI child)"));
 
         retval = FALSE;
     }
 
     {
         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;
     }
 
     {
         wxLogLastError(wxT("UnregisterClass(canvas)"));
 
         retval = FALSE;
     }
 
-    if ( !UnregisterClass(wxCanvasClassNameNR, wxhInstance) )
+    if ( !::UnregisterClass(wxCanvasClassNameNR, wxhInstance) )
     {
         wxLogLastError(wxT("UnregisterClass(no redraw canvas)"));
 
         retval = FALSE;
     }
     {
         wxLogLastError(wxT("UnregisterClass(no redraw canvas)"));
 
         retval = FALSE;
     }
-#endif
-    // __WXMICROWIN__
+#endif // __WXMICROWIN__
+
     return retval;
 }
 
     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);
 
     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]);
     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
         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;
 
             wxTheApp->ConvertToStandardCommandArgs(lpCmdLine);
         wxTheApp->m_nCmdShow = nCmdShow;
 
@@ -1477,29 +1399,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))
 // 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))