今天擴展List控件,調用CListCtrl::GetSubItemRect()獲取subItem==0項的rect時出了問題,我用TRACE打印數據發現left和right的數值是不正確的,似乎獲取到的是整個list控件的大小,后來查了一下MSDN,里面寫著:
- iSubItem
-
The one-based index of the subitem.
無語死了。。。。。
重寫CListCtrl::GetSubItemRect()算噠。。。。。
BOOL GetSubItemRect( int nItem, int nSubItem, int nArea, CRect& rect )
{
ASSERT(nItem >= 0);
ASSERT(nItem < GetItemCount());
if ((nItem < 0) || nItem >= GetItemCount())
return FALSE;
ASSERT(nSubItem >= 0);
ASSERT(nSubItem < GetHeaderCtrl()->GetItemCount());
if ((nSubItem < 0) || nSubItem >= GetHeaderCtrl()->GetItemCount())
return FALSE;
BOOL bRC = CListCtrl::GetSubItemRect(nItem, nSubItem, nArea, rect);
if (nSubItem == 0)
{
int offset = rect.left;
CRect firstColumnRect;
GetHeaderCtrl()->GetItemRect(0, &firstColumnRect);
rect.left = firstColumnRect.left + offset;
rect.right = firstColumnRect.right + offset;
}
return bRC;
}
-_-這下好了。