diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp index ea7c925762..bdd42ed970 100644 --- a/src/msw/bmpcbox.cpp +++ b/src/msw/bmpcbox.cpp @@ -133,13 +133,30 @@ void wxBitmapComboBox::RecreateControl() wxPoint pos = GetPosition(); wxSize size = GetSize(); size.y = GetBestSize().y; - wxArrayString strings = GetStrings(); + const wxArrayString strings = GetStrings(); + const unsigned numItems = strings.size(); - // Save the client data pointers before clearing the control. - wxVector clientData; - clientData.reserve(strings.size()); - for ( size_t n = 0; n < strings.size(); ++n ) - clientData.push_back(GetClientObject(n)); + // Save the client data pointers before clearing the control, if any. + const wxClientDataType clientDataType = GetClientDataType(); + wxVector objectClientData; + wxVector voidClientData; + switch ( clientDataType ) + { + case wxClientData_None: + break; + + case wxClientData_Object: + objectClientData.reserve(numItems); + for ( unsigned n = 0; n < numItems; ++n ) + objectClientData.push_back(GetClientObject(n)); + break; + + case wxClientData_Void: + voidClientData.reserve(numItems); + for ( unsigned n = 0; n < numItems; ++n ) + voidClientData.push_back(GetClientData(n)); + break; + } wxComboBox::DoClear(); @@ -151,9 +168,14 @@ void wxBitmapComboBox::RecreateControl() return; // initialize the controls contents - for ( unsigned int i = 0; i < strings.size(); i++ ) + for ( unsigned int i = 0; i < numItems; i++ ) { - wxComboBox::Append(strings[i], clientData[i]); + wxComboBox::Append(strings[i]); + + if ( !objectClientData.empty() ) + SetClientObject(i, objectClientData[i]); + else if ( !voidClientData.empty() ) + SetClientData(i, objectClientData[i]); } // and make sure it has the same attributes as before