如何在MFC CListCtrl中实现“轻敲并按住”行为?如何在MFC CListCtrl中实现“轻敲并按住”行为?
我有一个MFC CListCtrl在CDialog中,我需要添加到CListCtrl“点击并按住”的行为。
这就是我的意思是“点击并按住”:
如果用户点击(“标准”用鼠标点击左键)上一个CListCtrl项目,然后功能A将被调用。
如果用户点击一个CListCtrl项并按住鼠标左键超过一秒钟,那么函数B将被调用。
如何在MFC CListCtrl中实现“轻敲并按住”行为?如何在MFC CListCtrl中实现“轻敲并按住”行为?
我有一个MFC CListCtrl在CDialog中,我需要添加到CListCtrl“点击并按住”的行为。
这就是我的意思是“点击并按住”:
如果用户点击(“标准”用鼠标点击左键)上一个CListCtrl项目,然后功能A将被调用。
如果用户点击一个CListCtrl项并按住鼠标左键超过一秒钟,那么函数B将被调用。
继承CListCtrl并实现OnLButtonDown和OnLButtonUp。在执行“选项卡并保持”之前,在OnLButtonDown中设置一个计时器,其长度等于您要等待的时间。
在您的计时器处理程序中,执行“点按并按住”操作。
如果你得到OnLButtonUp计时器到期之前,取消计时器和执行“点击”操作(如果OnLButtonUp的连接点的参数是一个列表项。)
除了ajryans建议,您也可以需要继承CListBox派生类,以便它从您的对话框中拾取鼠标消息。就像是;
BOOL CMyDialog::OnInitDialog()
{
MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
CDialog::OnInitDialog();
}
这里是另一种没有计时器的方法http://www.codeproject.com/KB/mobile/tapandhold.aspx。
您可能需要捕获鼠标,或尝试检测鼠标何时离开窗口(或项目) - 以防用户鼠标移动,移动和鼠标移动。 – Aardvark 2008-10-21 13:12:58