]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bmpcbox.cpp
Ensure there is valid context for DrawRectangle
[wxWidgets.git] / src / msw / bmpcbox.cpp
index 19a5d3a050b53395d4a9fc2f209643247e092708..ea7c92576212856b755726712ed204b603eafcab 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/msw/bmpcboxg.cpp
+// Name:        src/msw/bmpcbox.cpp
 // Purpose:     wxBitmapComboBox
 // Author:      Jaakko Salli
 // Created:     2008-04-06
@@ -31,6 +31,7 @@
 #endif
 
 #include "wx/settings.h"
+#include "wx/vector.h"
 
 #include "wx/msw/dcclient.h"
 #include "wx/msw/private.h"
@@ -134,19 +135,25 @@ 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();
     DissociateHandle();
     ::DestroyWindow(hwnd);
 
-    if ( !MSWCreateControl(wxT("COMBOBOX"), value, pos, size) )
+    if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) )
         return;
 
     // 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
@@ -179,6 +186,10 @@ void wxBitmapComboBox::RecreateControl()
     }
 
     ::SendMessage(GetHwnd(), CB_SETITEMHEIGHT, 0, MeasureItem(0));
+
+    // Revert the old string value
+    if ( !HasFlag(wxCB_READONLY) )
+        ChangeValue(value);
 }
 
 wxBitmapComboBox::~wxBitmapComboBox()
@@ -253,6 +264,16 @@ int wxBitmapComboBox::Insert(const wxString& item,
     return n;
 }
 
+int wxBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap,
+                             unsigned int pos, void *clientData)
+{
+    OnAddBitmap(bitmap);
+    const int n = wxComboBox::Insert(item, pos, clientData);
+    if ( n != wxNOT_FOUND )
+        DoSetItemBitmap(n, bitmap);
+    return n;
+}
+
 int wxBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap,
                              unsigned int pos, wxClientData *clientData)
 {