begin process at 2012 05 30 19:58:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

lundi 13 décembre 2004 à 22:23:52 | WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

gekkko

Bonjour!

Je n'arrive pas à faire afficher un bitmap sur un bouton CreateWindow.

Le bitmap se charge pourtant bien puisque le .EXE grossit.
La compilation se passe sans erreurs et l'executable s'execute!
Une semaine que j'essaie sans résultat.

Qu'est-ce qui cloche dans mon code (ci-dessous)?
#Merci d'avance <gekkko>

#include <windows.h>
#include "bitmap.h"

HWND hwndMain;
HANDLE bmp1;
HINSTANCE hInstance = NULL;

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
static HWND hwndBtn1 = 0;
static HWND hwndBtn2 = 0;

switch (msg)
{

case WM_CREATE:
{
bmp1 = LoadBitmap(hInstance, "BITMAP1");

hwndBtn1 = CreateWindow ("button", "bmp1",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP,
50, 25, 120, 120, hwnd, (HMENU) 1,
((LPCREATESTRUCT) lParam)->hInstance, NULL);

hwndBtn2 = CreateWindow ("button","Close",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
50, 170, 120, 25, hwnd, (HMENU) 2,
((LPCREATESTRUCT) lParam)->hInstance, NULL);

return 0;
break;
}

case WM_COMMAND:
{
if (LOWORD(wParam) == 2 &&
HIWORD(wParam) == BN_CLICKED &&
(HWND) lParam == hwndBtn2)
{
DestroyWindow (hwnd);
}
return 0;
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}

int WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
MSG msg;
WNDCLASSEX wcx;

ZeroMemory(&wcx,sizeof(WNDCLASSEX));
wcx.cbSize = sizeof(WNDCLASSEX);
wcx.style = CS_HREDRAW |CS_VREDRAW |CS_DBLCLKS ;
wcx.lpfnWndProc = (WNDPROC)MainWndProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = NULL;
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW+6);
wcx.lpszMenuName = NULL;
wcx.lpszClassName = "WIN32";
wcx.hIconSm = NULL;

if (!RegisterClassEx(&wcx))
return 0;

hwndMain = CreateWindowEx(0,
"WIN32",
"Win32 Bitmap sur un bouton",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
240,240,
HWND_DESKTOP,
NULL,
hInstance,
NULL);

if (!hwndMain)
return 0;

ShowWindow(hwndMain,SW_SHOW);

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

return msg.wParam;
}

// le fichier bitmap.rc:
#include "bitmap.h"
BITMAP1 BITMAP "mafoto.bmp"

// le fichier bitmap.h:
#define BITMAP1 101
lundi 13 décembre 2004 à 23:30:40 | Re : WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

AlexMAN

Membre Club
Il suffit d'envoyer le message BM_SETIMAGE au bouton pour lui 'appliquer une image' :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/buttons/buttonreference/buttonmessages/bm_setimage.asp

++

+2(p - n)
mardi 14 décembre 2004 à 00:27:21 | Re : WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

racpp

Administrateur CodeS-SourceS
Salut,
C'est vrai, le bitmap ne peut pas s'afficher tout seul sur le bouton, il faut bien envoyer le message BM_SETIMAGE pour que ce soit fait. A la fin du traitement de WM_CREATE tu ajoutes ceci :
SendMessage(hwndBtn1,BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)bmp1);

Quand l'EXE grossit cela prouve que le bitmap est ajouté à l'EXE mais cela ne prouve pas qu'il est bien chargé à l'exécution du programme. Essaie de tester la valeur de retour (bmp1) de la fonction LoadBitmap(), si elle est nulle donc ton bitmap n'est pas chargé. Puisque tu utilises un identificateur pour ton bitmap il faut faire:
bmp1=LoadBitmap(hInstance, MAKEINTRESOURCE(BITMAP1));

mercredi 15 décembre 2004 à 00:18:22 | Re : WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

gekkko

Merci pour vos réponses hyper rapides.

J'ai rajouté les deux lignes qu'il fallait:

bmp1=LoadBitmap(hInstance, MAKEINTRESOURCE(BITMAP1));

et

SendMessage(hwndBtn1,BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)bmp1);

ça compile sans erreurs mais le bouton reste désespérément vide :o(

Si quelqu'un veut essayer de compiler le code pour voir (sous dev-cpp 4.9.8), je peux lui envoyer le petit zip (27ko) de mon répertoire bitmap.dev.

#Merci d'avance = "gekkko"
mercredi 15 décembre 2004 à 15:27:44 | Re : WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

racpp

Administrateur CodeS-SourceS
Je viens de remarquer que le 1er paramètre de LoadBitmap() n'est pas correctement initialisé (hInstance). Pour résoudre le problème tu fais:
bmp1 = LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(BITMAP1));

Pour savoir si le bitmap n'est pas chargé, tu fais juste après la ligne précédente:
if (!bmp1) MessageBox(0,"Bitmap non chargé!",0,0);

J'ai pas pu tester ton code car j'ai VC. Normalement, ça doit marcher maintenant. Bonne chance.
jeudi 16 décembre 2004 à 22:43:19 | Re : WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap

gekkko

Bingo!
Maintenant ça marche super bien.
Je suis en train de nettoyer mon code pour le poster prochainement.
J'avais trouvé des exemples en VC++ avec des AFX partout mais ça marchait pas sous dev-cpp.
Encore merci racpp et les autres pour votre aide.
<gekkko>


Cette discussion est classée dans : hwnd, msg, bitmap, hinstance, wcx


Répondre à ce message

Sujets en rapport avec ce message

crer "dialog non modal" [ par comfm ] BonjourJe n'arrive pas à créer une boite de dialogue non modal, c'est à dire celle qui permet d'être tjs affichée et on peut cliquer derriere sans pro erreur(vc++6) [ par greg4 ] Linking...LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainDebug/fen.exe : fatal error LNK1120: 1 unresolved externalsError execut Gestion des evenements Win32 [ par zibo3 ] J'aimerai créer un événement appuyer sur une touche de type F3 mais cet événement doit se réaliser à chaque fois que j'appuie sur cette touche quelque Problème de creation d'application en win32 [ par zibo3 ] J'ai un petit soucis, je me lance dans la programmation graphique windows et comme j'ai lu qu'il fallait éviter les MFC, je m'y efforce. Mon premier p bmp dans static [ par Arnaud16022 ] bonjourvoila 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 LRES Problème graphique avec C [ par le1scorpion1noir ] salut a tous je peux savoir c'est quoi le meilleur logiciel pour programmer en C puis y t il une différence entre le C et le C++ ? je débute et j ess Je trouve pas le bon code [ par vah bi ] Bonjour à tous , voilà je débute en c et comme editeur j'ai le visual c++.Je  fais actuellement une application avec l'api de visual c++  mais en lang Probleme de socket [ par alphaone ] // tcp_client.cpp*: définit le point d'entrée pour l'appli WIN32 : Editbox non editable avec une boite de dialogue CHILD [ par Pistol_Pete ] BonjourVoila mon problème: J'ai créé une fenêtre et dans cette fenêtre j'ai une boite de dialogue avec le style WS_CHILD. Tous mes contrôles de cette Pb avec CreateDialog() [ par cpprooky ] Bonjour à tous ! Voila un pb qui m'occupe depuis plusieurs heures et je ne trouve pas d'ou vient le pb ! je veux faire une appli (GUI Win32) fondée s


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales