如何在 MFC CListCtrl 中实现“点击并按住”行为?
Posted
技术标签:
【中文标题】如何在 MFC CListCtrl 中实现“点击并按住”行为?【英文标题】:How can I implement the "tap and hold" behavior in an MFC CListCtrl? 【发布时间】:2008-10-20 14:07:28 【问题描述】:我在 CDialog 中有一个 MFC CListCtrl,我需要向 CListCtrl 添加“点击并按住”行为。
这就是我所说的“点击并按住”:
如果用户在 CListCtrl 项目上单击(“标准”单击鼠标左键),则将调用函数 A。
如果用户单击 CListCtrl 项目并按住鼠标左键超过一秒钟,则将调用函数 B。
【问题讨论】:
【参考方案1】:继承 CListCtrl 并实现 OnLButtonDown 和 OnLButtonUp。在 OnLButtonDown 中设置一个计时器,以设置在执行“制表符并按住”之前要等待的时间。
在您的计时器处理程序中,执行“点击并按住”操作。
如果你在定时器到期前得到OnLButtonUp,取消定时器并执行“点击”动作(如果OnLButtonUp的CPoint参数在一个列表项之上。)
【讨论】:
您可能想要捕获鼠标,或者尝试检测鼠标何时离开窗口(或项目) - 以防用户按下鼠标、移动鼠标和向上鼠标。 您是否尝试过实现上述方法?他们被召唤了吗? 是的,我确实实现了这些方法,并且得到了新闻组中描述的内容。【参考方案2】:除了 ajryans 的建议之外,您可能还需要子类化您的 CListBox 派生类,以便它从您的对话框中获取鼠标消息。类似的东西;
BOOL CMyDialog::OnInitDialog()
MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this);
CDialog::OnInitDialog();
【讨论】:
【参考方案3】:这是另一种没有计时器的方法http://www.codeproject.com/KB/mobile/tapandhold.aspx。
【讨论】:
【参考方案4】:可以通过pinvoking来完成
http://www.ceveni.com/2009/10/sample-code-for-context-menu-in-c.html
我想这就是你要找的东西?
【讨论】:
以上是关于如何在 MFC CListCtrl 中实现“点击并按住”行为?的主要内容,如果未能解决你的问题,请参考以下文章