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;
}

 

 

 

 

 

 

 

 

 

 

posted @ 2023-05-02 09:00  天子骄龙  阅读(543)  评论(0编辑  收藏  举报