X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/611a725ecd1dd7b35c5659d1d7cabe38d860a1e1..c263eb03846c1b1439bf67d1d831255024278adf:/src/msw/listctrl.cpp?ds=sidebyside diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index 302d90a5ea..0d5621a969 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -121,7 +121,7 @@ public: // memcpy() can't work if the struct sizes are different wxCOMPILE_TIME_ASSERT( sizeof(LV_ITEM_OTHER) == sizeof(LV_ITEM_NATIVE), - CodeCantWorkIfDiffSizes); + CodeCantWorkIfDiffSizes); memcpy(&m_item, &item, sizeof(LV_ITEM_NATIVE)); @@ -480,6 +480,8 @@ void wxListCtrl::FreeAllInternalData() m_ignoreChangeMessages = false; m_AnyInternalData = false; + + m_count = 0; } } @@ -1426,23 +1428,38 @@ long wxListCtrl::HitTest(const wxPoint& point, int& flags) ListView_HitTest(GetHwnd(), & hitTestInfo); flags = 0; + if ( hitTestInfo.flags & LVHT_ABOVE ) flags |= wxLIST_HITTEST_ABOVE; if ( hitTestInfo.flags & LVHT_BELOW ) flags |= wxLIST_HITTEST_BELOW; - if ( hitTestInfo.flags & LVHT_NOWHERE ) - flags |= wxLIST_HITTEST_NOWHERE; - if ( hitTestInfo.flags & LVHT_ONITEMICON ) - flags |= wxLIST_HITTEST_ONITEMICON; - if ( hitTestInfo.flags & LVHT_ONITEMLABEL ) - flags |= wxLIST_HITTEST_ONITEMLABEL; - if ( hitTestInfo.flags & LVHT_ONITEMSTATEICON ) - flags |= wxLIST_HITTEST_ONITEMSTATEICON; if ( hitTestInfo.flags & LVHT_TOLEFT ) flags |= wxLIST_HITTEST_TOLEFT; if ( hitTestInfo.flags & LVHT_TORIGHT ) flags |= wxLIST_HITTEST_TORIGHT; + if ( hitTestInfo.flags & LVHT_NOWHERE ) + flags |= wxLIST_HITTEST_NOWHERE; + + // note a bug or at least a very strange feature of comtl32.dll (tested + // with version 4.0 under Win95 and 6.0 under Win 2003): if you click to + // the right of the item label, ListView_HitTest() returns a combination of + // LVHT_ONITEMICON, LVHT_ONITEMLABEL and LVHT_ONITEMSTATEICON -- filter out + // the bits which don't make sense + if ( hitTestInfo.flags & LVHT_ONITEMLABEL ) + { + flags |= wxLIST_HITTEST_ONITEMLABEL; + + // do not translate LVHT_ONITEMICON here, as per above + } + else + { + if ( hitTestInfo.flags & LVHT_ONITEMICON ) + flags |= wxLIST_HITTEST_ONITEMICON; + if ( hitTestInfo.flags & LVHT_ONITEMSTATEICON ) + flags |= wxLIST_HITTEST_ONITEMSTATEICON; + } + return (long) hitTestInfo.iItem; } @@ -1902,7 +1919,6 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) break; case LVN_DELETEALLITEMS: - m_count = 0; eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS; event.m_itemIndex = -1; break;