]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/nativdlg.cpp
Applied patch [ 774886 ] wxnotebook bug
[wxWidgets.git] / src / msw / nativdlg.cpp
index d85100a5ed54540c4a0e4bce6c53beae679de65a..ed6efcdd49829699b3212819875dde91fdd4e461 100644 (file)
@@ -5,8 +5,8 @@
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:     wxWindows license
+// Copyright:   (c) Julian Smart
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ===========================================================================
 /////////////////////////////////////////////////////////////////////////////
 
 // ===========================================================================
     #include "wx/wx.h"
 #endif
 
     #include "wx/wx.h"
 #endif
 
+#if defined(__WIN95__)
 #include "wx/spinbutt.h"
 #include "wx/spinbutt.h"
+#endif
 #include "wx/msw/private.h"
 
 // ---------------------------------------------------------------------------
 // global functions
 // ---------------------------------------------------------------------------
 
 #include "wx/msw/private.h"
 
 // ---------------------------------------------------------------------------
 // global functions
 // ---------------------------------------------------------------------------
 
-extern wxWindow *wxWndHook;
 extern LONG APIENTRY _EXPORT wxDlgProc(HWND hWnd, UINT message,
                                        WPARAM wParam, LPARAM lParam);
 
 extern LONG APIENTRY _EXPORT wxDlgProc(HWND hWnd, UINT message,
                                        WPARAM wParam, LPARAM lParam);
 
@@ -52,12 +53,12 @@ extern LONG APIENTRY _EXPORT wxDlgProc(HWND hWnd, UINT message,
 bool wxWindow::LoadNativeDialog(wxWindow* parent, wxWindowID& id)
 {
     m_windowId = id;
 bool wxWindow::LoadNativeDialog(wxWindow* parent, wxWindowID& id)
 {
     m_windowId = id;
-    wxWndHook = this;
+
+    wxWindowCreationHook hook(this);
     m_hWnd = (WXHWND)::CreateDialog((HINSTANCE)wxGetInstance(),
                                     MAKEINTRESOURCE(id),
                                     parent ? (HWND)parent->GetHWND() : 0,
                                     (DLGPROC) wxDlgProc);
     m_hWnd = (WXHWND)::CreateDialog((HINSTANCE)wxGetInstance(),
                                     MAKEINTRESOURCE(id),
                                     parent ? (HWND)parent->GetHWND() : 0,
                                     (DLGPROC) wxDlgProc);
-    wxWndHook = NULL;
 
     if ( !m_hWnd )
         return FALSE;
 
     if ( !m_hWnd )
         return FALSE;
@@ -91,12 +92,11 @@ bool wxWindow::LoadNativeDialog(wxWindow* parent, const wxString& name)
 {
     SetName(name);
 
 {
     SetName(name);
 
-    wxWndHook = this;
+    wxWindowCreationHook hook(this);
     m_hWnd = (WXHWND)::CreateDialog((HINSTANCE) wxGetInstance(),
                                     name.c_str(),
                                     parent ? (HWND)parent->GetHWND() : 0,
                                     (DLGPROC)wxDlgProc);
     m_hWnd = (WXHWND)::CreateDialog((HINSTANCE) wxGetInstance(),
                                     name.c_str(),
                                     parent ? (HWND)parent->GetHWND() : 0,
                                     (DLGPROC)wxDlgProc);
-    wxWndHook = NULL;
 
     if ( !m_hWnd )
         return FALSE;
 
     if ( !m_hWnd )
         return FALSE;
@@ -108,7 +108,20 @@ bool wxWindow::LoadNativeDialog(wxWindow* parent, const wxString& name)
     else
         wxTopLevelWindows.Append(this);
 
     else
         wxTopLevelWindows.Append(this);
 
-    // FIXME why don't we enum all children here?
+    // Enumerate all children
+    HWND hWndNext;
+    hWndNext = ::GetWindow((HWND) m_hWnd, GW_CHILD);
+
+    wxWindow* child = NULL;
+    if (hWndNext)
+        child = CreateWindowFromHWND(this, (WXHWND) hWndNext);
+
+    while (hWndNext != (HWND) NULL)
+    {
+        hWndNext = ::GetWindow(hWndNext, GW_HWNDNEXT);
+        if (hWndNext)
+            child = CreateWindowFromHWND(this, (WXHWND) hWndNext);
+    }
 
     return TRUE;
 }
 
     return TRUE;
 }
@@ -122,7 +135,7 @@ wxWindow* wxWindow::GetWindowChild1(wxWindowID id)
     if ( m_windowId == id )
         return this;
 
     if ( m_windowId == id )
         return this;
 
-    wxWindowList::Node *node = GetChildren().GetFirst();
+    wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
     while ( node )
     {
         wxWindow* child = node->GetData();
     while ( node )
     {
         wxWindow* child = node->GetData();
@@ -171,7 +184,7 @@ wxWindow* wxWindow::CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd)
 
     wxWindow* win = NULL;
 
 
     wxWindow* win = NULL;
 
-    if (str == "BUTTON")
+    if (str == wxT("BUTTON"))
     {
         int style1 = (style & 0xFF);
         if ((style1 == BS_3STATE) || (style1 == BS_AUTO3STATE) || (style1 == BS_AUTOCHECKBOX) ||
     {
         int style1 = (style & 0xFF);
         if ((style1 == BS_3STATE) || (style1 == BS_AUTO3STATE) || (style1 == BS_AUTOCHECKBOX) ||
@@ -183,12 +196,13 @@ wxWindow* wxWindow::CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd)
         {
             win = new wxRadioButton;
         }
         {
             win = new wxRadioButton;
         }
+#if wxUSE_BMPBUTTON
 #if defined(__WIN32__) && defined(BS_BITMAP)
         else if (style & BS_BITMAP)
         {
             // TODO: how to find the bitmap?
             win = new wxBitmapButton;
 #if defined(__WIN32__) && defined(BS_BITMAP)
         else if (style & BS_BITMAP)
         {
             // TODO: how to find the bitmap?
             win = new wxBitmapButton;
-            wxLogError("Have not yet implemented bitmap button as BS_BITMAP button.");
+            wxLogError(wxT("Have not yet implemented bitmap button as BS_BITMAP button."));
         }
 #endif
         else if (style1 == BS_OWNERDRAW)
         }
 #endif
         else if (style1 == BS_OWNERDRAW)
@@ -201,6 +215,7 @@ wxWindow* wxWindow::CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd)
             // with a switch in the drawing code. Call default proc if BS_BITMAP.
             win = new wxBitmapButton;
         }
             // with a switch in the drawing code. Call default proc if BS_BITMAP.
             win = new wxBitmapButton;
         }
+#endif
         else if ((style1 == BS_PUSHBUTTON) || (style1 == BS_DEFPUSHBUTTON))
         {
             win = new wxButton;
         else if ((style1 == BS_PUSHBUTTON) || (style1 == BS_DEFPUSHBUTTON))
         {
             win = new wxButton;
@@ -211,11 +226,11 @@ wxWindow* wxWindow::CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd)
         }
         else
         {
         }
         else
         {
-            wxLogError(_T("Don't know what kind of button this is: id = %d"),
+            wxLogError(wxT("Don't know what kind of button this is: id = %ld"),
                        id);
         }
     }
                        id);
         }
     }
-    else if (str == "COMBOBOX")
+    else if (str == wxT("COMBOBOX"))
     {
         win = new wxComboBox;
     }
     {
         win = new wxComboBox;
     }
@@ -225,48 +240,56 @@ wxWindow* wxWindow::CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd)
     // for correct functioning.
     // Could have wxWindow::AdoptAttributesFromHWND(WXHWND)
     // to be overridden by each control class.
     // for correct functioning.
     // Could have wxWindow::AdoptAttributesFromHWND(WXHWND)
     // to be overridden by each control class.
-    else if (str == "EDIT")
+    else if (str == wxT("EDIT"))
     {
         win = new wxTextCtrl;
     }
     {
         win = new wxTextCtrl;
     }
-    else if (str == "LISTBOX")
+    else if (str == wxT("LISTBOX"))
     {
         win = new wxListBox;
     }
     {
         win = new wxListBox;
     }
-    else if (str == "SCROLLBAR")
+    else if (str == wxT("SCROLLBAR"))
     {
         win = new wxScrollBar;
     }
     {
         win = new wxScrollBar;
     }
-#if defined(__WIN95__) && !defined(__TWIN32__)
-    else if (str == "MSCTLS_UPDOWN32")
+#if defined(__WIN95__) && wxUSE_SPINBTN
+    else if (str == wxT("MSCTLS_UPDOWN32"))
     {
         win = new wxSpinButton;
     }
 #endif
     {
         win = new wxSpinButton;
     }
 #endif
-    else if (str == "MSCTLS_TRACKBAR32")
+#if wxUSE_SLIDER
+    else if (str == wxT("MSCTLS_TRACKBAR32"))
     {
         // Need to ascertain if it's horiz or vert
         win = new wxSlider;
     }
     {
         // Need to ascertain if it's horiz or vert
         win = new wxSlider;
     }
-    else if (str == "STATIC")
+#endif // wxUSE_SLIDER
+    else if (str == wxT("STATIC"))
     {
         int style1 = (style & 0xFF);
 
     {
         int style1 = (style & 0xFF);
 
-        if ((style1 == SS_LEFT) || (style1 == SS_RIGHT) || (style1 == SS_SIMPLE))
+        if ((style1 == SS_LEFT) || (style1 == SS_RIGHT)
+#ifndef __WXWINCE__
+            || (style1 == SS_SIMPLE)
+#endif
+            )
             win = new wxStaticText;
             win = new wxStaticText;
+#if wxUSE_STATBMP
 #if defined(__WIN32__) && defined(BS_BITMAP)
         else if (style1 == SS_BITMAP)
         {
             win = new wxStaticBitmap;
 
             // Help! this doesn't correspond with the wxWin implementation.
 #if defined(__WIN32__) && defined(BS_BITMAP)
         else if (style1 == SS_BITMAP)
         {
             win = new wxStaticBitmap;
 
             // Help! this doesn't correspond with the wxWin implementation.
-            wxLogError("Please make SS_BITMAP statics into owner-draw buttons.");
+            wxLogError(wxT("Please make SS_BITMAP statics into owner-draw buttons."));
         }
 #endif
         }
 #endif
+#endif /* wxUSE_STATBMP */
     }
     else
     {
     }
     else
     {
-        wxString msg("Don't know how to convert from Windows class ");
+        wxString msg(wxT("Don't know how to convert from Windows class "));
         msg += str;
         wxLogError(msg);
     }
         msg += str;
         wxLogError(msg);
     }
@@ -280,11 +303,9 @@ wxWindow* wxWindow::CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd)
         win->SubclassWin(hWnd);
         win->AdoptAttributesFromHWND();
         win->SetupColours();
         win->SubclassWin(hWnd);
         win->AdoptAttributesFromHWND();
         win->SetupColours();
-
-        return win;
     }
     }
-    else
-        return NULL;
+
+    return win;
 }
 
 // Make sure the window style (etc.) reflects the HWND style (roughly)
 }
 
 // Make sure the window style (etc.) reflects the HWND style (roughly)