Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1774 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Attacher une image a l'aide de SendMessage(BM_SETIMAGE... sous MFC

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Attacher une image a l'aide de SendMessage(BM_SETIMAGE... sous MFC

n°1644317
Profil sup​primé
Posté le 17-11-2007 à 01:55:54  answer
 

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:
 

Code :
  1. PUSHBUTTON      "3",IDC_BUTTON3,31,50,17,17,BS_BITMAP


 
 
apres, j'ai charge mon fichier bitmap: "Clic droit, add ressource, bitmap..."
Dans mon fichier resource.h, j'ai donc une ligne inseree automatiquement:  

Code :
  1. #define IDB_BITMAP3                     140


 
 
Maintenant j'essaye d'attacher les deux a l'aide d'un sendmessage:
 

Code :
  1. CWnd* pMyWindow;
  2. pMyWindow->GetDlgItem(IDC_BUTTON3);
  3. pMyWindow->SendMessage(BM_SETIMAGE, IMAGE_BITMAP, IDB_BITMAP3);


 
mais quand je lance ma fenetre, le bouton apparait vide.
Qu est ce que j ai oublie?
 
 
PS:
Mes includes sont:

Code :
  1. #include <atlwin.h>
  2. ...
  3. "


 

mood
Publicité
Posté le 17-11-2007 à 01:55:54  profilanswer
 

n°1644540
Profil sup​primé
Posté le 17-11-2007 à 19:46:44  answer
 

up?
 
qqun a t il une idee?

n°1644549
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2007 à 20:08:01  profilanswer
 

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.

n°1644554
Profil sup​primé
Posté le 17-11-2007 à 21:26:30  answer
 

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

n°1644576
Trap D
Posté le 17-11-2007 à 23:34:29  profilanswer
 

A première vue ce ne serait pas plutôt :
 
pMyButton = pMyWindow->GetDlgItem(IDC_BUTTON3);
pMyButton->SendMessage(BM_SETIMAGE, IMAGE_BITMAP, IDB_BITMAP3);

n°1644577
Profil sup​primé
Posté le 17-11-2007 à 23:57:45  answer
 

Tu declares pMyButton comment?
En utilisant Cwnd* ca ne fonctionne pas... :S

n°1644592
Trap D
Posté le 18-11-2007 à 08:34:40  profilanswer
 

Ça fait longtemps que je n'ai plus fait de MFC. Tu pourrais montrer le bout de code qui ne fonctionne pas.

n°1644615
Profil sup​primé
Posté le 18-11-2007 à 10:41:28  answer
 

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

n°1644621
Trap D
Posté le 18-11-2007 à 10:49:12  profilanswer
 

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).


Message édité par Trap D le 18-11-2007 à 10:50:13
n°1644969
Profil sup​primé
Posté le 18-11-2007 à 21:40:15  answer
 

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.

mood
Publicité
Posté le 18-11-2007 à 21:40:15  profilanswer
 

n°1645475
Profil sup​primé
Posté le 19-11-2007 à 19:45:57  answer
 

j'ai essaye ca:
 
 

Code :
  1. pMyButton = pMyWindow->GetDlgItem(IDC_BUTTON3);
  2. HBITMAP hbmp = (HBITMAP)LoadImage(0, MAKEINTRESOURCE(IDB_BITMAP3), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
  3. pMyButton->SendMessage(BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp);


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


Message édité par Profil supprimé le 19-11-2007 à 19:46:45
n°1645482
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-11-2007 à 20:23:03  profilanswer
 

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 :
  1. HWND hMyButton = ::GetDlgItem(this->m_hWnd, IDC_BUTTON3);
  2. this->hbmp = ::LoadImage(this->hInst, MAKEINTRESOURCE(IDB_BITMAP3),IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
  3. ::SendMessage(hMyButton, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)(HANDLE)hbmp);


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


Message édité par Harkonnen le 19-11-2007 à 20:24:07

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Attacher une image a l'aide de SendMessage(BM_SETIMAGE... sous MFC

 

Sujets relatifs
Aide programmation java;: modeliser une blibliotheque urgent svpdimension et emplacement image
Besoin d'aide sur un conteneur pour arbre binaire[Résolu] Problème de chargement d'image
Besoin d'aide pour un truc tout simpledéfinir un polynome à l'aide de la fonction "atoi" avec des listes
Besoins d'aide pour programme lycéeAide pour débutant
Probleme avec File / Buffered Reader aide svp[Débutant][QT4] De l'aide pour un signal/slot
Plus de sujets relatifs à : Attacher une image a l'aide de SendMessage(BM_SETIMAGE... sous MFC


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR