0

DoModal()を呼び出しているCDialogがあり、ダイアログが開き、他のすべてが無効になっていますが、何らかの理由で、マウスではなくキーボードキャプチャしかありません。

マウスキャプチャは、それがあった最後のアイテムにまだあります。

DoModalの前にsetfocusを呼び出すと機能しませんが、DoModalの前にsetCaptureを呼び出すと機能します。

誰かが私にそれを説明できますか?

何が問題ですか?DoModalの前にsetCaptureまたはreleaseCaptureを呼び出す必要がある理由を理解したい(ところで、releaseCaptureも機能します...)

4

1 に答える 1

6

「キーボード キャプチャ」などはありません。キーボードフォーカスのみです。

キーボード フォーカスを持つウィンドウは、キーボード関連のメッセージを受け取るウィンドウです。マウス メッセージは通常、フォーカスに関係なく、マウス カーソルのすぐ下のウィンドウに送信されます。つまり、マウスが「キャプチャ」されていない限り、この場合、マウス カーソルがどこにあるかに関係なく、マウス メッセージがマウスをキャプチャしたウィンドウに送信されます。

そうは言っても、本当にマウスをキャプチャする必要がありますか? 実際、それが必要になることはめったにありません。また、ユーザー アクションの結果としてのみ実行する必要があり、自分で実行することはできません。

PS。セキュリティ上の懸念により、Windows には実際には 2 種類のマウス キャプチャがあります。

  • ローカル キャプチャ: マウスが同じアプリケーションに属するウィンドウ上にある場合にのみ、マウス メッセージがキャプチャ ウィンドウに送信されます。
  • グローバル キャプチャ: マウス カーソルの位置に関係なく、マウス メッセージがキャプチャ ウィンドウに送信されます。

このSetCapture関数は、WM_?BUTTON_DOWN メッセージの処理中に呼び出された場合にのみ、グローバル キャプチャを作成します。

于 2011-11-20T17:05:41.263 に答える