如何在 MFC CListCtrl 中实现“点击并按住”行为?
我在 CDialog 中有一个 MFC CListCtrl,我需要向 CListCtrl 添加“点击并按住”行为。
这就是我所说的“点击并按住”:
如果用户在 CListCtrl 项上单击(用鼠标左键进行“标准”单击),则将调用函数 A。
如果用户单击 CListCtrl 项目并按住鼠标左键超过一秒钟,则将调用函数 B。
如何在 MFC CListCtrl 中实现“点击并按住”行为?
我在 CDialog 中有一个 MFC CListCtrl,我需要向 CListCtrl 添加“点击并按住”行为。
这就是我所说的“点击并按住”:
如果用户在 CListCtrl 项上单击(用鼠标左键进行“标准”单击),则将调用函数 A。
如果用户单击 CListCtrl 项目并按住鼠标左键超过一秒钟,则将调用函数 B。
继承 CListCtrl 并实现 OnLButtonDown 和 OnLButtonUp。在 OnLButtonDown 中设置一个计时器,以设置在执行“制表符并按住”之前要等待的时间。
在您的计时器处理程序中,执行“点击并按住”操作。
如果在定时器到期前得到 OnLButtonUp,取消定时器并执行“点击”动作(如果 OnLButtonUp 的 CPoint 参数在列表项上方。)
除了 ajryans 的建议之外,您可能还需要对您的 CListBox 派生类进行子类化,以便它从您的对话框中获取鼠标消息。就像是;
BOOL CMyDialog::OnInitDialog()
{
MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
CDialog::OnInitDialog();
}
这是另一种没有计时器的方法http://www.codeproject.com/KB/mobile/tapandhold.aspx。