鱼C论坛

 找回密码
 立即注册
查看: 565|回复: 5

[已解决]CListCtrl--NM_CLICK

[复制链接]
发表于 2023-5-2 11:06:45 | 显示全部楼层 |阅读模式

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

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

x
void CCListCtrlDlg::OnNMClickList4(NMHDR* pNMHDR, LRESULT* pResult)
{
        LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
        //NM_CLICK 这个是鼠标左键点击CListCtrl控件客户区时激发的消息

        int han = pNMItemActivate->iItem; //获取行号

        str.Format(_T("han=%d\r\n"), han);
        OutputDebugString(str);




        *pResult = 0;
}


我的问题:int han = pNMItemActivate->iItem; //获取行号       只有单击第0列的行头才有效   其它都返回-1
最佳答案
2023-5-2 11:07:53
根据您提供的信息,可以确定iItem的值只有在单击行头时有效。如果要获得在CListCtrl控件中单击的子项的行和列的编号,可以使用以下代码:
int nRow, nCol;
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST4); // IDC_LIST4 是 CListCtrl 控件的 ID。
CPoint ptClicked = pNMItemActivate->ptAction; // 获取鼠标单击位置
pListCtrl->ScreenToClient(&ptClicked); // 将客户端坐标转换为屏幕坐标
nRow = pListCtrl->HitTest(ptClicked); // 获取鼠标位置所在的行
nCol = pNMItemActivate->iSubItem; // 获取鼠标位置所在的列
请注意,HitTest函数将返回与给定点最接近的子项的行号,如果没有找到则返回-1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-2 11:07:53 | 显示全部楼层    本楼为最佳答案   
根据您提供的信息,可以确定iItem的值只有在单击行头时有效。如果要获得在CListCtrl控件中单击的子项的行和列的编号,可以使用以下代码:
int nRow, nCol;
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST4); // IDC_LIST4 是 CListCtrl 控件的 ID。
CPoint ptClicked = pNMItemActivate->ptAction; // 获取鼠标单击位置
pListCtrl->ScreenToClient(&ptClicked); // 将客户端坐标转换为屏幕坐标
nRow = pListCtrl->HitTest(ptClicked); // 获取鼠标位置所在的行
nCol = pNMItemActivate->iSubItem; // 获取鼠标位置所在的列
请注意,HitTest函数将返回与给定点最接近的子项的行号,如果没有找到则返回-1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

匿名鱼油
匿名鱼油  发表于 2023-5-2 11:08:01
您可以尝试使用 GetFirstSelectedItemPosition 和 GetNextSelectedItem 方法来获取选中项目的位置。下面是一个示例代码:
void CCListCtrlDlg::OnNMClickList4(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

    // 获取选中项目的位置
    POSITION pos = m_list.GetFirstSelectedItemPosition();

    // 如果有选中项目,获取项目的行号并输出
    if (pos != NULL)
    {
        int nItem = m_list.GetNextSelectedItem(pos);
        str.Format(_T("han=%d\r\n"), nItem);
        OutputDebugString(str);
    }

    *pResult = 0;
}

这里 m_list 是您的 CListCtrl 对象。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-2 11:09:45 | 显示全部楼层
感谢二楼   但是我在学习 NM_CLICK  消息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-2 11:11:53 | 显示全部楼层
感谢三楼   但是我在学习pNMItemActivate 的属性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-2 11:15:23 | 显示全部楼层
OK了  需要  LVS_EX_FULLROWSELECT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 22:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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