を、ちょうどあなたの窓の四角形を与えるClipCursorを使用します。
RECT rect;
GetClientRect(mWindow, &rect);
POINT ul;
ul.x = rect.left;
ul.y = rect.top;
POINT lr;
lr.x = rect.right;
lr.y = rect.bottom;
MapWindowPoints(mWindow, nullptr, &ul, 1);
MapWindowPoints(mWindow, nullptr, &lr, 1);
rect.left = ul.x;
rect.top = ul.y;
rect.right = lr.x;
rect.bottom = lr.y;
ClipCursor(&rect);
ので、このモードを脱出する方法を持っているようにしてくださいユーザーは必要に応じて他のウィンドウと対話することができます。通常、このような「マウスルック」の問題を解決するために「一時停止」メニューに移動すると、ClipCursor(nullptr);
に電話をかけます。
デスクトップアプリでも「生」入力を使用できます(Taking Advantage of High-Definition Mouse Movementを参照)。生の入力は、相対的な動きの「マウスルック」の動作にはうまくいくが、(a)リモートデスクトップでは機能しないし、(b)「ポインタ弾道」は得られない非線形の移動速度でマウスをより敏捷にするので、絶対移動を扱うときには通常、伝統的なメッセージであるWM_MOUSE
に固執する必要があります。 WM_INPUT
に相当するものがないよう
は、ユニバーサルのWindowsプラットフォームの場合、あなたは「生の」入力を使用することはできませんが、
MouseDelta
プロパティによって
MouseDevice.MouseMoved
イベントのうち、高精度なデータを入手できます。 UWPでの相対移動に
ClipCursor
を使用する必要はありません。
CoreWindow.PointerCursor
プロパティをnullptrに設定してカーソルをオフにするだけで、システムマウスの位置が追跡されなくなります。ここでも、「一時停止」メニューに入っているときにシステムカーソルを復元する必要があります。
Developing mouse controls (DirectX and C++)を参照してください。
のDirectXツールキットMouseヘルパークラスともっと重要なimplementationファイルを参照してください。相対モードでは、WindowsデスクトップのWin32実装ではClipCursor
とWM_INPUT
の両方を使用します。
'SetCapture'は助けますか? –