MFC-NM_CLICK鼠标左键点击CListCtrl控件消息
NM_CLICK 是鼠标左键点击CListCtrl控件客户区时激发的消息
添加消息函数
选中控件-->
void CCListCtrlDlg::OnNMClickList4(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); //NM_CLICK 这个是鼠标左键点击CListCtrl控件客户区时激发的消息 int han = pNMItemActivate->iItem; //获取单击的行号 /* 【最好设置:LVS_EX_FULLROWSELECT //选择整行;否则只有单击项头才有效】 */ str.Format(_T("行号han=%d\r\n"), han); OutputDebugString(str); int lie = pNMItemActivate->iSubItem; //获取单击的列号 str.Format(_T("列号lie=%d\r\n"), lie); OutputDebugString(str); UINT ns=pNMItemActivate->uNewState; str.Format(_T("新状态ns=%d\r\n"), ns); OutputDebugString(str); UINT olds = pNMItemActivate->uOldState; str.Format(_T("老状态olds=%d\r\n"), olds); OutputDebugString(str); /* 我的新状态和老状态的返回值 始终=0 不知道什么原因 有知道的请评论区留言 */ POINT point = pNMItemActivate->ptAction; //获取鼠标点击时的坐标 //以控件客户区为坐标系 str.Format(_T("point.x=%d point.y=%d\r\n"), point.x, point.y); OutputDebugString(str); int nRow; CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST4); //窗口句柄转换成类指针 CPoint ptClicked = pNMItemActivate->ptAction; // 获取鼠标单击位置 nRow = pListCtrl->HitTest(ptClicked); // 获取鼠标位置所在的行 str.Format(_T("nRow=%d\r\n"), nRow); OutputDebugString(str); *pResult = 0; }