我有一个调用DoModal()的CDialog,对话框打开,其他一切都被禁用,但由于某种原因我只有键盘捕获而不是鼠标.
鼠标捕获仍然在它所在的最后一项上.
如果我在DoModal之前调用setfocus,它不起作用,但是如果我在DoModal之前执行setCapture它可以工作.
有谁可以向我解释一下?
问题是什么?我想了解为什么我需要在DoModal之前调用setCapture或releaseCapture(btw-releaseCapture也可以...)
没有"键盘捕捉"这样的东西.只有键盘焦点.
具有键盘焦点的窗口是接收键盘相关消息的窗口.鼠标消息通常发送到鼠标光标正下方的窗口,而不考虑焦点.也就是说,除非鼠标"俘获",在这种情况下鼠标消息被发送到已捕获鼠标,无论在哪里的鼠标光标的窗口.
那就是说,你真的需要抓住鼠标吗?实际上这很少是必要的.它应该仅仅是用户操作的结果,而不是你自己的.
PS.出于安全考虑,在Windows中实际上有两种不同类型的鼠标捕获:
SetCapture只有在处理WM_?BUTTON_DOWN消息时调用它,该函数才会创建全局捕获.