Supprimer l'image (icone)

Signaler
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour !

Je charge une image (icone) de cette maniere :

LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_SYS));

hDc=GetDC(hwnd);

DrawState(hDc,NULL,NULL,(LPARAM)hIco,0,273,16,0,0,DST_ICON);

DeleteObject(hDc);

ReleaseDC(hwnd,hDc);

Or, je souhaite affichée une autre image (icone), au même
emplacement sur ma fenêtre et donc ... les deux images se chevauchent ...

Comment dois-je faire pour "supprimer" l'image précédente ?

Merci !

6 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
y a pas de prob, c'est normal si tu ne dessines pas dans WM_PAINT. Passe tout cela dans cet event.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Pour liberer c'est ReleaseDC(hwnd,hDc);

DeleteObject(hDc); // NON !!!

InvalidateRect(hwnd, 0, 1);
avant de redessiner.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005

J'ai fais la modif mais :

HICON hIco;
HDC hDc;
InvalidateRect(hwnd, 0, 1);
if(idxp==0) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_MAT));
if(idxp==1) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_LOG));
if(idxp==2) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_SYS));
hDc=GetDC(hwnd);
DrawState(hDc,NULL,NULL,(LPARAM)hIco,0,273,16,0,0,DST_ICON);
// DeleteObject(hDc);
ReleaseDC(hwnd,hDc);

Maintenant, mon icone ne s'affiche plus ...

Me suis-je planter dans l'insertion du code ?

Re-Merci
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
T'es certain que idxp compris entre 0 et 2 ?

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005

Oui.

HICON hIco;
HDC hDc;
InvalidateRect(hwnd, 0, 1);
if(idxp==0) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_MAT));
if(idxp==1) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_LOG));
if(idxp==2) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_SYS));
hDc=GetDC(hwnd);
DrawState(hDc,NULL,NULL,(LPARAM)hIco,0,273,16,0,0,DST_ICON);
// DeleteObject(hDc);
ReleaseDC(hwnd,hDc);

Comme ca, aucune icone.

HICON hIco;
HDC hDc;
// InvalidateRect(hwnd, 0, 1);
if(idxp==0) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_MAT));
if(idxp==1) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_LOG));
if(idxp==2) hIco=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_SYS));
hDc=GetDC(hwnd);
DrawState(hDc,NULL,NULL,(LPARAM)hIco,0,273,16,0,0,DST_ICON);
// DeleteObject(hDc);
ReleaseDC(hwnd,hDc);

comme ca, ca marche mais les icones se chevauchent

Merci encore !
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005

InvalidateRect(hwnd, 0, 1);
mais il manquait
UpdateWindow(hwnd); a la suite !

La ca marche.

Mais j'ai un autre problème :

Mon image (icone) disparait quand une fenêtre passe dessus ou si je déplace la fenêtre qui contient l'image "en dehors" de l'écran ...

C quoi le prob ? svp

Merci !