Question

Je travaille sur un jeu DX11, et je veux couper le curseur pendant le mode plein écran vers la fenêtre Fullscreen.J'utilise cette méthode


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 );
    }
}

Cependant, lorsque je suis en mode plein écran avec 2 moniteurs, je peux toujours déplacer la souris sur l'autre moniteur.Avec la résolution définie sur 2048x1152 en mode plein écran, je reçois le rectangle de fenêtre comme 1360x768, et c'est ce qu'il est coupé.Je confirme qu'il est coupé en utilisant GetClippedRect.

Donc j'ai deux questions:

1) Pourquoi la souris n'est-elle pas coupée sur le moniteur, ma fenêtre est-elle?

2) Pourquoi le rectangle de fenêtre est-il mesuré comme 1360x768 lorsque je connais pour un fait que le moniteur est 2048x1152, et j'ai la résolution définie sur 2048x1152?

Était-ce utile?

La solution

Il s'avère que pour que Clipcursor fonctionne, vous devez disposer de tous vos tampons DX11 et de votre taille de fenêtre correcte.J'ai découvert cela en exécutant mon application en plein écran en premier, sans basculer, et Clipcursor a bien fonctionné, même avec plusieurs moniteurs.Pour plus d'informations sur le moment où Clipcursor échouera, consultez mon autre question sur Stackoverflow: Pourquoi est-ce que d3d10sdklayers.dll est chargé lors de mon jeu DX11? .

Clipcursor échouera toujours dans les situations que je décris dans cette question survivre.En outre, en réponse à ma 2e question, la taille de la fenêtre est incorrecte en raison de la situation que je décrise dans la question liée.

Autres conseils

Malheureusement, selon un commentaire sur le Documentation (par un utilisateur) Il semble que cela ne fonctionne pas pour les configurations multimonculations.Vous voudrez peut-être développer une méthode qui repositionnera la souris lorsqu'elle passe à l'écran, désactive le rendu, puis rallumez-le lorsque vous déplacez le curseur à la fenêtre (pour détecter si la souris déplace la fenêtre ouPas, il y a des messages Windows pour cela).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top