Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

18 réponses
Avatar
victor.thuillier
Bonjour.

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

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

Merci pour vos r=E9ponses.

10 réponses

1 2
Avatar
Christian ASTOR
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));
Avatar
victor.thuillier
Ok merci beaucoup j'avais pas compris ça comme ça. :)
Avatar
victor.thuillier
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
Avatar
Christian ASTOR
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.
Avatar
victor.thuillier
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.
Avatar
Christian ASTOR
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...
Avatar
victor.thuillier
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 ?
Avatar
Christian ASTOR
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()
Avatar
victor.thuillier
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.
Avatar
mika
a écrit dans le message de news:


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 ...
1 2