处理 CListCtrl 鼠标点击的问题

Posted

技术标签:

【中文标题】处理 CListCtrl 鼠标点击的问题【英文标题】:Problem in Handling the Mouse click of CListCtrl 【发布时间】:2010-12-30 10:53:23 【问题描述】:

我有一个带有 CheckBox 的 listctrl (LVS_EX_CHECKBOXES) 。它是一个单列 List Control 。我的问题是当我单击复选框时,特定项目被选中/取消选中。但是当我点击 Item 文本时,相应的 Checkbox 没有得到 Selected/UnSelected 。如何处理这两种情况。

【问题讨论】:

【参考方案1】:

要在用户单击项目文本时检查项目,您必须处理 NM_CLICK 消息,该消息在用户单击项目时发送。

类似的东西:

CYourListCtrl::OnNMClick(NMHDR* pNMHDR, LRESULT* pResult)


LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

int nItemIndex = pNMItemActivate->iItem;

BOOL bCurrentCheckState = GetCheck(nItemIndex);

SetCheck(nItemIndex, !bCurrentCheckState);

*pResult = 0;


我在写这篇文章时没有经过测试,所以你必须确保它不会与单击复选框本身的处理程序发生冲突。

【讨论】:

以上是关于处理 CListCtrl 鼠标点击的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CListCtrl 就地编辑列?

CLISTCTRL 获取点击列

如何在 MFC CListCtrl 中实现“点击并按住”行为?

CView 类中的标签编辑(EditLabel)忽略鼠标点击

CListCtrl 鼠标事件不起作用

如何在Android应用里屏蔽鼠标点击事件