- // is, of course, just the height of the permanently visible part of it
- if ( height != wxDefaultCoord )
+ // is, of course, just the height of the permanently visible part of it so
+ // add the drop down height to it
+
+ // don't make the drop down list too tall, arbitrarily limit it to 30
+ // items max and also don't make it too small if it's currently empty
+ size_t nItems = GetCount();
+ if ( !nItems )
+ nItems = 9;
+ else if ( nItems > 30 )
+ nItems = 30;
+
+ const int hItem = SendMessage(GetHwnd(), CB_GETITEMHEIGHT, 0, 0);
+ const int heightWithItems = height + hItem*nItems;
+
+
+ // do resize the native control
+ wxControl::DoSetSize(x, y, width, heightWithItems, sizeFlags);
+
+
+ // make the control itself of the requested height: notice that this
+ // must be done after changing its size or it has no effect (apparently
+ // the height is reset to default during the control layout) and that it's
+ // useless to to do it when using the deferred sizing -- in this case it
+ // will be done from MSWEndDeferWindowPos()
+#if wxUSE_DEFERRED_SIZING
+ if ( m_pendingSize == wxDefaultSize )