2008-10-20 137 views
1

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

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

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

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

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

回答

2

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

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

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

+0

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

1

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

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