gpt4 book ai didi

user-interface - 在 MFC 中检测单个鼠标单击

转载 作者:行者123 更新时间:2023-12-04 17:42:29 27 4
gpt4 key购买 nike

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

  • WM_LBUTTONDOWN
  • WM_LBUTTONUP
  • WM_LBUTTONDBCLK
  • WM_LBUTTONUP

  • 所以回复 WM_LBUTTONDBCLK 消息允许您检测双击。但是如果我只是想检测一个单击,我该如何区分呢?

    但只是看着 WM_LBUTTONUP message 是不够的,因为它可能是一次单击,也可能是双击的第一次单击。

    我怎样才能成功识别一次单击?

    最佳答案

    (请允许我将这些事件称为 Mouse Up 和 Mouse Down。我的 MFC 有点生疏。还有一个叫做 .NET 的东西,他最近弄乱了我的术语;-)

    短篇小说 :您不只是想了解鼠标点击。你需要更多。

    长篇大论 :

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

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

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

    总结 :没有 MouseClick 消息仅仅是因为你不会用它走很远:你需要处理更多的消息并实现更多的机制。

    哦!如果您处理的现有控件已经处理了所有这些项目和选择内容,例如 ListView ,则它可能会提供类似的自定义通知,例如 Item Activate 或 Item Selection Changed。

    关于user-interface - 在 MFC 中检测单个鼠标单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507802/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com