X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6efda5fda46dd06598412e3138bc1950c975bd36..7735b2ea691f41d7a7f007befbe969386873b86e:/src/msw/listbox.cpp diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index 3e6b8a7612..37189a7e65 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -77,6 +77,7 @@ wxBEGIN_FLAGS( wxListBoxStyle ) wxFLAGS_MEMBER(wxLB_HSCROLL) wxFLAGS_MEMBER(wxLB_ALWAYS_SB) wxFLAGS_MEMBER(wxLB_NEEDED_SB) + wxFLAGS_MEMBER(wxLB_NO_SB) wxFLAGS_MEMBER(wxLB_SORT) wxEND_FLAGS( wxListBoxStyle ) @@ -165,7 +166,7 @@ bool wxListBox::Create(wxWindow *parent, return false; // create the native control - if ( !MSWCreateControl(_T("LISTBOX"), wxEmptyString, pos, size) ) + if ( !MSWCreateControl(wxT("LISTBOX"), wxEmptyString, pos, size) ) { // control creation failed return false; @@ -207,10 +208,6 @@ WXDWORD wxListBox::MSWGetStyle(long style, WXDWORD *exstyle) const { WXDWORD msStyle = wxControl::MSWGetStyle(style, exstyle); - // always show the vertical scrollbar if necessary -- otherwise it is - // impossible to use the control with the mouse - msStyle |= WS_VSCROLL; - // we always want to get the notifications msStyle |= LBS_NOTIFY; @@ -219,15 +216,23 @@ WXDWORD wxListBox::MSWGetStyle(long style, WXDWORD *exstyle) const msStyle |= LBS_NOINTEGRALHEIGHT; wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED), - _T("only one of listbox selection modes can be specified") ); + wxT("only one of listbox selection modes can be specified") ); if ( style & wxLB_MULTIPLE ) msStyle |= LBS_MULTIPLESEL; else if ( style & wxLB_EXTENDED ) msStyle |= LBS_EXTENDEDSEL; - if ( m_windowStyle & wxLB_ALWAYS_SB ) - msStyle |= LBS_DISABLENOSCROLL; + wxASSERT_MSG( !(style & wxLB_ALWAYS_SB) || !(style & wxLB_NO_SB), + wxT( "Conflicting styles wxLB_ALWAYS_SB and wxLB_NO_SB." ) ); + + if ( !(style & wxLB_NO_SB) ) + { + msStyle |= WS_VSCROLL; + if ( style & wxLB_ALWAYS_SB ) + msStyle |= LBS_DISABLENOSCROLL; + } + if ( m_windowStyle & wxLB_HSCROLL ) msStyle |= WS_HSCROLL; if ( m_windowStyle & wxLB_SORT ) @@ -357,7 +362,9 @@ void wxListBox::DoSetItemClientData(unsigned int n, void *clientData) wxT("invalid index in wxListBox::SetClientData") ); if ( ListBox_SetItemData(GetHwnd(), n, clientData) == LB_ERR ) + { wxLogDebug(wxT("LB_SETITEMDATA failed")); + } } // Return number of selections and an array of selected integers @@ -370,7 +377,7 @@ int wxListBox::GetSelections(wxArrayInt& aSelections) const int countSel = ListBox_GetSelCount(GetHwnd()); if ( countSel == LB_ERR ) { - wxLogDebug(_T("ListBox_GetSelCount failed")); + wxLogDebug(wxT("ListBox_GetSelCount failed")); } else if ( countSel != 0 ) { @@ -590,7 +597,7 @@ void wxListBox::SetHorizontalExtent(const wxString& s) //else: it shouldn't change } -wxSize wxListBox::DoGetBestSize() const +wxSize wxListBox::DoGetBestClientSize() const { // find the widest string int wLine; @@ -609,22 +616,17 @@ wxSize wxListBox::DoGetBestSize() const wListbox = 100; // the listbox should be slightly larger than the widest string - int cx, cy; - wxGetCharSize(GetHWND(), &cx, &cy, GetFont()); - - wListbox += 3*cx; + wListbox += 3*GetCharWidth(); - // Add room for the scrollbar + // add room for the scrollbar wListbox += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); // don't make the listbox too tall (limit height to 10 items) but don't // make it too small neither - int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)* + int hListbox = SendMessage(GetHwnd(), LB_GETITEMHEIGHT, 0, 0)* wxMin(wxMax(m_noItems, 3), 10); - wxSize best(wListbox, hListbox); - CacheBestSize(best); - return best; + return wxSize(wListbox, hListbox); } // ----------------------------------------------------------------------------