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

问题描述:

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

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

这就是我的意思是“点击并按住”:

如果用户点击(“标准”用鼠标点击左键)上一个CListCtrl项目,然后功能A将被调用。

如果用户点击一个CListCtrl项并按住鼠标左键超过一秒钟,那么函数B将被调用。

继承CListCtrl并实现OnLButtonDown和OnLButtonUp。在执行“选项卡并保持”之前,在OnLButtonDown中设置一个计时器,其长度等于您要等待的时间。

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

如果你得到OnLButtonUp计时器到期之前,取消计时器和执行“点击”操作(如果OnLButtonUp的连接点的参数是一个列表项。)

+0

您可能需要捕获鼠标,或尝试检测鼠标何时离开窗口(或项目) - 以防用户鼠标移动,移动和鼠标移动。 – Aardvark 2008-10-21 13:12:58

除了ajryans建议,您也可以需要继承CListBox派生类,以便它从您的对话框中拾取鼠标消息。就像是;

BOOL CMyDialog::OnInitDialog() 
{ 
    MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this); 
    CDialog::OnInitDialog(); 
} 

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

它可以通过pinvoking

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

我认为这是你在找什么做什么?