Pb affichage icone-bouton (pk sa marche pas ??)

Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 18 déc. 2004 à 12:06
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 19 déc. 2004 à 09:28
Bonjour all! :)

Me revoila....avec un autre souci....j'essaie en vain d'afficher une icone sur un bouton...je pense connaitre tout le necessaire pour faire ça mais quand j'execute le programme, ça ne marche toujours pas (caprice du compilo ??)....voici mon bout de code :

/* fichier de ressources */

// instructions

FLOP ICON PURE LOADONCALL DISCARDABLE "floppy.ico"

// instructions

/* fichier main.cpp */

HICON hFloppy;
HWND hButton;

// instructions

hButton = CreateWindowEx(0, "BUTTON", "", BS_ICON | BS_BITMAP | WS_CHILD | WS_VISIBLE,
450, 40, 45, 45, hDlg, (HMENU) IDC_COLOR, hInst, NULL);
        
hFloppy = LoadIcon(hInst, "FLOP");
SendMessage(hButton, STM_SETIMAGE, IMAGE_ICON, (long) hFloppy);


voila, ça compile..mais le bouton qui apparait est vide....sans image....:(

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))

8 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
18 déc. 2004 à 14:00
javais eu plus ou moins le meme probleme. essaie de mettre une bitmap a la place de ton icone (javais resolu comme ca, et jai aps reussi a avoir dexplication sur le pk du comment...)
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 déc. 2004 à 14:21
Salut,
Puisque tu utilises un identificateur pour ta ressource, il faut faire comme ceci:
hFloppy = LoadIcon(hInst, MAKEINTRESOURCE(FLOP));

Il faut aussi être sûr que hInst est correctement initialisé et contient bien le HINSTANCE de ton prog. Tu peux simplement le remplacer par GetModuleHandle(0):
hFloppy = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(FLOP));

Voilà, ça doit marcher comme ça.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
18 déc. 2004 à 15:06
Merci racpp mais en fait, cela n'a rien changé....vais passer par les bitmaps...comme le dit leprov...c'est comme ça que j'avais déja fait mais je ne call pas nan plu pk sa marche pas...enfin...les mystères de la prog' .... sinan, tu pourrais mexpliquer pk faut-il utiliser MAKEINTRESOURCE plutot ke le nom entre guillements ? pour moi, c la mme chose...merci d'avance! ++

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
18 déc. 2004 à 15:21
c'est bon, j'ai trouvé...c'est tout con...mais j'ai pas callé pourquoi...en quoi ça changeait qqch..voila le code pour les interressés..suffit juste de transfo un SEUL parametre....(2 lettres!!) :

// code original qui marche pas
SendMessage(hButton, STM_SETIMAGE, IMAGE_ICON, (long)

//code qui marche :-))

SendMessage(hButton, BM_SETIMAGE, IMAGE_ICON, (long) hFloppy);


Si qqun a une explication par contre, je suis preneur :)
++

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
18 déc. 2004 à 21:09
Salut,
STM: static message
BM: button message
si tu envoies un message STM_* a un bouton il ne peut pas le comprendre.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
18 déc. 2004 à 21:13
ah oki, ben merci aardman pr l'info...kler que quand on sait ça...j'ai l'air un peu niais ^^

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
19 déc. 2004 à 02:37
Gendal67 > Désolé pour ce retard car je n'étais pas en ligne.
" tu pourrais mexpliquer pk faut-il utiliser MAKEINTRESOURCE plutot ke le nom entre guillements ? pour moi, c la mme chose..."
Non ce n'est pas la même chose. Tout dépend de la déclaration de la ressource dans le fichier .rc. Voici les deux cas:
1- La ressource est déclarée par un nom comme ceci pour ton exemple:
FLOP ICON PURE LOADONCALL DISCARDABLE "floppy.ico"

Dans ce cas tu peux utiliser "FLOP" comme 2eme paramètre de la fonction LoadBitmap().
2- La ressource est déclarée par un identificateur défini auparavant comme ceci:
#define FLOP 101
FLOP ICON PURE LOADONCALL DISCARDABLE "floppy.ico"

La 1ere ligne peut être remplacée (comme dans Visual C++ 6) par:
#include "resource.h"

C'est ce fichier qui contient la définition de FLOP. Puisque LoadBitmap() ne reconnait que le nom de la ressource, MAKEINTRESOURCE() lui permet d'accepter l'idetificateur aussi. Le nom étant une chaine de caractères et l'identificateur un integer.
Pour savoir lequel des 2 cas est le tien, regarde bien ton fichier .rc.

A propos du mystère, je ne vois pas pourquoi un bouton accepterait un bitmap et refuserait un icone. Comme ça marche avec le premier ça doit marcher avec le deuxième. En tous cas ça a toujours marché pour moi.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
19 déc. 2004 à 09:28
Ah oki!!!! Ben un grand merci pour ta réponse! ça devient +clair à présent! :-)

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
0
Rejoignez-nous