Windows confidentiel Le cas de la disparition curseur

Raymond Chen

Vous avez peut-être remarqué que lorsque vous appuyez sur la touche PrtSc pour prendre une capture d'écran, le curseur clignote brièvement. Croyez-le ou non, en fait cela pour la même raison que l'écran de l'arrêt de Windows XP fade-out n'inclut pas windows translucide.

Ces fenêtres translucide, appelées fenêtres superposés, ne sont pas normalement incluses par la fonction BitBlt lors de la lecture pixels à partir de l'écran. Pour les obtenir, vous devez passer l'indicateur CAPTUREBLT. Lorsque vous faites, vous pouvez également remarquer que le pointeur de la souris clignote. Ainsi, pourquoi est que ?

Une fois était une fois, l'objet graphique uniquement qui flottante « au-dessus » le reste des objets de votre écran était le curseur de la souris. À l'origine, système de le pris en charge uniquement les curseurs de souris monochrome. Ces curseurs sont pris en charge dans les logiciels ou, si vous est-il arrivé à équipé d'une carte vidéo génial, en matériel.

Lorsque vous utilisez un curseur de prise en charge à la carte vidéo, GDI (Graphics Device Interface) offre la carte vidéo une image bitmap et un masque et indique, "OK, il s'agit le pointeur de la souris. Superposer cela à l'écran en fonction des coordonnées que je spécifie. » Lorsque l'utilisateur déplace la souris, le GDI envoie les coordonnées de carte vidéo mis à jour et la carte vidéo effectue le travail difficile de déplacer les pixels autour de l'écran.

D'autre part, lorsque vous utilisez un curseur logiciel pris en charge, puis le GDI est responsable de l'enregistrement les pixels sous le curseur avant le dessin dans le tampon de trame. La procédure fonctionne dans la manière suivante : lorsque l'utilisateur déplace la souris, le GDI manuellement restaure les pixels d'origine, enregistre tous les pixels sous nouvelle position le curseur et ensuite il dessine le curseur à cette nouvelle position.

Lorsqu'un curseur de matériel est utilisé, les pixels du curseur de la souris pas réellement n'existent dans le tampon de trame car le matériel est responsable pour l'exécution de la superposition. Par conséquent, la BitBlt fonction est en mesure en pixels copie uniquement à partir du tampon cadre sans craindre d'enlèvement des pixels entre le curseur de la souris par erreur depuis les pixels n'existent pas pour commencer avec dans le tampon de trame.

À l'inverse, si un curseur de logiciels est utilisé, puis le GDI devez supprimer le curseur de la souris à partir de l'écran avant d'effectuer un BitBlt à partir de l'écran si la zone copiée chevauche le curseur de la souris.

Lorsque curseurs sont présentes, matériel curseurs simplement n'est pas tout à fait couper la mustard depuis les curseurs de matériel n'est pas animer. Par conséquent, les curseurs sont implémentés dans logiciel.

OK, très. Mais ce qui cela a à faire avec CAPTUREBLT ? Blocage de, j'obtiens il.

Dans Windows 2000, le mécanisme de composition qui utilisé pour les curseurs de logiciel a été généralisé pour les applications peuvent également tirer parti de celui-ci. Ces pseudo-cursors finalement devenu appelés windows superposés. Comme les curseurs de logiciels windows superposés ne s'affichent lorsque vous effectuez un BitBlt à partir de l'écran depuis qu'ils n'existent pas réellement dans le sens habituel pas. Les pixels à partir du curseur et les fenêtres en couches sont réunis à l'écran au dernier moment.

Mais que se passe-t-il si vous souhaitez capturer les pixels d'une fenêtre superposée via BitBlt ? C'est l'endroit où le nouvel indicateur CAPTUREBLT entre en jeu. Cette capture les pixels une fois que le moteur de la composition a eu son dire. Étant donné que le code qui génère l'écran d'estompés l'arrêt de Windows XP ne transfère pas le CAPTUREBLT, fenêtres superposés ne s'affichent.

Que toujours ne semble pas pour expliquer pourquoi le curseur scintille, cependant. En fait, elle ne. Le pointeur de la souris est juste un autre objet de composition et est par conséquent être capturée par l'indicateur CAPTUREBLT. Pour éviter cela ne se produise pendant une capture d'écran, le moteur de composition a masquer le curseur, effectuez la CAPTUREBLT, puis re-show le curseur.

En exposant le moteur de composition de Windows 2000 aux applications, les curseurs ont perdu leur état spécial. Nous avons provenir complet circle. Il est désormais comme uniquement les bonnes anciens jours, en lorsque tout vous aviez était un tampon de trame et un curseur de logiciel.

De Raymond Chen Site Web, Old New Thing, et livre libellée identique (Addison-Wesley, 2007) gérer Windows l'historique, programmation Win32 et misreading titres de journal.