Bmp dans static

Signaler
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
bonjour

voila je veux mettre un bmp dans un static.
dans le fichier rc ya:
SniperImg BITMAP "C:/sniper.bmp"

et dans le main ya (en simplifie)

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Sniper's Launcher") ;
HWND hwnd ;MSG msg ;WNDCLASS wndclass ; wndclass.style CS_DBLCLKS;wndclass.lpfnWndProc WndProc ;wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) COLOR_BTNSHADOW;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))
{MessageBox (NULL, TEXT ("Ce programme fonctionne exclusivement sous Windows NT!"),szAppName, MB_ICONERROR) ;return 0 ;}

hwnd = CreateWindow (szAppName, TEXT ("Sniper's Launcher"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,460, 370, NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;

}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

HINSTANCE hInstance ;

switch (message)
{
case WM_CREATE :
HDC hdc;
HBITMAP hBitmap;
hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;

static HWND imghWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "STATIC", NULL, WS_VISIBLE|WS_CHILD|SS_BITMAP,
0, 0, 384, 128, hwnd, (HMENU)0, hInstance, NULL);

hBitmap = LoadBitmap (hInstance,"SniperImg") ;
SendMessage(imghWnd, BM_SETIMAGE ,IMAGE_BITMAP ,(long) hBitmap);

//ShowWindow(imghWnd, SW_SHOW);
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;

case WM_COMMAND:
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

et comme vous l'aurez subtilemet deviné, ca marche pas.
je précise que les dims du bmp ne st pas des puissances de 2, et qu'il est bien dans C:\ (meme si l'ese n'y est pas)
how could I do please?
huge thanks, merci bcp d'avance.

______________________
Omnia vincit labor improbus

4 réponses

Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ps, je sais que c'est pas correct de poster un codeaussi long...
la partie qui cloche c'est bien sur

hBitmap = LoadBitmap (hInstance,"SniperImg") ;
SendMessage(imghWnd, BM_SETIMAGE ,IMAGE_BITMAP ,(long) hBitmap);

______________________
Omnia vincit labor improbus
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Ben deja ce que tu pourrais faire, c'est tester la valeur de retour de LoadBitmap (NULL ou pas?), et appeler GetLastError() apres les appels de LoadBitmap() et SendMessage() pour savoir d'ou vient l'erreur.

Aussi LoadBitmap est obsolete je crois qu'il faut utiliser LoadImage.
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Oui, c'est bien LoadImage. J'en profite pour rappeler l'existence d'un truc bien pratique en DEBUG, les assertions ;-)
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
bon en fait j'ai fini par trouver. juste un p*****n de flag ... ;)

hBitmap = LoadBitmap (hInstance,"SniperImg") ;
SendMessage(imghWnd, STM_SETIMAGE ,IMAGE_BITMAP ,(long) hBitmap);
ShowWindow(imghWnd, SW_SHOW);

et non BM_SETIMAGE
si ca vous intéresse,BM_SETIMAGE vaut 0x0172 et STM_SETIMAGE 0x00F7 .... pas tres passionnant donc.
merci qd meme.

______________________
Omnia vincit labor improbus