X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf511d579fb186e8f5ec7a0dc933a5c0df10902d..d968078adbfb147e913b9a33fc54242a36f117ce:/src/msw/radiobox.cpp diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index f73e2ba3c2..4fc2d2acbd 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -129,6 +129,7 @@ void wxRadioBox::Init() { m_selectedButton = wxNOT_FOUND; m_radioButtons = NULL; + m_dummyHwnd = NULL; m_radioWidth = NULL; m_radioHeight = NULL; } @@ -155,7 +156,15 @@ bool wxRadioBox::Create(wxWindow *parent, wxUnusedVar(val); #endif // wxUSE_VALIDATORS/!wxUSE_VALIDATORS + // We need an extra one to keep track of the 'dummy' item we + // create to end the radio group, so it will be destroyed and + // it's id will be released. But we want it separate from the + // other buttons since the wxSubwindows will operate on it as + // well and we just want to ignore it until destroying it. + // For instance, we don't want the bounding box of the radio + // buttons to include the dummy button m_radioButtons = new wxSubwindows(n); + m_radioWidth = new int[n]; m_radioHeight = new int[n]; @@ -167,14 +176,14 @@ bool wxRadioBox::Create(wxWindow *parent, if ( i == 0 ) styleBtn |= WS_GROUP; - long newId = NewControlId(); + wxWindowIDRef subid = NewControlId(); HWND hwndBtn = ::CreateWindow(_T("BUTTON"), choices[i].wx_str(), styleBtn, 0, 0, 0, 0, // will be set in SetSize() GetHwndOf(parent), - (HMENU)newId, + (HMENU)subid.GetValue(), wxGetInstance(), NULL); @@ -185,19 +194,24 @@ bool wxRadioBox::Create(wxWindow *parent, return false; } - (*m_radioButtons)[i] = hwndBtn; + // Keep track of the subwindow + m_radioButtons->Set(i, hwndBtn, subid); SubclassRadioButton((WXHWND)hwndBtn); - m_subControls.Add(newId); + // Also, make it a subcontrol of this control + m_subControls.Add(subid); } // Create a dummy radio control to end the group. - (void)::CreateWindow(_T("BUTTON"), + m_dummyId = NewControlId(); + + m_dummyHwnd = (WXHWND)::CreateWindow(_T("BUTTON"), wxEmptyString, WS_GROUP | BS_AUTORADIOBUTTON | WS_CHILD, 0, 0, 0, 0, GetHwndOf(parent), - (HMENU)NewControlId(), wxGetInstance(), NULL); + (HMENU)m_dummyId.GetValue(), wxGetInstance(), NULL); + m_radioButtons->SetFont(GetFont()); @@ -237,6 +251,8 @@ wxRadioBox::~wxRadioBox() m_isBeingDeleted = true; delete m_radioButtons; + if ( m_dummyHwnd ) + DestroyWindow((HWND)m_dummyHwnd); delete[] m_radioWidth; delete[] m_radioHeight; } @@ -258,8 +274,10 @@ void wxRadioBox::SubclassRadioButton(WXHWND hWndBtn) // events generation // ---------------------------------------------------------------------------- -bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id) +bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id_) { + const int id = (signed short)id_; + if ( cmd == BN_CLICKED ) { if (id == GetId())