mfcc++: setfocus也设置了捕获

MFC C++: does setfocus set the capture as well?

本文关键字:设置 setfocus mfcc++      更新时间:2023-10-16

我有一个CDialog调用dommodal(),对话框被打开,其他一切都被禁用,但由于某种原因,我只有键盘捕获而不是鼠标。

鼠标捕获仍然在它上一个项目上。

如果我在DoModal之前调用setfocus,它不会工作,但如果我在DoModal之前调用setCapture,它会工作。

有谁能给我解释一下吗?

有什么问题吗?我想了解为什么我需要调用setCapture或releaseCapture之前dommodal(顺便说一句- releaseCapture工作,以及…)

没有'键盘捕获'这种东西。只有键盘焦点。

具有键盘焦点的窗口是接收键盘相关消息的窗口。鼠标消息通常被发送到鼠标光标下方的窗口,而不考虑焦点。也就是说,除非鼠标被"捕获",在这种情况下,无论鼠标光标在哪里,都将鼠标消息发送到捕获鼠标的窗口。

也就是说,你真的需要捕获鼠标吗?实际上,这很少是必要的。它应该作为用户操作的结果,而不是你自己的。

p。出于安全考虑,在Windows中实际上有两种不同类型的鼠标捕获:

  • 本地捕获:只有当鼠标位于属于同一应用程序的窗口上时,才将鼠标消息发送到捕获窗口。
  • 全局捕获:无论鼠标光标在哪里,都将鼠标消息发送到捕获窗口。

SetCapture函数只有在处理WM_?BUTTON_DOWN消息。