Pb d'image sur un bouton (WIN32 et API)

skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 19 avril 2005 à 14:41
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 19 avril 2005 à 21:11
Bonjour à tous,



je sais qu'il existe déjà des posts sur ce sujet. D'ailleurs mon code s'en inspire.

Mais voila, malgrè la lecture de ceux ci je n'arrive toujours pas à faire afficher une image (bitmap) sur mon bouton

J'ai essayé plusieurs méthodes mais aucune ne semble fonctionner.

En fait SendMessage ou SendDlgItemMessage renvoi toujours NULL. Du coup je n'arrive pas à avoir mon image.

La fonction LoadBitmap semble retourner un handle correct dou coup je bloque complètement



Je travail avec Dev-C++ 4.9.9.2 sous Windows 2000 Pro sp4.

Mon fichier ressource à était crée via ResED



J'ai posté les 3 trois fichiers de mon projet de test.



Si quelqu'un pouvais me dépanner, se serait vraiment cool.



Merci d'avance pour votre aide.





test_dlg.h :

-------------



#define IDD_DLG_MAIN 1000

#define IDC_BTN_MYBITMAP 1001

#define MY_BITMAP 10001



/*************************************************************************/



test_dlg.rc :

-------------



#define IDD_DLG_MAIN 1000

#define IDC_BTN_MYBITMAP 1001

#define MY_BITMAP 10001

IDD_DLG_MAIN DIALOGEX 6,5,200,121

CAPTION "Test Bitmap"

FONT 8,"MS Sans Serif"

STYLE 0x10CA0800

EXSTYLE 0x00000000

BEGIN

CONTROL "",IDC_BTN_MYBITMAP,"Button",0x50018000,28,5,130,105,0x00000000

END

MY_BITMAP BITMAP DISCARDABLE "MyBitmap.bmp"



/*************************************************************************/



main.cpp :

-------------



#include <windows.h>

#include <stdio.h>

#include "test_dlg.h"



// prototype for the dialog box function

static BOOL CALLBACK DialogFunc(HWND, UINT, WPARAM, LPARAM);



// Globals variables

HINSTANCE g_hInst;

HWND g_hDlg;

char s[255];



// Main function

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{

g_hInst = hThisInstance;

DialogBoxParam(hThisInstance, MAKEINTRESOURCE(IDD_DLG_MAIN), NULL, (DLGPROC) DialogFunc, 0);

ExitProcess(0);

}



// Initialize the main dialog box

int InitializeApp(HWND hDlg,WPARAM wParam, LPARAM lParam)

{

g_hDlg = hDlg;

long res;



HWND g_Bt;

g_Bt = GetDlgItem(hDlg, IDC_BTN_MYBITMAP);

wsprintf(s, "g_Bt : %d", g_Bt); MessageBox(0,s,0,0);



HBITMAP g_Img;

g_Img = LoadBitmap(g_hInst, MAKEINTRESOURCE(MY_BITMAP));

wsprintf(s, "g_Img : %lu", g_Img); MessageBox(0,s,0,0);



res = SendDlgItemMessage(hDlg, IDC_BTN_MYBITMAP, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g_Img);

// res = SendMessage(g_Bt, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g_Img);

wsprintf(s, "res : %lu", res); MessageBox(0,s,0,0);



return TRUE;

}



// Callback function for the main dialog box

BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg) {

case WM_INITDIALOG:

InitializeApp(hwndDlg,wParam,lParam);

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, FALSE);

return TRUE;

}

return FALSE;

}

2 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
19 avril 2005 à 19:04
Salut,

Tu as oublié d'ajouter le style BS_BITMAP à ton bouton. Dans ton fichier
test_dlg.rc tu remplaces 0x50018000 par 0x50018080 . Voila, ça devrait marcher maintenant car le reste de ton code est ok.
0
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007
19 avril 2005 à 21:11
Salut racpp et merci beaucoup car en effet ça fonctionne maintenant



J'ai cherché comme un dingue et en fait c'était tout simple. J'avais essayé la commande ci-dessous mais ça n'avait rien changé.

SendDlgItemMessage(hDlg, IDC_BTN_MYBITMAP, BM_SETSTYLE, (WPARAM)BS_BITMAP, (LPARAM)TRUE);



Ta solution est bien plus simple.



A+
0
Rejoignez-nous