CListCtrl::SubItemHitTest
LVHITTESTINFO lvhti;
lvhti.pt = point;(point 为坐标)
int iItem = CListCtrl::SubItemHitTest(&lvhti);点击第一列的文字部分 得到的是正确的行数。
点击第一列的非文字部分,却得不到正确行数,得到-1.
请问是为什么啊?
还有 我有更好的方法知道 行和列吗
LVHITTESTINFO lvhti;
lvhti.pt = point;(point 为坐标)
int iItem = CListCtrl::SubItemHitTest(&lvhti);点击第一列的文字部分 得到的是正确的行数。
点击第一列的非文字部分,却得不到正确行数,得到-1.
请问是为什么啊?
还有 我有更好的方法知道 行和列吗
{
// TODO: Add your control notification handler code here
NMLISTVIEW* pListView = (NMLISTVIEW*)pNMHDR;
if(-1 != pListView->iItem)
{
CString str;
str.Format(_T("item: %d, subitem: %d"), pListView->iItem, pListView->iSubItem);
AfxMessageBox(str);
}
*pResult = 0;
}
void CXXXXDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CPoint pt;
GetCursorPos(&pt);
m_list.ScreenToClient(&pt);
LVHITTESTINFO lvhti;
lvhti.pt = pt;
m_list.SubItemHitTest(&lvhti);
if(lvhti.flags & LVHT_ONITEMLABEL)
{
CString str;
str.Format(_T("item: %d, subitem: %d"), lvhti.iItem, lvhti.iSubItem);
AfxMessageBox(str);
}
*pResult = 0;
}
m_pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT);
不过还有个问题。
1.我想用一次单击选中一行或者子项,若点到第一列则选中一行,若点到子项,则选中这个子项,再次单击,则子项编辑,或者仍然是行选中状态,没改变。并且不用 LVS_EX_FULLSELECT来这个风格。
2.并且点击列标题,能选中这一列。
3.第一列,不可编辑,并且是灰色。我想用 OnLButtonDown,OnCustomDraw,Cedit,来实现 。
我用重画做会有很多异常。关于重绘的。能不能给我个详细的代码?麻烦了