[MFC] fonction FillSolidRect [?]

Résolu
nicolos Messages postés 11 Date d'inscription mardi 27 janvier 2004 Statut Membre Dernière intervention 7 décembre 2004 - 3 sept. 2004 à 09:25
cs_kelly Messages postés 55 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 9 septembre 2004 - 3 sept. 2004 à 12:04
Bonjour tout le monde

Je voudrais savoir comment la fonction FillSolidRect de MFC procède afin de dessiner un rectangle aussi rapidement (sans voir l'enchaînenement des pixels s'afficher un par un) ?
La question est aussi valable pour la fonction BitBlt, etc...

Lorsque je fais mon rectangle avec SetPixel dans deux boucles x et y, c'est long, trop long ! :sleepy)

Aussi, quelle est la différence entre les classes CDC, CClientDC et CPaintDC ?

:) Merci d'avance pour la réponse

2 réponses

cs_kelly Messages postés 55 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 9 septembre 2004
3 sept. 2004 à 12:04
Les fonctions du gdi telles que celles que tu as citées (ce sont des fonctions de la bibliotheque gdi avant d'etre encapsulées dans les mfc) sont très optimisées en arrière-plan, et cela malgré leur lourdeur apparente (emploi de brushes et de pens évolués).

Sans en avoir la preuve formelle, je pense que le coeur du gdi repose sur du code machine très optimisé (écrit en assembleur et profitant du mmx ou du simd quand cela est possible) et probablement exploitant certaines fonctions 2D des cartes graphiques, capables par exemple de dessiner en hardware des régions et meme du texte.

Sans parler de la procédure de verrouillage/déverrouillage des DC et de l'accès aux pilotes de la carte graphique au début et a la fin de chaque opération graphique, ce qui fait que ta routine qui fait du pixel par pixel passe son temps à attendre des réactions des couches inférieures du sous système vidéo.
3
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
3 sept. 2004 à 09:38
CPaintDC : MFC :initialise l'affichage avec fin dans son destructeur

CClientDC : MFC sans fin d'affichage

CDC : Win 32 : quasi identique CClientDC

Magic Nono: l'informagicien! 8-)
0
Rejoignez-nous