Preserve client data pointers when setting bitmaps in wxBitmapComboBox.

Changing the bitmap could recreate the control if the height of the bitmap
changed but recreating wxBitmapComboBox lost all the client data pointers.

Do preserve them now when recreating.

Closes #14892.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73567 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-02-24 13:48:49 +00:00
parent 4cf8e24bc1
commit 4f082fb3a0

View File

@@ -31,6 +31,7 @@
#endif
#include "wx/settings.h"
#include "wx/vector.h"
#include "wx/msw/dcclient.h"
#include "wx/msw/private.h"
@@ -134,6 +135,12 @@ void wxBitmapComboBox::RecreateControl()
size.y = GetBestSize().y;
wxArrayString strings = GetStrings();
// Save the client data pointers before clearing the control.
wxVector<wxClientData*> clientData;
clientData.reserve(strings.size());
for ( size_t n = 0; n < strings.size(); ++n )
clientData.push_back(GetClientObject(n));
wxComboBox::DoClear();
HWND hwnd = GetHwnd();
@@ -146,7 +153,7 @@ void wxBitmapComboBox::RecreateControl()
// initialize the controls contents
for ( unsigned int i = 0; i < strings.size(); i++ )
{
wxComboBox::Append(strings[i]);
wxComboBox::Append(strings[i], clientData[i]);
}
// and make sure it has the same attributes as before