Programme à icone perso - API Windows [Résolu]

Signaler
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
-
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
-
expliquez moi tout please

je veux changer l'icône visible sur le programme dans la navigation dans les dossiers

mais surtout la petite icone en haut à gauche de la fenêtre du programme .


<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

36 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Désolé, j'avais pas vu les liens avant.

Je viens de tester et ca marche chez moi après quelques modifications dans le code.

Voici les deux lignes à corriger:



wincl.hIcon = LoadIcon (hThisInstance, "IDI_ICON");

wincl.hIconSm = LoadIcon (hThisInstance, "IDI_ICON");



Si tu veux utiliser MAKEINTRESOURCE, tu dois commencer le fichier .rc par #include "ressource.h"

Personnellement, je préfère la premiere solution.

Je suppose que tu n'as pas oublié d'ajouter le fichier .rc à ton projet.

Ca doit marcher maintenant. Bonne chance.
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

oh génial ! enfin j'ai réussi !



alors j'ai laissé LoadIcon (NULL, IDI_APPLICATION); sans y toucher .



et j'ai fait



#include "h.h" (h.h est mon fichier h , je sais c'est un nom débile !)

dans WM_CREATE :

HICON icone= LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON));

SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM) icone);

dans h.h : tout simplement

#define IDI_ICON 100

dans rc.rc :

#include "h.h"

IDI_ICON ICON "Internet Explorer.ico"



enfin un truc qui marche !!



ciao ! +++

et merci beaucoup



<hr size ="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
SendMessage :

HWND : hWnd;

Msg : WM_SETICON;

WPARAM : ICON_BIG;

LPARAM : (LPARAM)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));


void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Mais bon

Dans l'explorateur, c'est surtout grâce à l'icône par défaut dans les ressources...

void Aurevoir( void ); //Bonne journée
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

râââ ! ça marche pour la grosse icône dans le dossier mais j'ai beau à
mettre SMALL à la place de BIG ça ne changera pas la p'tite icone au
haut à gauche de la fenêtre ...



sinon quand on fait alt+tab là la grosse icone du programme c'est par
défaut (sans changement) . tu vois d'où je parle ? comment on fait pour
là changer là ? (simple curiosité)

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

y doit bien y'a avoir un moyen ... tout les programmes on leurs icones perso !

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Essai avec SetClassLong(hWnd, GCL_HICON, (LONG)LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON)));
void Aurevoir( void ); //Bonne journée
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,

Il faut d'abord s'assurer que l'icone est bien chargée avant d'essayer
de la mettre sur la barre de titre de la fenêtre. Voici comment
procéder:

HICON icone=LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON));

if (!icone) MessageBox(0,"Icone Non Chargée!",0,0);

SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)icone);

La valeur de retour de LoadIcon doit être non nulle. J'ai mis
GetModuleHandle(0) comme premier paramètre de LoadIcon pour que le
HINSTANCE soit correct. LoadIcon refuse de fonctionner
correctement quand le premier paramètre est mal initialisé (hInstance).

Voila, je pense que ça devrait marcher comme ça.
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

Avec

SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)IDI_ICON);

j'obtiens ça : IMAGE



SetClassLong(hWnd,GCL_HICON,(LONG)LoadIcon(NULL,MAKEINTRESOURCE(IDI_ICON)));

ne change rien .



j'ai essayé de toucher à

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

et de mettre

wincl.hIcon = LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON));

ça ne change rien non plus



après je fais pareil avec wincl.hIconSm

et là à la place de l'îcone j'ai ...



CODE fichier cpp

CODE fichier h : #define IDI_ICON 101

CODE fichier rc : IDI_ICON ICON "LunaXP Settings - Control Panel.ico"

ICONE ici
<hr size ="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

ah mince j'ai sauté une ligne en lisant et HICON icone=LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON)); j'l'ai pas pris en compte , donc..



l'icone n'est pas chargée finalement ...



HICON icone=LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON));

if (!icone) MessageBox(0,"Icone Non Chargée!",0,0);

SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)icone);



ça va plus là ...

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Fait un #define IDI_ICON -1 pour voir

void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ta mis le bon chemin de ton icône ???????? :s
void Aurevoir( void ); //Bonne journée
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

qu'est ce que tu veux dire par "

Fait un #define IDI_ICON -1"

et non je n'avait pas mis le chemin de l'icone juste le nom + extension
puisque c'est dans le même dossier ... mais même avec ça marche pas ...

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Bé logiquement un IDI_ICON -1 ça signifie que c'est par
défaut ( si j'dis pas de connerie lol ) mais bon, apparemment c'est un
souci de chargement... et ça provient du fait que DevC++ et les
ressources, c'est po facile...

Vire le des ressources et essai de le charger directement depuis le dossier

void Aurevoir( void ); //Bonne journée
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

" Vire le des ressources et essai de le charger directement depuis le dossier"

soit plus précis quand tu parle please



erf

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
bé au lieu de faire un MAKEINTRESOURCE(IDI_ICON) tu fais un LoadIcon( hInst, "Icone.ico");



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/icons/iconreference/iconfunctions/loadicon.asp

void Aurevoir( void ); //Bonne journée
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(hInst,"LunaXP Settings - Control Panel.ico"));

ça compile mais ne change rien !!!!!


je pense qu'il faut remonter à la source , comment on fait exactement pour inclure dans les ressources une icone .

après seulement faudra voir .

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Il faut écrire:

HICON icone=LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON));

Tu peux remplacer GetModuleHandle() par hInst si celui-ci est correctement initialisé (non nul)

Tu peux le vérifier en ajoutant le test suivant:

if (!hInst) MessageBox (0,"hInst non initialisé!",0,0):
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

fichier h :

#define
IDI_ICON
100



fichier rc :

IDI_ICON
ICON
"LunaXP Settings - Control Panel.ico"

ou

IDI_ICON
ICON
"C:\Documents and Settings\Dorian\Mes documents\Dorian\C++\API
Windows\icone perso\LunaXP Settings - Control Panel.ico"




est ce que c'est bon ça déja ?



après j'ai mis #include "ressource.h" dans le ficher cpp


<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Oui ça me semble bon.

As-tu mis GetModuleHandle(0) comme premier paramètre de LoadIcon ?

Sinon, as-tu vérifié que hIsnt est bien initialisé?

Je pense que c'est de là que vient ton problème.