X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cd01e3646a12ab504a4e8f2342859cf45b6bf1ee..55826fcf4fd863d48ac28789d99bbb5c8a8d4c7e:/src/msw/listctrl.cpp diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index 64e1e60785..b009824380 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -45,7 +45,7 @@ #include "wx/msw/private.h" -#if ((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__)) +#if defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__) #include "wx/msw/gnuwin32/extra.h" #else #include @@ -288,11 +288,6 @@ bool wxListCtrl::Create(wxWindow *parent, DWORD wstyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS; - if ( m_windowStyle & wxCLIP_SIBLINGS ) - wstyle |= WS_CLIPSIBLINGS; - - if ( wxStyleHasBorder(m_windowStyle) ) - wstyle |= WS_BORDER; m_baseStyle = wstyle; if ( !DoCreateControl(x, y, width, height) ) @@ -308,16 +303,12 @@ bool wxListCtrl::DoCreateControl(int x, int y, int w, int h) { DWORD wstyle = m_baseStyle; - bool want3D; - WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D); - - // Even with extended styles, need to combine with WS_BORDER - // for them to look right. - if ( want3D ) - wstyle |= WS_BORDER; + WXDWORD exStyle = 0; + WXDWORD standardStyle = MSWGetStyle(GetWindowStyle(), & exStyle) ; long oldStyle = 0; // Dummy wstyle |= ConvertToMSWStyle(oldStyle, m_windowStyle); + wstyle |= standardStyle; // Create the ListView control. m_hWnd = (WXHWND)CreateWindowEx(exStyle, @@ -1850,7 +1841,19 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) wxConvertFromMSWListItem(NULL, event.m_item, item); if ( ((LV_ITEM)item).pszText == NULL || ((LV_ITEM)item).iItem == -1 ) + { + // don't keep a stale wxTextCtrl around + if ( m_textCtrl ) + { + // EDIT control will be deleted by the list control itself so + // prevent us from deleting it as well + m_textCtrl->UnsubclassWin(); + m_textCtrl->SetHWND(0); + delete m_textCtrl; + m_textCtrl = NULL; + } return FALSE; + } event.m_itemIndex = event.m_item.m_itemId; } @@ -1862,7 +1865,19 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) wxConvertFromMSWListItem(NULL, event.m_item, item); if ( ((LV_ITEM)item).pszText == NULL || ((LV_ITEM)item).iItem == -1 ) + { + // don't keep a stale wxTextCtrl around + if ( m_textCtrl ) + { + // EDIT control will be deleted by the list control itself so + // prevent us from deleting it as well + m_textCtrl->UnsubclassWin(); + m_textCtrl->SetHWND(0); + delete m_textCtrl; + m_textCtrl = NULL; + } return FALSE; + } event.m_itemIndex = event.m_item.m_itemId; } @@ -2065,21 +2080,18 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) eventType = wxEVT_COMMAND_LIST_CACHE_HINT; - // we get some really stupid cache hints like ones for items in - // range 0..0 for an empty control or, after deleting an item, - // for items in invalid range - filter this garbage out - if ( cacheHint->iFrom < cacheHint->iTo ) - { - event.m_oldItemIndex = cacheHint->iFrom; - - long iMax = GetItemCount(); - event.m_itemIndex = cacheHint->iTo < iMax ? cacheHint->iTo - : iMax - 1; - } - else - { + // we get some really stupid cache hints like ones for + // items in range 0..0 for an empty control or, after + // deleting an item, for items in invalid range -- filter + // this garbage out + if ( cacheHint->iFrom > cacheHint->iTo ) return FALSE; - } + + event.m_oldItemIndex = cacheHint->iFrom; + + const long iMax = GetItemCount(); + event.m_itemIndex = cacheHint->iTo < iMax ? cacheHint->iTo + : iMax - 1; } break; @@ -2360,7 +2372,7 @@ void wxListCtrl::SetItemCount(long count) { wxASSERT_MSG( IsVirtual(), _T("this is for virtual controls only") ); - if ( !::SendMessage(GetHwnd(), LVM_SETITEMCOUNT, (WPARAM)count, 0) ) + if ( !::SendMessage(GetHwnd(), LVM_SETITEMCOUNT, (WPARAM)count, LVSICF_NOSCROLL) ) { wxLogLastError(_T("ListView_SetItemCount")); }