{
m_selectedButton = wxNOT_FOUND;
m_radioButtons = NULL;
- m_radioButtonIds = NULL;
+ m_dummyHwnd = NULL;
m_radioWidth = NULL;
m_radioHeight = NULL;
}
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_radioButtonIds = new wxWindowIDRef[n + 1];
+
m_radioWidth = new int[n];
m_radioHeight = new int[n];
if ( i == 0 )
styleBtn |= WS_GROUP;
- m_radioButtonIds[i] = 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)(wxWindowID)m_radioButtonIds[i],
+ (HMENU)subid.GetValue(),
wxGetInstance(),
NULL);
return false;
}
- (*m_radioButtons)[i] = hwndBtn;
+ // Keep track of the subwindow
+ m_radioButtons->Set(i, hwndBtn, subid);
SubclassRadioButton((WXHWND)hwndBtn);
- m_subControls.Add(m_radioButtonIds[i]);
+ // Also, make it a subcontrol of this control
+ m_subControls.Add(subid);
}
// Create a dummy radio control to end the group.
- m_radioButtonIds[n] = NewControlId();
+ m_dummyId = NewControlId();
- (void)::CreateWindow(_T("BUTTON"),
+ m_dummyHwnd = (WXHWND)::CreateWindow(_T("BUTTON"),
wxEmptyString,
WS_GROUP | BS_AUTORADIOBUTTON | WS_CHILD,
0, 0, 0, 0, GetHwndOf(parent),
- (HMENU)(wxWindowID)m_radioButtonIds[n], wxGetInstance(), NULL);
+ (HMENU)m_dummyId.GetValue(), wxGetInstance(), NULL);
+
m_radioButtons->SetFont(GetFont());
m_isBeingDeleted = true;
delete m_radioButtons;
- delete[] m_radioButtonIds;
+ if ( m_dummyHwnd )
+ DestroyWindow((HWND)m_dummyHwnd);
delete[] m_radioWidth;
delete[] m_radioHeight;
}