CListCtrl---HitTest
void CCListCtrlDlg::OnNMClickList4(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
//NM_CLICK 这个是鼠标左键点击CListCtrl控件客户区时激发的消息
int nRow, nCol;
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST4); //窗口句柄转换成类指针
CPoint ptClicked = pNMItemActivate->ptAction; // 获取鼠标单击位置
pListCtrl->ScreenToClient(&ptClicked); // 将客户端坐标转换为屏幕坐标
nRow = pListCtrl->HitTest(ptClicked); // 获取鼠标位置所在的行
nCol = pNMItemActivate->iSubItem; // 获取鼠标位置所在的列
str.Format(_T("nRow=%d\r\n"), nRow);
OutputDebugString(str);
str.Format(_T("nCol=%d\r\n"), nCol);
OutputDebugString(str);
*pResult = 0;
}
我的问题:nRow = pListCtrl->HitTest(ptClicked); 返回值都是-1 ??
我知道错哪儿了 这个函数返回-1表示点击的位置不在任何一个列表项上。可能是由于传入的坐标ptClicked不正确或者pListCtrl没有正确初始化。你可以检查一下这两个可能的原因:
[*]检查ptClicked是否为0,0坐标或者不在CListCtrl客户区域内,如是否被遮挡;
[*]检查pListCtrl指向的控件是否正确初始化,即是否关联了正确IDC_LIST4的控件。
如果以上两个方面都没问题的话,你可以考虑检查列表控件的属性设置,比如是否启用了LVS_OWNERDRAW_FIXED等属性。
页:
[1]