9
votes

Le style du curseur ne reste pas mis à jour

J'ai une application GUI Windows normale (faite à l'aide de l'API, pas de MFC) et que je déplace ma souris sur et éteindre l'application et les styles change de souris (comme lorsque vous le déplacez sur la frontière, cela passe à un redimensionnement. Flèche, etc.) Mais parfois, il "colle" dans ce style, de sorte que je puisse déplacer la souris autour et il restera dans une flèche de redimensionnement ou autre, même après sa sortie de la fenêtre. Il se fixe si je le déplace sur un autre contrôle.

C'est juste un inconvénient, mais cela semble peu professionnel et je voudrais le réparer. Comment puis-je le faire où il reste à jour tout le temps?


0 commentaires

3 Réponses :


14
votes

Définissez une poignée de curseur valide lorsque vous enregistrez la classe de votre fenêtre. Voir wndclasseex :: hcursor . Utilisez loadcursor pour charger un curseur valide. Comme, xxx


0 commentaires

8
votes

La réponse de Tenfour est correcte. Voici un peu plus de fond.

Lorsque la souris se déplace dans une fenêtre, elle n'est pas capturée, la fenêtre obtiendra un message wm_setcursor . Le nom du message peut être un peu déroutant. Il s'agit essentiellement de la possibilité de définir le curseur, pas une instruction pour définir le curseur.

Une fenêtre peut gérer ce message en appelant setcursor et retourner.

Une fenêtre peut également punter en passant le message à DEFWINDOWPROC pour obtenir le comportement par défaut. Le comportement par défaut consiste à examiner le champ hcursor dans le wndclass pour la fenêtre. C'est pourquoi la réponse de Tenfour fonctionne.

(C'est en fait un peu plus compliqué que cela, puisque le defwindowProc donne d'abord la fenêtre mère une chance d'intervenir.)

Si vous voulez faire quelque chose de dynamique, comme choisissez un curseur en fonction de la variable de l'état, vous devez disposer de gérer le wm_setcursor de sorte qu'il appelle setcursor avec tout ce que Le curseur est approprié, puis renvoie vrai .

voir setcursor pour plus de détails.


0 commentaires