1

DX11ゲームに取り組んでおり、フルスクリーンモード中にカーソルをフルスクリーンウィンドウにクリップしたいと思います。私はこの方法を使用します


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を使用してクリップされていることを確認します。

だから私は2つの質問があります:

1)ウィンドウが表示されているモニターにマウスがクリップされないのはなぜですか?

2)モニターが2048x1152であり、解像度が2048x1152に設定されていることがわかっているのに、ウィンドウの長方形が1360x768と測定されるのはなぜですか?

4

2 に答える 2

3

ClipCursorが機能するには、すべてのDX11バッファとウィンドウサイズが正しい必要があります。これは、アプリケーションを切り替えずに最初にフルスクリーンで実行することでわかりました。ClipCursorは、複数のモニターを使用していても問題なく機能しました。ClipCursorが失敗するタイミングの詳細については、stackoverflowに関する他の質問を確認してください。DX11ゲーム中にD3D10SDKLayers.dllが読み込まれるのはなぜですか。

ClipCursorは、その質問で説明した状況が発生するたびに失敗します。また、2番目の質問への回答として、リンクされた質問で説明した状況のため、ウィンドウサイズが正しくありません。

于 2012-01-24T00:19:57.683 に答える
0

残念ながら、(ユーザーによる)ドキュメントへのコメントによると、これはマルチモニター設定では機能しないようです。画面から外れたときにマウスの位置を変更し、レンダリングをオフにしてから、カーソルをウィンドウに戻したときにマウスをオンに戻す方法を開発することをお勧めします(マウスがウィンドウから外れたかどうかを検出するため)そうではなく、そのためのWindowsメッセージがあります)。

于 2012-01-23T22:17:14.730 に答える