MFC listctrl如何判断鼠标是否点击在的checkbox上

//添加listctrl控件的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
    DWORD dwPos = GetMessagePos();
    CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
   
    m_list.ScreenToClient(&point);
   
    LVHITTESTINFO lvinfo;
    lvinfo.pt = point;
    lvinfo.flags = LVHT_ABOVE;
     
    UINT nFlag;
    int nItem = m_list.HitTest(point, &nFlag);
    //判断是否点在checkbox上
    if(nFlag == LVHT_ONITEMSTATEICON)
    {
         AfxMessageBox("点在listctrl的checkbox上");
    } 
    *pResult = 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VC++中的ListCtrl控件中实现Checkbox,你可以按照以下步骤进行操作: 1. 创建一个ListCtrl控件并设置其风格为`LVS_REPORT`,这将使其以报表形式显示数据。 2. 添加所需的列,可以使用`InsertColumn`方法来添加列,设置其标题和宽度。 3. 通过调用`SetExtendedStyle`方法设置控件的样式,以启用Checkbox功能。使用`LVS_EX_CHECKBOXES`作为参数。 4. 添加行数据,可以使用`InsertItem`方法插入行,然后使用`SetItemText`方法设置每个单元格的文本。 5. 当用户点击Checkbox时,您可以使用`GetCheckState`方法获取其状态,并执行相应的操作。 以下是一个简单的示例代码,用于在ListCtrl控件中实现Checkbox功能: ```cpp // 定义一个ListCtrl控件对象 CListCtrl m_ListCtrl; // 创建ListCtrl控件 m_ListCtrl.Create(WS_VISIBLE | WS_CHILD | LVS_REPORT, CRect(10, 10, 300, 200), this, IDC_LISTCTRL); // 设置风格和样式 m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES); m_ListCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 100); m_ListCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 100); // 添加行数据 m_ListCtrl.InsertItem(0, _T("Item 1")); m_ListCtrl.SetItemText(0, 1, _T("Data 1")); m_ListCtrl.InsertItem(1, _T("Item 2")); m_ListCtrl.SetItemText(1, 1, _T("Data 2")); // 处理Checkbox点击事件 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVIS_STATEIMAGEMASK)) { int nItem = pNMListView->iItem; int nState = m_ListCtrl.GetCheckState(nItem); // 根据Checkbox状态执行相应操作 if (nState == 0) { // Checkbox被取消选中 } else if (nState == 1) { // Checkbox被选中 } } ``` 这个示例代码演示了如何在ListCtrl控件中实现Checkbox功能。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值