Probleme, objet GDI monte constament ds le gestionnaire de tache apres chaque On

gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 14 juin 2005 à 20:51
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 31 déc. 2005 à 00:29
j'affiche une bmp issu des ressource comme ci-dessous.
le pb est que dans le gestionnaire de tache, je vois le nombre d'objet GDI monter constament a chaque OnPaint() de la fenetre, et vu que j'affiche bcp de bmp, mon appli bloque a peu prés de 12 rafraichissements (ce qui est trés peu !!!!!!)

CDC* pDC = GetDC();
CDC* pMemDC;


pMemDC = new CDC;
pMemDC->CreateCompatibleDC(pDC);

pMemDC->SelectObject(bitmap_absnm);
pDC->BitBlt(101+(x*54),53+(y*14),7,7,pMemDC,0,0,SRCAND);
pMemDC->SelectObject(bitmap_absnm);
pDC->BitBlt(101+(x*54),53+(y*14),7,7,pMemDC,0,0,SRCAND);
pMemDC->SelectObject(bitmap_absnm);
pDC->BitBlt(101+(x*54),53+(y*14),7,7,pMemDC,0,0,SRCAND);
....
....
delete pMemDC;

ps: je delete une seule fois a la fin mais meme si je delete aprés chaque BitBlt ca change rien

gege
A voir également:

11 réponses

gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
14 juin 2005 à 20:53
bien sur mon code du premier message est un exemple (je ne redessine pas plusieurs fois le bmp au meme endroit : faute au copié collé)

gege
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 juin 2005 à 20:55
Il faut libérer le DC: pDC->ReleaseDC();

Tu est sur que delete pMemDC est suffisant? (je sais pas trop, est ce
qu'un DeleteObject est fait dans le destructeur? Je pense que oui mais
à vérifier).
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
14 juin 2005 à 21:04
sauf que chez moi
ReleaseDC(); n'est pas membre de CDC

gege
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 juin 2005 à 21:09
ReleaseDC(pDC);

Pardon, je connais mal les MFC
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
14 juin 2005 à 21:22
non, c'est moi, j'ai pas precisé MFC, dsl

gege
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
14 juin 2005 à 21:48
j'ai trouvé:

il fallait faire
DeleteObject();
apres un
LoadBitmap(IDB....);

enfin, je pense, parce que je n'ai plus de pb de gdi
gege
0
cs_Denis007 Messages postés 22 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 7 octobre 2012
30 déc. 2005 à 03:38
Pour que ce code soit correct il faudrais aussi appeller la fonction releaseDC,
en effet quand vous demandez l'utilisation du DisplayContext de window et
même si, en même temps vous déclarer la variable, ceci vous demande aussi,
d'après les normes, car ce context d'affichage en le plus goumand en ressource,
de libérer ce handle qui augmente régulièrement...

Les méandres de windows sont ainsi définie...

ps : pouvez vous m'indiquer quel programme observe ainsi les handes du GDI.
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
30 déc. 2005 à 13:52
le gestionnaire de taches (processus)

gege
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 déc. 2005 à 13:55
Pour une bitmap, les fuites seront si énormes qu'on les voit à la quantité de mémoire vive utilisée
0
cs_Denis007 Messages postés 22 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 7 octobre 2012
30 déc. 2005 à 21:54
Bonjour Gégé, je n'est pas remarqué d'information particulière dans le gestionnaire de tache a propos des objets du gdi, il n'affiche que la mémoire du processus, peut-être en avait vous déduit ceci de cela ?
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
31 déc. 2005 à 00:29
menu "Affichage" -> "selectionner des colonnes" -> objet GDI

CQFD

gege
0
Rejoignez-nous