ClipCursor не работает - PullRequest
       16

ClipCursor не работает

1 голос
/ 24 января 2012

Я работаю над игрой 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 );
    }
}

Однако, когда я нахожусь в полноэкранном режиме с двумя мониторами, я все еще могу переместить мышь на другой монитор. С разрешением 2048x1152 в полноэкранном режиме я получаю прямоугольник окна как 1360x768, и это то, к чему оно привязано. Я подтверждаю, что это обрезается с помощью GetClippedRect.

Итак, у меня два вопроса:

1) Почему мышь не прижимается к монитору, в котором находится мое окно?

2) Почему прямоугольник окна измеряется как 1360x768, когда я точно знаю, что монитор имеет разрешение 2048x1152, а разрешение установлено на 2048x1152?

Ответы [ 2 ]

3 голосов
/ 24 января 2012

Оказывается, что для работы ClipCursor у вас должны быть все буферы DX11 и правильный размер окна.Я узнал об этом, запустив свое приложение в полноэкранном режиме, не переключаясь на него, и ClipCursor отлично работал даже с несколькими мониторами.Для получения дополнительной информации о том, когда ClipCursor потерпит неудачу, проверьте мой другой вопрос по stackoverflow: Почему D3D10SDKLayers.dll загружается во время моей игры DX11? .

ClipCursor не будет работать всякий раз, когда возникают ситуации, которые я описываю в этом вопросе.Кроме того, в ответ на мой 2-й вопрос размер окна неверен из-за ситуации, которую я описал в связанном вопросе.

0 голосов
/ 24 января 2012

К сожалению, согласно комментарию к документации (пользователем), кажется, что это не работает для мультимониторных установок.Возможно, вы захотите разработать метод, который будет перемещать мышь, когда она отключается от экрана, отключает для него рендринг, а затем снова включает его, когда вы перемещаете курсор назад в окно (чтобы определить, перемещается ли мышь из окна илинет, для этого есть сообщения windows).

...