X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/64133c38ea981c7414b3faff8d3f3d71663607da..f773e9b0bbfd051a4ae316461fd241230c87e39f:/src/msw/radiobox.cpp diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index 53b5d44715..d583c4f337 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -47,6 +47,10 @@ #include "wx/tooltip.h" #endif // wxUSE_TOOLTIPS +#if defined(__WXWINCE__) && !defined(WS_EX_TRANSPARENT) +#define WS_EX_TRANSPARENT 0 +#endif + // TODO: wxCONSTRUCTOR #if 0 // wxUSE_EXTENDED_RTTI WX_DEFINE_FLAGS( wxRadioBoxStyle ) @@ -60,7 +64,7 @@ wxBEGIN_FLAGS( wxRadioBoxStyle ) wxFLAGS_MEMBER(wxBORDER_RAISED) wxFLAGS_MEMBER(wxBORDER_STATIC) wxFLAGS_MEMBER(wxBORDER_NONE) - + // old style border flags wxFLAGS_MEMBER(wxSIMPLE_BORDER) wxFLAGS_MEMBER(wxSUNKEN_BORDER) @@ -98,11 +102,11 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) #endif /* - selection - content - label - dimension - item + selection + content + label + dimension + item */ // there are two possible ways to create the radio buttons: either as children @@ -202,9 +206,9 @@ bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id) if ( cmd == BN_CLICKED ) { if (id == GetId()) - return TRUE; + return true; - int selectedButton = -1; + int selectedButton = wxID_ANY; for ( int i = 0; i < m_noItems; i++ ) { @@ -216,13 +220,13 @@ bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id) } } - if ( selectedButton == -1 ) + if ( selectedButton == wxID_ANY ) { // just ignore it - due to a hack with WM_NCHITTEST handling in our // wnd proc, we can receive dummy click messages when we click near // the radiobox edge (this is ugly but Julian wouldn't let me get // rid of this...) - return FALSE; + return false; } if ( selectedButton != m_selectedButton ) @@ -233,16 +237,16 @@ bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id) } //else: don't generate events when the selection doesn't change - return TRUE; + return true; } else - return FALSE; + return false; } // Radio box item wxRadioBox::wxRadioBox() { - m_selectedButton = -1; + m_selectedButton = wxID_ANY; m_noItems = 0; m_noRowsOrCols = 0; m_radioButtons = NULL; @@ -264,7 +268,7 @@ bool wxRadioBox::Create(wxWindow *parent, const wxString& name) { // initialize members - m_selectedButton = -1; + m_selectedButton = wxID_ANY; m_noItems = 0; m_majorDim = majorDim == 0 ? n : majorDim; @@ -272,12 +276,12 @@ bool wxRadioBox::Create(wxWindow *parent, // common initialization if ( !CreateControl(parent, id, pos, size, style, val, name) ) - return FALSE; + return false; // create the static box if ( !MSWCreateControl(wxT("BUTTON"), BS_GROUPBOX | WS_GROUP, - pos, size, title, 0) ) - return FALSE; + pos, size, title, WS_EX_TRANSPARENT) ) + return false; // and now create the buttons m_noItems = n; @@ -303,7 +307,7 @@ bool wxRadioBox::Create(wxWindow *parent, for ( int i = 0; i < n; i++ ) { m_radioWidth[i] = - m_radioHeight[i] = -1; + m_radioHeight[i] = wxDefaultCoord; long styleBtn = BS_AUTORADIOBUTTON | WS_TABSTOP | WS_CHILD | WS_VISIBLE; if ( i == 0 && style == 0 ) styleBtn |= WS_GROUP; @@ -323,7 +327,7 @@ bool wxRadioBox::Create(wxWindow *parent, { wxLogLastError(wxT("CreateWindow(radio btn)")); - return FALSE; + return false; } m_radioButtons[i] = (WXHWND)hwndBtn; @@ -347,9 +351,7 @@ bool wxRadioBox::Create(wxWindow *parent, #ifdef __WXWINCE__ // Set the z-order correctly - RECT rect; - GetWindowRect(GetHwnd(), & rect); - SetWindowPos(GetHwnd(), HWND_BOTTOM, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, 0); + SetWindowPos(GetHwnd(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); #endif SetSelection(0); @@ -357,8 +359,8 @@ bool wxRadioBox::Create(wxWindow *parent, // Now that we have items determine what is the best size and set it. SetBestSize(size); - - return TRUE; + + return true; } bool wxRadioBox::Create(wxWindow *parent, @@ -379,7 +381,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxRadioBox::~wxRadioBox() { - m_isBeingDeleted = TRUE; + m_isBeingDeleted = true; if (m_radioButtons) { @@ -400,7 +402,7 @@ void wxRadioBox::SetString(int item, const wxString& label) { wxCHECK_RET( item >= 0 && item < m_noItems, wxT("invalid radiobox index") ); - m_radioWidth[item] = m_radioHeight[item] = -1; + m_radioWidth[item] = m_radioHeight[item] = wxDefaultCoord; SetWindowText((HWND)m_radioButtons[item], label.c_str()); } @@ -484,7 +486,7 @@ wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const extraHeight /= 2; #endif */ - + int height = GetNumVer() * sizeBtn.y + cy1/2 + extraHeight; int width = GetNumHor() * (sizeBtn.x + cx1) + cx1; @@ -518,9 +520,9 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) int xx = x; int yy = y; - if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (x == wxDefaultCoord && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) xx = currentX; - if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (y == wxDefaultCoord && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) yy = currentY; #if RADIOBTN_PARENT_IS_RADIOBOX @@ -545,7 +547,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) totHeight = totSize.y; // only change our width/height if asked for - if ( width == -1 ) + if ( width == wxDefaultCoord ) { if ( sizeFlags & wxSIZE_AUTO_WIDTH ) width = totWidth; @@ -553,7 +555,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) width = widthOld; } - if ( height == -1 ) + if ( height == wxDefaultCoord ) { if ( sizeFlags & wxSIZE_AUTO_HEIGHT ) height = totHeight; @@ -661,8 +663,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) void wxRadioBox::GetSize(int *width, int *height) const { - RECT rect; - rect.left = -1; rect.right = -1; rect.top = -1; rect.bottom = -1; + RECT rect = { -1, -1, -1, -1 }; if (m_hWnd) wxFindMaxSize(m_hWnd, &rect); @@ -714,7 +715,7 @@ void wxRadioBox::SetFocus() { if (m_noItems > 0) { - ::SetFocus((HWND)m_radioButtons[m_selectedButton == -1 + ::SetFocus((HWND)m_radioButtons[m_selectedButton == wxID_ANY ? 0 : m_selectedButton]); } @@ -724,7 +725,7 @@ void wxRadioBox::SetFocus() bool wxRadioBox::Show(bool show) { if ( !wxControl::Show(show) ) - return FALSE; + return false; int nCmdShow = show ? SW_SHOW : SW_HIDE; for ( int i = 0; i < m_noItems; i++ ) @@ -732,7 +733,7 @@ bool wxRadioBox::Show(bool show) ::ShowWindow((HWND)m_radioButtons[i], nCmdShow); } - return TRUE; + return true; } // Enable a specific button @@ -748,12 +749,12 @@ void wxRadioBox::Enable(int item, bool enable) bool wxRadioBox::Enable(bool enable) { if ( !wxControl::Enable(enable) ) - return FALSE; + return false; for (int i = 0; i < m_noItems; i++) ::EnableWindow((HWND) m_radioButtons[i], enable); - return TRUE; + return true; } // Show a specific button @@ -771,10 +772,10 @@ bool wxRadioBox::ContainsHWND(WXHWND hWnd) const for ( size_t i = 0; i < count; i++ ) { if ( GetRadioButtons()[i] == hWnd ) - return TRUE; + return true; } - return FALSE; + return false; } void wxRadioBox::Command(wxCommandEvent & event) @@ -811,7 +812,7 @@ bool wxRadioBox::SetFont(const wxFont& font) if ( !wxControl::SetFont(font) ) { // nothing to do - return FALSE; + return false; } // also set the font of our radio buttons @@ -825,7 +826,7 @@ bool wxRadioBox::SetFont(const wxFont& font) ::InvalidateRect(hwndBtn, NULL, FALSE /* don't erase bg */); } - return TRUE; + return true; } // ---------------------------------------------------------------------------- @@ -834,81 +835,27 @@ bool wxRadioBox::SetFont(const wxFont& font) WXLRESULT wxRadioBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { +#if RADIOBTN_PARENT_IS_RADIOBOX switch ( nMsg ) { -#ifdef __WIN32__ + // handle this message to set correct colours for our buttons here case WM_CTLCOLORSTATIC: - // set the colour of the radio buttons to be the same as ours { - HDC hdc = (HDC)wParam; - - const wxColour& colBack = GetBackgroundColour(); - ::SetBkColor(hdc, wxColourToRGB(colBack)); - ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); - - wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); - - return (WXLRESULT)brush->GetResourceHandle(); - } -#endif // Win32 - - // VZ: this code breaks radiobox redrawing under Windows XP, don't use - // it. If you need to get messages from the static controls, - // create them as a child of another (non static) window -#if 0 - // 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; + WXHDC hdc; + WXHWND hwnd; + UnpackCtlColor(wParam, lParam, &hdc, &hwnd); + + WXHBRUSH hbr = MSWControlColor((WXHDC)hdc); + if ( hbr ) + return (WXLRESULT)hbr; + //else: fall through to default window proc } - break; -#endif // 0 } +#endif // RADIOBTN_PARENT_IS_RADIOBOX return wxControl::MSWWindowProc(nMsg, wParam, lParam); } -WXHBRUSH wxRadioBox::OnCtlColor(WXHDC pDC, WXHWND WXUNUSED(pWnd), WXUINT WXUNUSED(nCtlColor), -#if wxUSE_CTL3D - WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam -#else - WXUINT WXUNUSED(message), - WXWPARAM WXUNUSED(wParam), - WXLPARAM WXUNUSED(lParam) -#endif - ) -{ -#if wxUSE_CTL3D - if ( m_useCtl3D ) - { - HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); - return (WXHBRUSH) hbrush; - } -#endif // wxUSE_CTL3D - - HDC hdc = (HDC)pDC; - wxColour colBack = GetBackgroundColour(); - - ::SetBkColor(hdc, wxColourToRGB(colBack)); - ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); - - wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); - - return (WXHBRUSH)brush->GetResourceHandle(); -} - - // --------------------------------------------------------------------------- // window proc for radio buttons // --------------------------------------------------------------------------- @@ -965,7 +912,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, wxCHECK_MSG( radiobox, 0, wxT("radio button without radio box?") ); - bool processed = TRUE; + bool processed = true; wxDirection dir; switch ( wParam ) @@ -987,7 +934,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, break; default: - processed = FALSE; + processed = false; // just to suppress the compiler warning dir = wxALL; @@ -1052,7 +999,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, #endif { wxWindow* subjectOfHelp = radiobox; - bool eventProcessed = FALSE; + bool eventProcessed = false; while (subjectOfHelp && !eventProcessed) { wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(),