1

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

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

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

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

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

4

4 回答 4

2

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

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

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

于 2008-10-20T15:26:06.113 回答
1

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

BOOL CMyDialog::OnInitDialog() 
{
  MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
  CDialog::OnInitDialog();
}
于 2008-10-21T14:51:08.070 回答
0

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

于 2009-01-09T16:48:57.603 回答
0

可以通过pinvoking来完成

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

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

于 2009-10-05T14:10:28.433 回答