X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e69683678e8fd0a8ec73a7ba4557a1cec1675797..f3f0d961af5454a3544a4f4f9aced750d4641d69:/src/msw/choice.cpp diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index 8e72b07078..0afb34b36d 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -127,14 +127,39 @@ bool wxChoice::Create(wxWindow *parent, validator, name); } -bool wxChoice::CreateAndInit(wxWindow *parent, wxWindowID id, +bool wxChoice::CreateAndInit(wxWindow *parent, + wxWindowID id, const wxPoint& pos, - const wxSize& size, + const wxSize& sizeOrig, int n, const wxString choices[], long style, const wxValidator& validator, const wxString& name) { + // this is a bit hackish but we want to prevent MSWCreateControl() from + // calling SetBestSize() (which it would do if any of the size components + // is not given) because it wouldn't calculate it correctly if we have any + // strings as they're not yet added to the control when it is called + // + // so: if we have any strings, we fudge the size parameter so that + // SetBestSize() is not called by MSWCreateControl() but then we do call it + // manually below + bool autoSize = false; + wxSize size = sizeOrig; + if ( n ) + { + if ( size.x < 0 ) + { + size.x = 1; + autoSize = true; + } + if ( size.y < 0 ) + { + size.y = 1; + autoSize = true; + } + } + // initialize wxControl if ( !CreateControl(parent, id, pos, size, style, validator, name) ) return FALSE; @@ -148,12 +173,18 @@ bool wxChoice::CreateAndInit(wxWindow *parent, wxWindowID id, // course) background rather than inheriting the parent's background SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - // initialize + // initialize the controls contents for ( int i = 0; i < n; i++ ) { Append(choices[i]); } + // and now we may finally size the control properly (if needed) + if ( autoSize ) + { + SetBestSize(sizeOrig); + } + return TRUE; }