私はDX11ゲームで作業しており、フルスクリーンモードでカーソルをフルスクリーンウィンドウにクリップしたいと思います。この方法を使用しますClipCursorが機能していません
void MyClass::_SetupCursor(BOOL bFullscreen) {
// Clip cursor if requested
if(bFullscreen) {
if(m_bShowCursorWhenFullscreen) {
ShowCursor(m_bShowCursorWhenFullscreen);
}
if(m_bClipCursorWhenFullscreen) {
// Confine cursor to full screen window
RECT windowRect;
GetWindowRect(m_hWnd, &windowRect);
ClipCursor(&windowRect);
}
}
else {
ShowCursor(TRUE);
ClipCursor(NULL);
}
}
ただし、2つのモニタでフルスクリーンモードになっても、マウスをもう一方のモニタに移動することはできます。解像度をフルスクリーンモードで2048x1152に設定すると、ウィンドウの矩形が1360x768になり、それがクリップされます。 GetClippedRectを使用してクリップされていることを確認します。
が1)なぜマウスが私の窓はであるモニターにクリップなっていません。
だから私は2つの質問がありますか?
2)モニタが2048x1152であり、解像度が2048x1152に設定されていることがわかっている場合、ウィンドウの長方形が1360x768と測定されるのはなぜですか?
カーソルを隠すのではなく、クリップするのはなぜですか? –
@CodyGrayクリップされていないとカーソルが隠れてしまうことはありません...全画面ウィンドウにカーソルを置く必要があります。多くのゲームにはこの機能があります。はい、私はそれらがウィンドウのカーソルを隠していることを知っていますが、実際にはそれほど違いはありません。私はカーソルをまだ置き換えていない。 – Darkhydro
この関数呼び出しを完全に避けてください。実際にカーソルをエミュレートする必要があります。その理由は、アプリケーションが不明瞭に(segfault/exception/access violation/whatever)Windowsがクリップ境界を保持する場合(少なくとも<= Windows XPの場合)です。あなたが絶対にシステムカーソルに境界チェックを含めるには、代わりに 'SetCursorPosition'を使用してそれを制限してください。 –