Attacher une image a l'aide de SendMessage(BM_SETIMAGE... sous MFC - C++ - Programmation
Marsh Posté le 17-11-2007 à 20:08:01
t'as pas l'impression d'avoir oublié un truc ? tu récupères bien le HWND du bouton via ton GetDlgItem, mais ensuite, tu en fais quoi ? le 1er paramètre de ton SendMessage ne doit pas être BM_SETIMAGE, mais ce fameux HWND. et ensuite tu peux indiquer le message BM_SETIMAGE et tous les paramètres nécessaires.
Marsh Posté le 17-11-2007 à 21:26:30
Ok
Mais la fonction sendmessage que j utilise n accepte que trois parametres et le handle du boutton n est pas l un d eux.
C'est pour ca que j ai essaye en creeant le pointeur... pMyWindow->SendMessage
Je ne sais pas comment faire pour utiliser le sendmessage qui accepte les 4 arguments.
J ai essaye CWindow::Sendmessage mais ca me repond que CWindow n est pas une classe...
Marsh Posté le 17-11-2007 à 23:34:29
A première vue ce ne serait pas plutôt :
pMyButton = pMyWindow->GetDlgItem(IDC_BUTTON3);
pMyButton->SendMessage(BM_SETIMAGE, IMAGE_BITMAP, IDB_BITMAP3);
Marsh Posté le 17-11-2007 à 23:57:45
Tu declares pMyButton comment?
En utilisant Cwnd* ca ne fonctionne pas... :S
Marsh Posté le 18-11-2007 à 08:34:40
Ça fait longtemps que je n'ai plus fait de MFC. Tu pourrais montrer le bout de code qui ne fonctionne pas.
Marsh Posté le 18-11-2007 à 10:41:28
tout est dans mon premier message
ca compile correctement mais le bouton reste vide, pas d image
et en rajoutant
CWnd* pMyButton;
pMyButton = pMyWindow->GetDlgItem(IDC_BUTTON3);
pMyButton->SendMessage(BM_SETIMAGE, IMAGE_BITMAP, IDB_BITMAP3);
le resultat est le meme, le bouton reste vide
Marsh Posté le 18-11-2007 à 10:49:12
Le deuxième argument de BM_SETIMAGE est le handle de l'image, or tu envoie IDB_BITMAP3, je ne pense pas que ce soit le handle que tu dois récupérer à partir de
HBITMAP hbmp = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP3));
(ou un truc comme ça).
Marsh Posté le 18-11-2007 à 21:40:15
je vois ce que tu veux dire
Comme l'IDE de VS transformait direct en ressource je ne pensais pas avoir besoin de cette ligne.
Je vais essayer.
Marsh Posté le 19-11-2007 à 19:45:57
j'ai essaye ca:
Code :
|
et ca ne marche tjrs pas ....
Je pense que l'une des raisons est que la fonction SendMessage attend un LPARAM et pas un HBITMAP et ne peut pas convertir...
Donc je suis oblige de mettre (LPARAM) devant l argument pour que ca compile...
Marsh Posté le 19-11-2007 à 20:23:03
y'a un truc qui me chagrine là... le LR_LOADFROMFILE passé en dernier paramètre de LoadImage signifie que tu charges l'image à partir d'un fichier dont le chemin est passé dans le second paramètre, lequel paramètre contient dans ton code la macro MAKEINTRESOURCE, stipulant que le fichier est une ressource !
donc, soit tu remplaces le LR_LOADFROMFILE par LR_CREATEDIBSECTION, soit tu essaies le code suivant :
Code :
|
n'oublie pas de créer la variable membre hbmp si tu utilises ce code (de type HBITMAP).
la différence entre ce code et le tien est que je passe par les fonctions de Win32 au lieu d'utiliser l'encapsulation (pourrie) des MFC
Marsh Posté le 17-11-2007 à 01:55:54
Salut,
J'utilise Microsoft Visual Studio 2005.
J'ai une fenetre de dialogue cree a l'aide de l'IDE de Visual Studio. Cet IDE me donne un fichier .rc.
J'essaye de relooker cette fenetre en associant des bitmaps aux bouttons.
La premiere chose que j'ai faite est de changer l'argument "BITMAP" dans la fenetre de proprietes de mon boutton. (J'ai laisse Owner Draw sur False).
Ma ligne de declaration de boutton dans mon fichier .rc devient donc:
apres, j'ai charge mon fichier bitmap: "Clic droit, add ressource, bitmap..."
Dans mon fichier resource.h, j'ai donc une ligne inseree automatiquement:
Maintenant j'essaye d'attacher les deux a l'aide d'un sendmessage:
mais quand je lance ma fenetre, le bouton apparait vide.
Qu est ce que j ai oublie?
PS:
Mes includes sont: