]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/radiobox.cpp
Remove unnecessary IsRadioButton().
[wxWidgets.git] / src / msw / radiobox.cpp
index 7865639116a32724b638e1ae35608f030c2d6e87..4fc2d2acbd9e373c572a30683c6eb208bffa20f3 100644 (file)
@@ -129,7 +129,7 @@ void wxRadioBox::Init()
 {
     m_selectedButton = wxNOT_FOUND;
     m_radioButtons = NULL;
-    m_radioButtonIds = NULL;
+    m_dummyHwnd = NULL;
     m_radioWidth = NULL;
     m_radioHeight = NULL;
 }
@@ -156,8 +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_radioButtonIds = new wxWindowIDRef[n + 1];
+
     m_radioWidth = new int[n];
     m_radioHeight = new int[n];
 
@@ -169,14 +176,14 @@ bool wxRadioBox::Create(wxWindow *parent,
         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);
 
@@ -187,21 +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(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());
 
@@ -241,7 +251,8 @@ wxRadioBox::~wxRadioBox()
     m_isBeingDeleted = true;
 
     delete m_radioButtons;
-    delete[] m_radioButtonIds;
+    if ( m_dummyHwnd )
+        DestroyWindow((HWND)m_dummyHwnd);
     delete[] m_radioWidth;
     delete[] m_radioHeight;
 }