]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/button.cpp
Correction to accelerator bug fix: add FVIRTKEY if ctrl, alt or shift
[wxWidgets.git] / src / msw / button.cpp
index 64e3c798a22a4701407bc1bd7cac9df30c9b98ee..e5423b1ffb438e30d2029be2169b252c708303a6 100644 (file)
@@ -74,13 +74,28 @@ bool wxButton::Create(wxWindow *parent,
     m_backgroundColour = parent->GetBackgroundColour();
     m_foregroundColour = parent->GetForegroundColour();
 
     m_backgroundColour = parent->GetBackgroundColour();
     m_foregroundColour = parent->GetForegroundColour();
 
+    long msStyle = WS_VISIBLE | WS_TABSTOP | WS_CHILD /* | WS_CLIPSIBLINGS */ ;
+
+    if ( m_windowStyle & wxCLIP_SIBLINGS )
+        msStyle |= WS_CLIPSIBLINGS;
+
+#ifdef __WIN32__
+    if(m_windowStyle & wxBU_LEFT)
+        msStyle |= BS_LEFT;
+    if(m_windowStyle & wxBU_RIGHT)
+        msStyle |= BS_RIGHT;
+    if(m_windowStyle & wxBU_TOP)
+        msStyle |= BS_TOP;
+    if(m_windowStyle & wxBU_BOTTOM)
+        msStyle |= BS_BOTTOM;
+#endif
 
     m_hWnd = (WXHWND)CreateWindowEx
                      (
                       MakeExtendedStyle(m_windowStyle),
                       wxT("BUTTON"),
                       label,
 
     m_hWnd = (WXHWND)CreateWindowEx
                      (
                       MakeExtendedStyle(m_windowStyle),
                       wxT("BUTTON"),
                       label,
-                      WS_VISIBLE | WS_TABSTOP | WS_CHILD,
+                      msStyle,
                       0, 0, 0, 0,
                       GetWinHwnd(parent),
                       (HMENU)m_windowId,
                       0, 0, 0, 0,
                       GetWinHwnd(parent),
                       (HMENU)m_windowId,
@@ -88,6 +103,17 @@ bool wxButton::Create(wxWindow *parent,
                       NULL
                      );
 
                       NULL
                      );
 
+    if (m_hWnd == 0)
+    {
+        wxString msg;
+#ifdef __WIN16__
+        msg.Printf(wxT("CreateWindowEx failed"));
+#else
+        msg.Printf(wxT("CreateWindowEx failed with error number %ld"), (long) GetLastError());
+#endif
+        wxFAIL_MSG(msg);
+    }
+
     // Subclass again for purposes of dialog editing mode
     SubclassWin(m_hWnd);
 
     // Subclass again for purposes of dialog editing mode
     SubclassWin(m_hWnd);
 
@@ -232,7 +258,7 @@ void wxButton::Command(wxCommandEvent & event)
 // event/message handlers
 // ----------------------------------------------------------------------------
 
 // event/message handlers
 // ----------------------------------------------------------------------------
 
-bool wxButton::MSWCommand(WXUINT param, WXWORD id)
+bool wxButton::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 {
     bool processed = FALSE;
     switch ( param )
 {
     bool processed = FALSE;
     switch ( param )
@@ -259,8 +285,11 @@ long wxButton::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
     }
     else if ( nMsg == WM_LBUTTONDBLCLK )
     {
     }
     else if ( nMsg == WM_LBUTTONDBLCLK )
     {
-        // trick the base class into thinking that this was just a click
-        nMsg = WM_LBUTTONDOWN;
+        // emulate a click event to force an owner-drawn button to change its
+        // appearance - without this, it won't do it
+        (void)wxControl::MSWWindowProc(WM_LBUTTONDOWN, wParam, lParam);
+
+        // and conitnue with processing the message normally as well
     }
 
     // let the base class do all real processing
     }
 
     // let the base class do all real processing