]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/app.cpp
Applied a few old patches,
[wxWidgets.git] / src / msw / app.cpp
index 8b1b21727f3c5947d9ac942876896dcc197433b6..d1a70a3d3c8de29eaa0b6aa316aee2b7c607941e 100644 (file)
@@ -19,6 +19,7 @@
 
 #ifdef __GNUG__
     #pragma implementation "app.h"
+    #pragma implementation "appbase.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #endif
 
 // OLE is used for drag-and-drop, clipboard, OLE Automation...
+#ifndef wxUSE_NORLANDER_HEADERS
 #if defined(__GNUWIN32__) || defined(__SC__) || defined(__SALFORDC__)
     #undef wxUSE_OLE
 
     #define  wxUSE_OLE 0
 #endif // broken compilers
+#endif
 
 #if wxUSE_OLE
     #include <ole2.h>
@@ -81,7 +84,7 @@
 #include <string.h>
 #include <ctype.h>
 
-#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__)
+#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS)
     #include <commctrl.h>
 #endif
 
@@ -107,9 +110,15 @@ MSG s_currentMsg;
 wxApp *wxTheApp = NULL;
 
 // FIXME why not const? and not static?
+
+// NB: all "NoRedraw" classes must have the same names as the "normal" classes
+//     with NR suffix - wxWindow::MSWCreate() supposes this
 wxChar wxFrameClassName[]         = _T("wxFrameClass");
+wxChar wxFrameClassNameNoRedraw[] = _T("wxFrameClassNR");
 wxChar wxMDIFrameClassName[]      = _T("wxMDIFrameClass");
+wxChar wxMDIFrameClassNameNoRedraw[] = _T("wxMDIFrameClassNR");
 wxChar wxMDIChildFrameClassName[] = _T("wxMDIChildFrameClass");
+wxChar wxMDIChildFrameClassNameNoRedraw[] = _T("wxMDIChildFrameClassNR");
 wxChar wxPanelClassName[]         = _T("wxPanelClass");
 wxChar wxCanvasClassName[]        = _T("wxCanvasClass");
 
@@ -203,15 +212,18 @@ bool wxApp::Initialize()
 
 #endif // __WIN95__
 
+#if wxUSE_OLE
+
+#ifdef __WIN16__
     // for OLE, enlarge message queue to be as large as possible
     int iMsg = 96;
-    while (!SetMessageQueue(iMsg) && (iMsg -= 8));
-
-#if wxUSE_OLE
+    while (!SetMessageQueue(iMsg) && (iMsg -= 8))
+        ;
+#endif // Win16
     // we need to initialize OLE library
     if ( FAILED(::OleInitialize(NULL)) )
         wxLogError(_("Cannot initialize OLE"));
-#endif
+#endif // wxUSE_OLE
 
 #if wxUSE_CTL3D
     if (!Ctl3dRegister(wxhInstance))
@@ -273,11 +285,15 @@ bool wxApp::RegisterWindowClasses()
 {
     WNDCLASS 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
+    static const long styleNormal = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
+    static const long styleNoRedraw = CS_DBLCLKS;
+
     // the fields which are common to all classes
-    wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
     wndclass.lpfnWndProc   = (WNDPROC)wxWndProc;
     wndclass.cbClsExtra    = 0;
-    wndclass.cbWndExtra    = sizeof( DWORD ); // what is this DWORD used for?
+    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);
@@ -285,9 +301,7 @@ bool wxApp::RegisterWindowClasses()
 
     // Register the frame window class.
     wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
-#ifdef _MULTIPLE_INSTANCES
-    sprintf( wxFrameClassName,"wxFrameClass%d", wxhInstance );
-#endif
+    wndclass.style         = styleNormal;
     wndclass.lpszClassName = wxFrameClassName;
 
     if ( !RegisterClass(&wndclass) )
@@ -297,9 +311,20 @@ bool wxApp::RegisterWindowClasses()
         return FALSE;
     }
 
+    // "no redraw" frame
+    wndclass.lpszClassName = wxFrameClassNameNoRedraw;
+    wndclass.style         = styleNoRedraw;
+
+    if ( !RegisterClass(&wndclass) )
+    {
+        wxLogLastError("RegisterClass(no redraw frame)");
+
+        return FALSE;
+    }
+
     // Register the MDI frame window class.
     wndclass.hbrBackground = (HBRUSH)NULL; // paint MDI frame ourselves
-    wndclass.lpszClassName = wxMDIFrameClassName;
+    wndclass.lpszClassName = wxMDIFrameClassNameNoRedraw;
 
     if ( !RegisterClass(&wndclass) )
     {
@@ -308,6 +333,17 @@ bool wxApp::RegisterWindowClasses()
         return FALSE;
     }
 
+    // "no redraw" MDI frame
+    wndclass.lpszClassName = wxMDIFrameClassName;
+    wndclass.style         = styleNoRedraw;
+
+    if ( !RegisterClass(&wndclass) )
+    {
+        wxLogLastError("RegisterClass(no redraw MDI parent frame)");
+
+        return FALSE;
+    }
+
     // Register the MDI child frame window class.
     wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
     wndclass.lpszClassName = wxMDIChildFrameClassName;
@@ -319,6 +355,17 @@ bool wxApp::RegisterWindowClasses()
         return FALSE;
     }
 
+    // "no redraw" MDI child frame
+    wndclass.lpszClassName = wxMDIChildFrameClassNameNoRedraw;
+    wndclass.style         = styleNoRedraw;
+
+    if ( !RegisterClass(&wndclass) )
+    {
+        wxLogLastError("RegisterClass(no redraw MDI child)");
+
+        return FALSE;
+    }
+
     // Register the panel window class.
     wndclass.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH );
     wndclass.lpszClassName = wxPanelClassName;
@@ -708,7 +755,7 @@ int wxEntry(WXHINSTANCE hInstance)
 
 //// Static member initialization
 
-wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL;
+wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
 
 wxApp::wxApp()
 {
@@ -1062,21 +1109,6 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event)
     }
 }
 
-wxLog* wxApp::CreateLogTarget()
-{
-    return new wxLogGui;
-}
-
-wxWindow* wxApp::GetTopWindow() const
-{
-    if (m_topWindow)
-        return m_topWindow;
-    else if (wxTopLevelWindows.GetCount() > 0)
-        return wxTopLevelWindows.GetFirst()->GetData();
-    else
-        return NULL;
-}
-
 int wxApp::GetComCtl32Version() const
 {
     // have we loaded COMCTL32 yet?
@@ -1149,28 +1181,28 @@ bool wxYield()
 
     return TRUE;
 }
+
 wxIcon
 wxApp::GetStdIcon(int which) const
 {
-   switch(which)
-   {
-   case wxICON_INFORMATION:
-      return wxIcon("wxICON_INFO");
-      break;
-   case wxICON_HAND:
-      return wxIcon("wxICON_ERROR");
-      break;
-   case wxICON_QUESTION:
-      return wxIcon("wxICON_QUESTION");
-      break;
-   case wxICON_EXCLAMATION:
-      return wxIcon("wxICON_WARNING");
-      break;
-   default:
-      wxFAIL_MSG("requested non existent standard icon");
-      return wxIcon("wxICON_ERROR");
-      break;
-   }
+    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(_T("requested non existent standard icon"));
+            // still fall through
+
+        case wxICON_HAND:
+            return wxIcon("wxICON_ERROR");
+    }
 }