X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce96b7a010101e59a1a1c5b63fae52fb8231f367..37b8e6798782278fdfe4f3c1291aaff55cdbb8c9:/src/msw/radiobox.cpp?ds=inline diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index 0bdbdb136a..a7e5101893 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -46,7 +46,7 @@ #include "wx/tooltip.h" #endif // wxUSE_TOOLTIPS - IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) +IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) // VZ: the new behaviour is to create the radio buttons as children of the // radiobox instead of creating them as children of the radiobox' parent. @@ -56,14 +56,7 @@ // reason to revert to the backward compatible behaviour - but I still // leave this possibility just in case. -// For some reason, the background colour is set wrongly in WIN16 mode -// if we use the new method. - -#ifdef __WIN16__ #define RADIOBTN_PARENT_IS_RADIOBOX 0 -#else -#define RADIOBTN_PARENT_IS_RADIOBOX 1 -#endif // --------------------------------------------------------------------------- // private functions @@ -163,7 +156,7 @@ wxRadioBox::wxRadioBox(wxWindow *parent, wxFunction func, const char *title, delete choices2; } -#endif +#endif // WXWIN_COMPATIBILITY // Radio box item wxRadioBox::wxRadioBox() @@ -201,7 +194,8 @@ bool wxRadioBox::Create(wxWindow *parent, return FALSE; // create the static box - if ( !MSWCreateControl(wxT("BUTTON"), BS_GROUPBOX, pos, size, title, 0) ) + if ( !MSWCreateControl(wxT("BUTTON"), BS_GROUPBOX | WS_GROUP, + pos, size, title, 0) ) return FALSE; // and now create the buttons @@ -229,7 +223,7 @@ bool wxRadioBox::Create(wxWindow *parent, { m_radioWidth[i] = m_radioHeight[i] = -1; - long styleBtn = BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE; + long styleBtn = BS_AUTORADIOBUTTON | WS_TABSTOP | WS_CHILD | WS_VISIBLE; if ( i == 0 && style == 0 ) styleBtn |= WS_GROUP; @@ -717,22 +711,43 @@ bool wxRadioBox::SetFont(const wxFont& font) long wxRadioBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - // This is required for the radiobox to be sensitive to mouse input, - // e.g. for Dialog Editor. - if (nMsg == WM_NCHITTEST) + switch ( nMsg ) { - int xPos = LOWORD(lParam); // horizontal position of cursor - int yPos = HIWORD(lParam); // vertical position of cursor +#ifndef __WIN16__ + case WM_CTLCOLORSTATIC: + // set the colour of the radio buttons to be the same as ours + { + HDC hdc = (HDC)wParam; - ScreenToClient(&xPos, &yPos); + const wxColour& colBack = GetBackgroundColour(); + ::SetBkColor(hdc, wxColourToRGB(colBack)); + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); - // Make sure you can drag by the top of the groupbox, but let - // other (enclosed) controls get mouse events also - if (yPos < 10) - return (long)HTCLIENT; - } + wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); - return wxControl::MSWWindowProc(nMsg, wParam, lParam); + return (WXHBRUSH)brush->GetResourceHandle(); + } +#endif + + // This is required for the radiobox to be sensitive to mouse input, + // e.g. for Dialog Editor. + case WM_NCHITTEST: + { + int xPos = LOWORD(lParam); // horizontal position of cursor + int yPos = HIWORD(lParam); // vertical position of cursor + + ScreenToClient(&xPos, &yPos); + + // Make sure you can drag by the top of the groupbox, but let + // other (enclosed) controls get mouse events also + if (yPos < 10) + return (long)HTCLIENT; + } + // fall through + + default: + return wxControl::MSWWindowProc(nMsg, wParam, lParam); + } } // ---------------------------------------------------------------------------