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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user