Comment créer un Bouton

Résolu
new0staff Messages postés 27 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 3 novembre 2004 - 13 oct. 2004 à 08:42
new0staff Messages postés 27 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 3 novembre 2004 - 13 oct. 2004 à 23:12
Bonjour!

Le programme ci-dessous crée et affiche une fenêtre simple. Ce que je souhaite faire, c'est rajouter un Bouton à cette fenêtre.

Ce qui ne joue pas, c'est que le bouton que j'ai crée est en lui même une fenêtre!!

Comment faire pour obtenir un bouton Push plus ou moins valable

Voici le code :

#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include "Impl_Log_class.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);

LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
bool stop = false;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{

// Création de l'application
// Création de la fenêtre :

HWND hFenetre; //Hundle contenant l'objet Fenêtre
HWND hBouton;
MSG MessagesAEnvoyer; // envoyée à WinProc après événement
MSG MessagesBouton;

WNDCLASS Fenetre;
Fenetre.lpszMenuName =NULL; // Pas de Menu

Fenetre.cbClsExtra =0;
Fenetre.cbWndExtra =0;
Fenetre.hInstance = hInstance;

Fenetre.lpfnWndProc = WinProc; // Les Msg seront envoyée à WinProc
Fenetre.lpszClassName = "Dialog_box";

Fenetre.style = CS_VREDRAW | CS_HREDRAW;
Fenetre.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
Fenetre.hIcon =(HICON) LoadIcon(hInstance, IDI_APPLICATION);
Fenetre.hCursor =(HCURSOR) LoadCursor(hInstance, IDC_ARROW);

RegisterClass(&Fenetre);

hFenetre = CreateWindow("Dialog_box", "DIALOG BOX", WS_OVERLAPPEDWINDOW, 200, 200, 600, 400, NULL, NULL, hInstance, NULL);
hBouton = CreateWindow("Button", NULL, BS_PUSHBUTTON,250,250,100,100,NULL,NULL,NULL,NULL);
ShowWindow(hFenetre,nShowCmd);
ShowWindow(hBouton,nShowCmd);

// Création du bouton

// Boucle d'attente des messages

while (!stop)
{
GetMessage(&MessagesAEnvoyer, hFenetre, 0, 0);
TranslateMessage (&MessagesAEnvoyer);
DispatchMessage (&MessagesAEnvoyer);

GetMessage(&MessagesBouton, hBouton, 0, 0);
//SendMessage(hBouton, BM_SETSTATE,100,100);
TranslateMessage (&MessagesBouton);
DispatchMessage (&MessagesBouton);
}

return 0; //indique la fin de la tâche
}

LRESULT CALLBACK WinProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
{
stop = true ;
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

En vous remerçiant à l'avance!!!

haffa

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 oct. 2004 à 10:44
le parent du bouton doit etre la fenêtre principale :
hBouton = CreateWindow("Button", NULL, BS_PUSHBUTTON,250,250,100,100,hFenetre,NULL,NULL,NULL);

une seule boucle des messages suffit :
MSG msg;
while (GetMessage(&msg, NULL, 0, 0);
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}

cette boucle s'arrête quand WM_QUIT est reçu (PostQuitMessage(0)), donc pas la peine de mettre une variable globale stop.
3
new0staff Messages postés 27 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 3 novembre 2004
13 oct. 2004 à 23:12
Bonjour!

C'est tout bon ça marche!!

Merci et A+

haffa
0
Rejoignez-nous