X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6c8a980fc412792e64256724e02e9d387ee38e21..37b8e6798782278fdfe4f3c1291aaff55cdbb8c9:/src/msw/choice.cpp diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index ee3e511515..a6144b1da2 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -32,13 +32,12 @@ #include "wx/choice.h" #include "wx/utils.h" #include "wx/log.h" + #include "wx/settings.h" #endif #include "wx/msw/private.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl) -#endif // ============================================================================ // implementation @@ -75,6 +74,10 @@ bool wxChoice::Create(wxWindow *parent, if ( !MSWCreateControl(wxT("COMBOBOX"), msStyle) ) return FALSE; + // A choice/combobox normally has a white background (or other, depending + // on global settings) rather than inheriting the parent's background colour. + SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW)); + for ( int i = 0; i < n; i++ ) { Append(choices[i]); @@ -85,6 +88,11 @@ bool wxChoice::Create(wxWindow *parent, return TRUE; } +wxChoice::~wxChoice() +{ + Free(); +} + // ---------------------------------------------------------------------------- // adding/deleting items to/from the list // ---------------------------------------------------------------------------- @@ -113,6 +121,13 @@ void wxChoice::Delete(int n) } void wxChoice::Clear() +{ + Free(); + + SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0); +} + +void wxChoice::Free() { if ( HasClientObjectData() ) { @@ -122,8 +137,6 @@ void wxChoice::Clear() delete GetClientObject(n); } } - - SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0); } // ---------------------------------------------------------------------------- @@ -216,7 +229,7 @@ void* wxChoice::DoGetItemClientData( int n ) const wxLogLastError(wxT("CB_GETITEMDATA")); // unfortunately, there is no way to return an error code to the user - rc = (LPARAM) NULL; + rc = (LPARAM) NULL; } return (void *)rc; @@ -248,7 +261,7 @@ void wxChoice::DoSetSize(int x, int y, wxControl::DoSetSize(x, y, width, -1, sizeFlags); } -wxSize wxChoice::DoGetBestSize() +wxSize wxChoice::DoGetBestSize() const { // find the widest string int wLine; @@ -307,11 +320,19 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) return FALSE; } - wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId); - event.SetInt(GetSelection()); - event.SetEventObject(this); - event.SetString(GetStringSelection()); - ProcessCommand(event); + int n = GetSelection(); + if (n > -1) + { + wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId); + event.SetInt(n); + event.SetEventObject(this); + event.SetString(GetStringSelection()); + if ( HasClientObjectData() ) + event.SetClientObject( GetClientObject(n) ); + else if ( HasClientUntypedData() ) + event.SetClientData( GetClientData(n) ); + ProcessCommand(event); + } return TRUE; }