]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/checkbox.cpp
Don't send a focus event if the window is a wxTextCtrl, since it sends
[wxWidgets.git] / src / msw / checkbox.cpp
index 97b471a1e3ec006f012fae9a056ebc75efb1e14b..86211b4fcd15873ab3b1e5f39ddd4a6248a6fa5a 100644 (file)
     #pragma hdrstop
 #endif
 
+#if wxUSE_CHECKBOX
+
 #ifndef WX_PRECOMP
     #include "wx/checkbox.h"
     #include "wx/brush.h"
+    #include "wx/dcscreen.h"
+    #include "wx/settings.h"
 #endif
 
 #include "wx/msw/private.h"
@@ -102,6 +106,9 @@ bool wxCheckBox::Create(wxWindow *parent,
     if ( style & wxALIGN_RIGHT )
         msStyle |= BS_LEFTTEXT;
 
+    if ( style & wxCLIP_SIBLINGS )
+        msStyle |= WS_CLIPSIBLINGS;
+
     // We perhaps have different concepts of 3D here - a 3D border,
     // versus a 3D button.
     // So we only wish to give a border if this is specified
@@ -142,27 +149,36 @@ bool wxCheckBox::Create(wxWindow *parent,
 
 void wxCheckBox::SetLabel(const wxString& label)
 {
-  SetWindowText(GetHwnd(), label);
+    SetWindowText(GetHwnd(), label);
 }
 
 wxSize wxCheckBox::DoGetBestSize() const
 {
-    int wCheckbox, hCheckbox;
+    static int s_checkSize = 0;
+
+    if ( !s_checkSize )
+    {
+        wxScreenDC dc;
+        dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+
+        s_checkSize = (3*dc.GetCharHeight())/2;
+    }
 
     wxString str = wxGetWindowText(GetHWND());
 
+    int wCheckbox, hCheckbox;
     if ( !str.IsEmpty() )
     {
         GetTextExtent(str, &wCheckbox, &hCheckbox);
-        wCheckbox += RADIO_SIZE;
+        wCheckbox += s_checkSize + GetCharWidth();
 
-        if ( hCheckbox < RADIO_SIZE )
-            hCheckbox = RADIO_SIZE;
+        if ( hCheckbox < s_checkSize )
+            hCheckbox = s_checkSize;
     }
     else
     {
-        wCheckbox = RADIO_SIZE;
-        hCheckbox = RADIO_SIZE;
+        wCheckbox = s_checkSize;
+        hCheckbox = s_checkSize;
     }
 
     return wxSize(wCheckbox, hCheckbox);
@@ -182,7 +198,7 @@ bool wxCheckBox::GetValue() const
 #ifdef __WIN32__
   return (SendMessage(GetHwnd(), BM_GETCHECK, 0, 0) == BST_CHECKED);
 #else
-  return ((0x003 & SendMessage(GetHwnd(), BM_GETCHECK, 0, 0)) == 0x003);
+  return ((0x001 & SendMessage(GetHwnd(), BM_GETCHECK, 0, 0)) == 0x001);
 #endif
 }
 
@@ -196,7 +212,7 @@ void wxCheckBox::Command (wxCommandEvent & event)
 // wxBitmapCheckBox
 // ----------------------------------------------------------------------------
 
-bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *label,
+bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *WXUNUSED(label),
            const wxPoint& pos,
            const wxSize& size, long style,
            const wxValidator& validator,
@@ -251,7 +267,9 @@ bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *l
   return TRUE;
 }
 
-void wxBitmapCheckBox::SetLabel(const wxBitmap& bitmap)
+void wxBitmapCheckBox::SetLabel(const wxBitmap& WXUNUSED(bitmap))
 {
     wxFAIL_MSG(wxT("not implemented"));
 }
+
+#endif // wxUSE_CHECKBOX