当前位置:  开发笔记 > 编程语言 > 正文

在MFC中检测单击鼠标

如何解决《在MFC中检测单击鼠标》经验,为你挑选了1个好方法。

在MFC中,双击鼠标单击事件会触发以下消息序列

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_LBUTTONDBCLK

WM_LBUTTONUP

因此,响应WM_LBUTTONDBCLK消息可以检测到双击.但如果我只是想检测一次单击如何区分它?

但只是查看WM_LBUTTONUP消息是不够的,因为它可能是单击,或者它可能是双击的第一次单击.

如何才能成功识别单击?



1> Serge Wautie..:

(请允许我将这些事件称为鼠标向上和鼠标向下.我的MFC有点生锈.而且这种称为.NET的东西最近弄乱了我的术语;-)

简短的故事:你不只是想了解Mouse Click.你需要更多.

长篇故事:

虽然这是违反直觉的,但似乎只是想要鼠标点击是相当罕见的.大多数情况下,您需要在Mouse Down上执行一些处理,并在Mouse Up上进行一些进一步处理.诀窍是仅仅跟踪Mouse Up消息是不够的:在窗口中可能没有发生鼠标停用.你认为这是一个有效的点击吗?特别是考虑到没有发生鼠标向下处理(例如选择项目).

进一步推理,你不应该依赖于在处理鼠标后接收鼠标:用户可能已经移动鼠标并在其他地方释放按钮(想想拖拉),在这种情况下,你不要接收MouseUp事件...除非您在MouseDown上捕获鼠标,以确保即使鼠标离开您的窗口也可以将鼠标事件发送到Mouse Up.

总而言之,您最终会跟踪Mouse Down,捕获鼠标,当您收到Mouse Up时,只需检查您是否拥有捕获.如果没有,鼠标双击(没有第二个鼠标向下)或鼠标在其他地方发生,因此你很可能不关心这个鼠标.

总结:没有MouseClick消息只是因为你不会走得太远:你需要处理更多的消息并实现更多的机制.

哦! 如果您处理已经处理了所有这些项目和选择内容的现有控件(例如列表视图),则可能会提供类似的自定义通知,例如项目激活或项目选择已更改.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有