julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007
-
26 mai 2007 à 17:55
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 2014
-
27 mai 2007 à 16:35
Bonjour, mon code est le suivant :
# // création DC et bitmap en mémoire
# HDC hMemDC = CreateCompatibleDC(hdc);
# HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, 100, 100);
# HBITMAP hOldMemBmp = (HBITMAP) SelectObject(hMemDC, hMemBmp);
#
# // effacement du fond en blanc
# HBRUSH hBrush = CreateSolidBrush(RGB(0xFF, 0xFF, 0xFF));
# FillRect(hMemDC, &rcClient, hBrush);
# DeleteObject(hBrush);
#
# // recopie du DC en mémoire, libération des ressources
# BitBlt(hdc, 0, 0, sizeDst.cx, sizeDst.cy, hMemDC, 0, 0, SRCCOPY);
# SelectObject(hMemDC, hOldMemBmp);
# DeleteObject(hMemBmp);
# DeleteDC(hMemDC);
Lorsque je met la ligne DeleteObject(hMemBmp); avant le BitBlt, je m'attends à ce que rien ne s'affiche comme prévu, seulement ca marche correctement (en apparance, j'imagine).
Je me dis alors que hMemBmp ne doit pas trop etre utile, alors j'enleve les lignes associés à ce HBITMAP, mais là s'affiche un rectangle noir (pas ce que je veux).
Je met demande alors, quel est le rôle de hMemBmp (donc de CreateCompatibleBitmap(...) ) ?
Merci
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007 26 mai 2007 à 18:12
oui je sais bien, mais quel utilité ici ? Pourquoi je ne peux pas directement dessiner sur hMemDC ? Et surtout pourquoi je peux afficher le contenu de hMemDC aprés avoir supprimé hMemBmp ?
pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009 26 mai 2007 à 18:29
HDC est un "handle device contexte"
Tu ne peut dessiner sur un device context VIDE.
Il doit absolument etre associé avec une image sur laquelle dessiner.
On peut comparer HDC a une table...
et CreateCompatible a la feuille elle meme...
Tu ne peu dessiner sur la table...
place la feuille sur la table , et le tour est joué!
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007 26 mai 2007 à 18:36
Ok merci, je ne savais pas. Ceci étant dit ca n'explique pas pk je peux dessiner sur hMemDC aprés avoir supprimé hMemBmp ^_^ A moins que SelectObject(...) crée une copie de l'objet (hMemBmp en l'occurrence), et que l'original devienne alors inutile ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007 26 mai 2007 à 18:40
Si je continue avec ta comparaison, je peux reformuler ma question ainsi ^^ :
pourquoi est ce que je peux dessiner sur le DC aprés avoir enlever la feuille ?
pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009 26 mai 2007 à 18:47
Tu ne peut pas utiliser DeleteObject() tant que le bitmap est associé avec le device contexte .(tant ke ta feuille est sur la table).
Tu doit aussi savoir que quand tu delete un BRUSH ou un PEN , le bitmap associé n'Est pas deleté, il doit l'etre indépendement .
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 27 mai 2007 à 16:35
Salut,
J'ai déjà remarqué ce genre de comportement avec les régions. J'ai ensuite appris que Windows travaille avec une copie en mémoire de la région supprimée. Il est probable que ce soit pareil avec les autres objets.