-1

何らかの理由で、SetCapture 関数を使用すると、PtInRect() 関数が機能しなくなります。

ここにいくつかのコードがあります:

POINT curmouse;
RECT testrect = {0, 0, 200, 200};

WM_LBUTTONDOWN:
if (MK_LBUTTONDOWN == true)
SetCapture(hWnd);
break;

WM_MOUSEMOVE:
curmouse.x = LOWORD(lParam);
curmouse.y = HIWORD(lParam);

WM_LBUTTONUP:
if (PtInRect(&testrect , curmouse))
//Draw Image

注意: WM_LBUTTONUP でキャプチャを解放するための呼び出しを行っていません。実際、 releasecapture が呼び出されることはありません!

setcapture を呼び出さない場合、ptinrect はマウスを離したときに意図したとおりに動作します。

setcapture() が呼び出された状態で ptinrect を動作させる方法を教えてください。

最も重要なことは、このプログラムには 2 つの独立したウィンドウがあることです。最初のウィンドウの名前は bg_window、2 番目のウィンドウは other_window です。

4

2 に答える 2

2

curmouseで初期化しているだけでWM_MOUSEMOVEWM_LBUTTONUP実際にボタンを上げたときの値はランダムになります。

于 2013-03-18T23:06:02.133 に答える
0

SetCapture() は、ハンドルを渡したウィンドウにマウス メッセージを制限します。ReleaseCapture() を呼び出さない限り、他のウィンドウのマウス メッセージを解釈することはできません。

四角形が他のウィンドウにある場合、PtInrect は正常に機能しません。また、ユーザーが rect 領域をクリックしたかどうかを知りたい場合は、WM_LBUTTONDOWN メッセージ中に取得したマウス ポイントを使用できます。

于 2013-03-22T12:01:57.563 に答える