鱼C论坛

 找回密码
 立即注册
查看: 528|回复: 2

[技术交流] CListCtrl---HitTest

[复制链接]
发表于 2023-5-4 07:23:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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   ??



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-4 08:38:10 | 显示全部楼层
我知道错哪儿了   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-1 09:42:56 | 显示全部楼层
这个函数返回-1表示点击的位置不在任何一个列表项上。可能是由于传入的坐标ptClicked不正确或者pListCtrl没有正确初始化。你可以检查一下这两个可能的原因:
  • 检查ptClicked是否为0,0坐标或者不在CListCtrl客户区域内,如是否被遮挡;
  • 检查pListCtrl指向的控件是否正确初始化,即是否关联了正确IDC_LIST4的控件。

如果以上两个方面都没问题的话,你可以考虑检查列表控件的属性设置,比如是否启用了LVS_OWNERDRAW_FIXED等属性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 10:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表