[API Win32] Charger une icône présente dans les ressources
18 réponses
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 ?
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));
On 8 avr, 22:51, victor.thuill...@hotmail.fr 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));
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
Ok merci beaucoup j'avais pas compris ça comme ça. :)
Ok merci beaucoup j'avais pas compris ça comme ça. :)
Ok merci beaucoup j'avais pas compris ça comme ça. :)
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
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
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
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.
On 9 avr, 12:21, victor.thuill...@hotmail.fr 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.
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 programme que je veux lancer ne s'ouvre pas. Je fais comme ça :
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.
Le programme que je veux lancer ne s'ouvre pas. Je fais comme ça :
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.
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
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...
On 9 avr, 13:07, victor.thuill...@hotmail.fr 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...
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
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 ?
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.
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
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@hotmail.fr 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()
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
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.
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() ?