From: Vadim Zeitlin Date: Tue, 24 Nov 2009 00:01:38 +0000 (+0000) Subject: Fix wxListCtrl::GetSubItemRect(wxLIST_RECT_ICON/LABEL) in wxMSW for column 0. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/92a2a0ef916ffa51cddd6b05a7b5a17b9146992e Fix wxListCtrl::GetSubItemRect(wxLIST_RECT_ICON/LABEL) in wxMSW for column 0. Wrong width was returned for the icon or label rectangle when querying the first column. Fix this and add a test to the sample allowing to check this. GetSubItemRect() still returns wrong results for second and subsequent columns, see #11355. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62706 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index 96afe78e75..ba3e871b45 100644 --- a/samples/listctrl/listtest.cpp +++ b/samples/listctrl/listtest.cpp @@ -1117,8 +1117,8 @@ void MyListCtrl::OnListKeyDown(wxListEvent& event) } break; - case '1': // show sub item bounding rectangle - case '2': + case '1': // show sub item bounding rectangle for the given column + case '2': // (and icon/label rectangle if Shift/Ctrl is pressed) case '3': case '4': // this column is invalid but we want to test it too if ( InReportView() ) @@ -1126,7 +1126,14 @@ void MyListCtrl::OnListKeyDown(wxListEvent& event) int subItem = event.GetKeyCode() - '1'; item = event.GetIndex(); wxRect r; - if ( !GetSubItemRect(item, subItem, r) ) + + int code = wxLIST_RECT_BOUNDS; + if ( wxGetKeyState(WXK_SHIFT) ) + code = wxLIST_RECT_ICON; + else if ( wxGetKeyState(WXK_CONTROL) ) + code = wxLIST_RECT_LABEL; + + if ( !GetSubItemRect(item, subItem, r, code) ) { wxLogError(wxT("Failed to retrieve rect of item %ld column %d"), item, subItem + 1); break; diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index 52bf721d5e..8efb534922 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -1183,7 +1183,7 @@ bool wxListCtrl::GetSubItemRect(long item, long subItem, wxRect& rect, int code) // there is no way to retrieve the first sub item bounding rectangle using // wxGetListCtrlSubItemRect() as 0 means the whole item, so we need to // truncate it at first column ourselves - if ( subItem == 0 ) + if ( subItem == 0 && code == wxLIST_RECT_BOUNDS ) rect.width = GetColumnWidth(0); return true;