[API Win32] Charger une icône présente dans les ressources

Le
victor.thuillier
Bonjour.

J'aimerais bien savoir comment modifier l'attribut hIcon de la
structure WNDCLASS de la classe de ma fenêtre pour qu'il utilise
l'icône que j'ai mise en ressource (j'ai créé un fichier ressources.r=
c
et j'y ai placé la ligne suivante : 1 ICON "icone.ico").

Ma question c'est : qu'est-ce que je dois mettre dans le deuxième
argument de la fonction LoadIcon ? Le premier, c'est mon programme,
mais le second, je comprends pas il identifie l'icône, oui, mais
comment ?

Merci pour vos réponses.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #19084451
On 8 avr, 22:51, wrote:
Bonjour.

J'aimerais bien savoir comment modifier l'attribut hIcon de la
structure WNDCLASS de la classe de ma fenêtre pour qu'il utilise
l'icône que j'ai mise en ressource (j'ai créé un fichier ressources .rc
et j'y ai placé la ligne suivante : 1 ICON "icone.ico").

Ma question c'est : qu'est-ce que je dois mettre dans le deuxième
argument de la fonction LoadIcon ? Le premier, c'est mon programme,
mais le second, je comprends pas ... il identifie l'icône, oui, mais
comment ?



C'est juste l'identifiant de la ressource dans l'exe, qu'on peut
vérifier avec des tools genre ResHacker
Par ex,
LoadIcon(hInstance, MAKEINTRESOURCE(1));
victor.thuillier
Le #19084701
Ok merci beaucoup j'avais pas compris ça comme ça. :)
victor.thuillier
Le #19084691
Et au fait, pendant que j'y suis (je ne vais pas recréer un sujet pour
ça), comment est-ce qu'on peut lancer un programme ? Je ferais bien un
system("start monprog.exe") mais une fenêtre de commandes DOS s'ouvre
et c'est moche. :p
Christian ASTOR
Le #19084861
On 9 avr, 12:21, wrote:
Et au fait, pendant que j'y suis (je ne vais pas recréer un sujet pour
ça), comment est-ce qu'on peut lancer un programme ? Je ferais bien un system("start monprog.exe") mais une fenêtre de commandes DOS s'ouvre et c'est moche. :p



En effet, il ne faut jamais utiliser system()
Avec ShellExecute() ou CreateProcess() pour les 2 fonctions les plus
connues.
victor.thuillier
Le #19085021
Le programme que je veux lancer ne s'ouvre pas. Je fais comme ça :

ShellExecute (pparams->hwnd, "open", pparams->executable, "", pparams-
directory, SW_SHOWNORMAL);



L'attribut hwnd est un pointeur vers ma fenêtre, l'attribut executable
est le chemin de l'exécutable (par exemple C:dirsub dirx.exe) et
l'attribut directory est le dossier de l'exécutable (par exemple C:dir
sub dir).

Il y a quelque chose que j'ai mal compris ? Je précise que le
programme n'est pas une console mais bien une application GUI.
Christian ASTOR
Le #19085841
On 9 avr, 13:07, wrote:
Le programme que je veux lancer ne s'ouvre pas. Je fais comme ça :
ShellExecute (pparams->hwnd, "open", pparams->executable, "", pparams->di rectory, SW_SHOWNORMAL);
L'attribut hwnd est un pointeur vers ma fenêtre, l'attribut executable
est le chemin de l'exécutable (par exemple C:dirsub dirx.exe) et
l'attribut directory est le dossier de l'exécutable (par exemple C:dir
sub dir).

Il y a quelque chose que j'ai mal compris ? Je précise que le
programme n'est pas une console mais bien une application GUI.



Non, les paramètres sont bons (en considérant que les anti-slashes
soient bien doublés "\")
Il faut voir le code retour...
victor.thuillier
Le #19086681
Ah c'est bon maintenant ça fonctionne ... bizarre ...

Autre question, à un moment je fais une boucle infinie qui est placée
dans un thread, donc normalement, mon programme ne devrait pas prendre
95% de l'UC de mon ordinateur, si ?

En fait cette boucle c'est : while(!maVariable) où maVariable est
globale et est mise à TRUE quand l'utilisateur presse une touche. Une
fois qu'il l'a pressée, le thread continue.

Est-ce normal qu'il prenne autant de place ?
Christian ASTOR
Le #19087461
wrote:

Ah c'est bon maintenant ça fonctionne ... bizarre ...

Autre question, à un moment je fais une boucle infinie qui est placée
dans un thread, donc normalement, mon programme ne devrait pas prendre
95% de l'UC de mon ordinateur, si ?

En fait cette boucle c'est : while(!maVariable) où maVariable est
globale et est mise à TRUE quand l'utilisateur presse une touche. Une
fois qu'il l'a pressée, le thread continue.

Est-ce normal qu'il prenne autant de place ?



Si c'est fait comme cela, oui, mais il faut éviter.
Soit ajouter Sleep(), soit utiliser WaitForSingleObject()
victor.thuillier
Le #19094021
Ok, merci beaucoup. :)

ShellExecute met beaucoup de temps à exécuter mon programme (genre une
dizaine de secondes) donc je place ShellExecute dans un thread.

Cependant je trouve ça bizarre ... il n'y a pas moyen de lancer le
programme plus rapidement ? Est-ce que ça va plus vite avec
CreateProcess() ?

Merci d'avance.
mika
Le #19099931


ShellExecute met beaucoup de temps à exécuter mon programme (genre une
dizaine de secondes) donc je place ShellExecute dans un thread.



Pas normal que ça mette plus longtemps que si tu double-cliques dessus.
Essaie avec le notepad pour voir si c'est aussi long ...
Publicité
Poster une réponse
Anonyme