+ int lbWidth = GetCount() > 0 ? 20 : 100; // some defaults
+ int lbHeight = 20;
+ int wLine;
+
+ SInt32 metric ;
+
+ GetThemeMetric( kThemeMetricPopupButtonHeight , &metric );
+ lbHeight = metric ;
+
+ {
+ wxClientDC dc(const_cast<wxChoice*>(this));
+
+ // Find the widest line
+ for(unsigned int i = 0; i < GetCount(); i++)
+ {
+ wxString str(GetString(i));
+
+ wxCoord width, height ;
+ dc.GetTextExtent( str , &width, &height);
+ wLine = width ;
+
+ lbWidth = wxMax( lbWidth, wLine ) ;
+ }
+
+ // Add room for the popup arrow
+ lbWidth += 2 * lbHeight ;
+
+ wxCoord width, height ;
+ dc.GetTextExtent( wxT("X"), &width, &height);
+ int cx = width ;
+ lbHeight += 4;
+
+ lbWidth += cx ;
+ }
+
+ return wxSize( lbWidth, lbHeight );