0

mfcの一部であるGetCapture()関数について読んでいます。ここに書かれているように、それが何をするのか、そしてマウスをキャプチャすることの意味についてはまだはっきりしていません。

http://msdn.microsoft.com/en-us/library/dxa5eaaa(v=vs.80).aspx

私の本では、次のように使用されています。

 void CSketcherView::OnLButtonUp(UINY nFlags, CPoint point)
 {
   if(this == GetCapture())
       ReleaseCapture();                    // Stop capturing mouse messages

   // ... add information to document
}

では、GetCapture()は何を返しますか?マウスを「キャプチャ」するとはどういう意味ですか?

4

2 に答える 2

3

マウスキャプチャの具体的な例として:

2 つのプッシュボタンがあるウィンドウを取ります。それらの 1 つをクリックし、マウス ボタンを押したままにします。次に、マウス カーソルを 2 番目の押ボタンまでドラッグし、マウス ボタンを放します。最初のプッシュボタンはメッセージを受け取りWM_LBUTTONUPますが、マウスカーソルがその上にあるにもかかわらず、2 番目のプッシュボタンは受け取りません。

最初のプッシュボタンがWM_LBUTTONDOWNメッセージを受信すると、マウスがキャプチャされました。WM_LBUTTONUPウィンドウがマウスをキャプチャしている間、マウスがウィンドウの境界の外にドラッグされた場合でも、後続のすべてのマウス イベント (特にメッセージ) を受け取ることが保証されます。これは、ボタンダウン メッセージとボタンアップ メッセージを一致させ、適切な状態を維持できるようにするために重要です。これは使いやすさのためにも重要です (1 つのボタンをクリックして誤って別のボタンに移動した場合、最初のボタンも 2 番目のボタンもトリガーしたくありません)。

于 2012-07-23T20:59:53.963 に答える
2

通常、マウスをキャプチャすると、マウスカーソルの位置がウィンドウの境界外にある場合でも、マウスイベントが発生します。

このGetCapture関数は、マウスをキャプチャした現在のウィンドウを返すだけです。

于 2012-07-22T18:36:27.137 に答える