From da89830af414f55a37a211293cdb81958d478aa6 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 24 Sep 2009 09:07:13 +0000 Subject: [PATCH] Applied #10025 (Patch to allow proper sizing of simple combo box) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62058 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/choice.h | 3 +++ src/msw/choice.cpp | 34 ++++++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/include/wx/msw/choice.h b/include/wx/msw/choice.h index e069ec2a48..5ddb312b11 100644 --- a/include/wx/msw/choice.h +++ b/include/wx/msw/choice.h @@ -135,6 +135,9 @@ protected: // free all memory we have (used by Clear() and dtor) void Free(); + // set the height for simple combo box + int SetHeightSimpleComboBox(int nItems) const; + #if wxUSE_DEFERRED_SIZING virtual void MSWEndDeferWindowPos(); #endif // wxUSE_DEFERRED_SIZING diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index 55f5106096..6910839ffb 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -552,13 +552,20 @@ void wxChoice::DoSetSize(int x, int y, // 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; + if (!HasFlag(wxCB_SIMPLE)) + { + 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; + int heightWithItems = 0; + if (!HasFlag(wxCB_SIMPLE)) + heightWithItems = height + hItem*nItems; + else + heightWithItems = SetHeightSimpleComboBox(nItems); // do resize the native control @@ -592,6 +599,7 @@ wxSize wxChoice::DoGetBestSize() const { // find the widest string int wChoice = 0; + int hChoice; const unsigned int nItems = GetCount(); for ( unsigned int i = 0; i < nItems; i++ ) { @@ -608,12 +616,26 @@ wxSize wxChoice::DoGetBestSize() const // the combobox should be slightly larger than the widest string wChoice += 5*GetCharWidth(); + if( HasFlag( wxCB_SIMPLE ) ) + { + hChoice = SetHeightSimpleComboBox( nItems ); + } + else + hChoice = EDIT_HEIGHT_FROM_CHAR_HEIGHT(GetCharHeight()); - wxSize best(wChoice, EDIT_HEIGHT_FROM_CHAR_HEIGHT(GetCharHeight())); + wxSize best(wChoice, hChoice); CacheBestSize(best); return best; } +int wxChoice::SetHeightSimpleComboBox(int nItems) const +{ + int cx, cy; + wxGetCharSize( GetHWND(), &cx, &cy, GetFont() ); + int hItem = SendMessage(GetHwnd(), CB_GETITEMHEIGHT, -1, 0); + return EDIT_HEIGHT_FROM_CHAR_HEIGHT( cy ) * wxMin( wxMax( nItems, 3 ), 6 ) + hItem - 1; +} + // ---------------------------------------------------------------------------- // MSW message handlers // ---------------------------------------------------------------------------- -- 2.47.2