Programmer en C++
Ajout d'un bouton dans une fenêtre

Avant d'aborder cette partie, vous devez savoir créer une fenêtre windows de base (voir cours précédent).

1. Construction d'un bouton

Remarque : Il est important de se placer au début du programme, avant la fonction "WinMain()" si on veut que celle-ci puisse trouver le code d'implantation de notre bouton.

Premièrement juste après les "#include" du début du programme, nous déclarons une instance avec la ligne suivante :

HINSTANCE instance;

Pour l'instant j'avoue que je ne sais pas trop son utilité, mais je continue d'apprendre.

Ensuite il nous faut définir un numéro d'identification pour notre bouton, ce qui se fait par la commande :

#define ID_BUTTON 100

Voilà nous sommes maintenant prêt pour écrire la fonction qui nous permettra d'afficher notre bouton.

void MonBouton(HWND hwnd)
{
    HWND hBouton;
    hBouton = CreateWindow (
        "BUTTON",
        "OK",
        WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
        10, 10,
        100, 25,
        hwnd,
        (HMENU) ID_BUTTON,
        instance,
        NULL);
}

Pourquoi notre bouton ne s'affiche pas dans ma fenêtre ?
Pas de panique, notre bouton est prêt, mais il faut encore dire au programme de le dessiner. Vous vous souvenez de la procédure de fenêtre dans laquelle se trouvait le message WM_DESTROY ?
C'est dans cette procédure que nous allons maintenant demander l'affichage du bouton.
A quel moment ? Hé bien au moment de sa création. Voici ce que nous allons ajouter :

case WM_CREATE:
    // Fonction de dessin du bouton
    MonBouton(hwnd);
    break;

La procédure de fenêtre devrait maintenant avoir cette allure :

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE:
            // Fonction de dessin du bouton
            MonBouton(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);     // Déclenche la fermeture de la fenêtre
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    return 0;
}

Revenons un peu sur la fonction qui nous a permis de créer le bouton. Il est temps maintenant de commencer à entrer dans le code de programmation.

Nous avons utilisé la fonction CreateWindow().

Il reste deux paramètres qui ne seront pas traités dans ce chapître. Le monde ne s'est pas fait en un jour n'est-ce pas ? Essayons donc maintenant après cette lecture de créer les contrôles que nous venons de citer, en changeant les dimensions, les positions.
C'est bien joli tout ça, mais notre bouton ne fait pas grand chose !

2. Comment rendre notre bouton réactif ?

Nous allons créer une fonction qui va chercher à indentifier le numéro du bouton sur lequel l'utilisateur à cliqué. Ici le cas est simple, il n'y a qu'un bouton défini en début de prgramme par "ID_BUTTON". Si l'action est bien reconnue, alors la fonction retourne le message "Vous avez appuyé sur le bouton" dans une petite fenêtre. Le deuxième paramètre est ce qui apparaît dans la barre de titre. Le dernier paramètre spécifie que la petite fenêtre aura juste un bouton de validation de type "OK".

void TestBouton (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    UINT IdBouton = LOWORD(wParam);
    if (IdBouton == ID_BUTTON)
   {
        MessageBox(hwnd, "Vous avez appuyé sur le bouton", "TEST", MB_OK);
   }
}

Encore une fois, nous allons utiliser la procédure de fenêtre. Lorsque l'utilisateur clic sur le bouton poussoir, cette fenêtre nous envoit le message WM_COMMAND. A la reception de ce message, nous activons donc notre nouvelle fonction.

case WM_COMMAND:
    TestBouton(hwnd, message, wParam, lParam);
    break;