X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b2739754f76da41764a922b4bb35b420d703956..7b9da2077d0975db6c965a85c91d5aca671ab5e3:/src/msw/listbox.cpp diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index 985187379e..6e786a20fc 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -50,7 +50,7 @@ #ifndef __TWIN32__ #if defined(__GNUWIN32__) #ifndef wxUSE_NORLANDER_HEADERS - #include + #include "wx/msw/gnuwin32/extra.h" #endif #endif #endif @@ -256,15 +256,15 @@ void wxListBox::Delete(int N) wxCHECK_RET( N >= 0 && N < m_noItems, wxT("invalid index in wxListBox::Delete") ); -#if wxUSE_OWNER_DRAWN - delete m_aItems[N]; - m_aItems.Remove(N); -#else // !wxUSE_OWNER_DRAWN - if ( HasClientObjectData() ) - { - delete GetClientObject(N); - } -#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN + // for owner drawn objects, the data is used for storing wxOwnerDrawn + // pointers and we shouldn't touch it +#if !wxUSE_OWNER_DRAWN + if ( !(m_windowStyle & wxLB_OWNERDRAW) ) +#endif // !wxUSE_OWNER_DRAWN + if ( HasClientObjectData() ) + { + delete GetClientObject(N); + } SendMessage(GetHwnd(), LB_DELETESTRING, N, 0); m_noItems--; @@ -359,13 +359,17 @@ void wxListBox::Clear() void wxListBox::Free() { #if wxUSE_OWNER_DRAWN - size_t uiCount = m_aItems.Count(); - while ( uiCount-- != 0 ) { - delete m_aItems[uiCount]; - } + if ( m_windowStyle & wxLB_OWNERDRAW ) + { + size_t uiCount = m_aItems.Count(); + while ( uiCount-- != 0 ) { + delete m_aItems[uiCount]; + } - m_aItems.Clear(); -#else // !wxUSE_OWNER_DRAWN + m_aItems.Clear(); + } + else +#endif // wxUSE_OWNER_DRAWN if ( HasClientObjectData() ) { for ( size_t n = 0; n < (size_t)m_noItems; n++ ) @@ -373,7 +377,6 @@ void wxListBox::Free() delete GetClientObject(n); } } -#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN } void wxListBox::SetSelection(int N, bool select) @@ -744,13 +747,19 @@ bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item) MEASUREITEMSTRUCT *pStruct = (MEASUREITEMSTRUCT *)item; + HDC hdc = CreateIC(wxT("DISPLAY"), NULL, NULL, 0); + wxDC dc; - dc.SetHDC((WXHDC)CreateIC(wxT("DISPLAY"), NULL, NULL, 0)); + dc.SetHDC((WXHDC)hdc); dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_ANSI_VAR_FONT)); pStruct->itemHeight = dc.GetCharHeight() + 2*OWNER_DRAWN_LISTBOX_EXTRA_SPACE; pStruct->itemWidth = dc.GetCharWidth(); + dc.SetHDC(0); + + DeleteDC(hdc); + return TRUE; }