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

Posted

技术标签:

【中文标题】如何在 MFC CListCtrl 中实现“点击并按住”行为?【英文标题】:How can I implement the "tap and hold" behavior in an MFC CListCtrl? 【发布时间】:2008-10-20 14:07:28 【问题描述】:

我在 CDialog 中有一个 MFC CListCtrl,我需要向 CListCtrl 添加“点击并按住”行为。

这就是我所说的“点击并按住”:

如果用户在 CListCtrl 项目上单击(“标准”单击鼠标左键),则将调用函数 A。

如果用户单击 CListCtrl 项目并按住鼠标左键超过一秒钟,则将调用函数 B。

【问题讨论】:

【参考方案1】:

继承 CListCtrl 并实现 OnLButtonDown 和 OnLButtonUp。在 OnLButtonDown 中设置一个计时器,以设置在执行“制表符并按住”之前要等待的时间。

在您的计时器处理程序中,执行“点击并按住”操作。

如果你在定时器到期前得到OnLButtonUp,取消定时器并执行“点击”动作(如果OnLButtonUp的CPoint参数在一个列表项之上。)

【讨论】:

您可能想要捕获鼠标,或者尝试检测鼠标何时离开窗口(或项目) - 以防用户按下鼠标、移动鼠标​​和向上鼠标。 您是否尝试过实现上述方法?他们被召唤了吗? 是的,我确实实现了这些方法,并且得到了新闻组中描述的内容。【参考方案2】:

除了 ajryans 的建议之外,您可能还需要子类化您的 CListBox 派生类,以便它从您的对话框中获取鼠标消息。类似的东西;

BOOL CMyDialog::OnInitDialog() 

  MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
  CDialog::OnInitDialog();

【讨论】:

【参考方案3】:

这是另一种没有计时器的方法http://www.codeproject.com/KB/mobile/tapandhold.aspx。

【讨论】:

【参考方案4】:

可以通过pinvoking来完成

http://www.ceveni.com/2009/10/sample-code-for-context-menu-in-c.html

我想这就是你要找的东西?

【讨论】:

以上是关于如何在 MFC CListCtrl 中实现“点击并按住”行为?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SDI 中使用 MFC CListCtrl

MFC CListCtrl 更新任何单元格的文本

如何在 MFC 中将图像添加到 CListCtrl

如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?

如何在 Win32 窗口中实现 MFC 资源?

如何在 MFC 的功能区文本框中实现数据验证