]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/control.cpp
Fixed wxZlibOutputStream::Sync
[wxWidgets.git] / src / msw / control.cpp
index 6788e0ceb7385381535f08bc84d97ae8ea5fab22..3ae9f711d211cce38bbf0caf2f87435b3ee5f51f 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "wx/msw/private.h"
 
-#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__)
+#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS)
 #include <commctrl.h>
 #endif
 
@@ -56,15 +56,44 @@ wxControl::wxControl()
 wxControl::~wxControl()
 {
     m_isBeingDeleted = TRUE;
+}
 
-    // If we delete an item, we should initialize the parent panel,
-    // because it could now be invalid.
-    wxWindow *parent = (wxWindow *)GetParent();
-    if (parent)
+bool wxControl::MSWCreateControl(const wxChar *classname, WXDWORD style)
+{
+    m_hWnd = (WXHWND)::CreateWindowEx
+                       (
+                        GetExStyle(style),  // extended style
+                        classname,          // the kind of control to create
+                        NULL,               // the window name
+                        style,              // the window style
+                        0, 0, 0, 0,         // the window position and size
+                        GetHwndOf(GetParent()),  // parent
+                        (HMENU)GetId(),     // child id
+                        wxGetInstance(),    // app instance
+                        NULL                // creation parameters
+                       );
+
+    if ( !m_hWnd )
     {
-        if (parent->GetDefaultItem() == (wxButton*) this)
-            parent->SetDefaultItem(NULL);
+#ifdef __WXDEBUG__
+        wxLogError(_T("Failed to create a control of class '%s'"), classname);
+#endif // DEBUG
+
+        return FALSE;
     }
+
+    // subclass again for purposes of dialog editing mode
+    SubclassWin(m_hWnd);
+
+    // controls use the same font and colours as their parent dialog by default
+    InheritAttributes();
+
+    return TRUE;
+}
+
+wxSize wxControl::DoGetBestSize()
+{
+    return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT);
 }
 
 bool wxControl::ProcessCommand(wxCommandEvent& event)
@@ -151,6 +180,19 @@ void wxControl::OnEraseBackground(wxEraseEvent& event)
     ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode);
 }
 
+WXDWORD wxControl::GetExStyle(WXDWORD& style) const
+{
+    bool want3D;
+    WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ;
+
+    // Even with extended styles, need to combine with WS_BORDER
+    // for them to look right.
+    if ( want3D || wxStyleHasBorder(m_windowStyle) )
+        style |= WS_BORDER;
+
+    return exStyle;
+}
+
 // ---------------------------------------------------------------------------
 // global functions
 // ---------------------------------------------------------------------------