Programmer en C++
Win32 - L'EditBox

1. Récupération des données de la zone de saisie d'une EditBox

Réservons pour commencer un peu de place mémoire pour stocker notre chaine de caractère :

char text[255];

Nous utilisons ensuite la fonction "GetWindowText()". Cette fonction nous retourne un entier qui est le nombre de caractères effectivement copiés. Nous lui transmettons 3 paramètres qui sont dans l'ordre :

Notre code s'écrira alors :

int longText = GetWindowText(hEditBox, text, 255);

Voilà c'est terminé, nous disposons maintenant du contenu de la zone de saisie de notre EditBox. Pour le prouver faisons apparaître une boite de dialogue affichant ce texte. Nous ajouterons un bouton à notre fenêtre principale, et nous placerons le code suivant dans la fonction "TestBouton()". Revoir les chapîtres précédents si besoin.

void TestBouton (HWND hwnd, WPARAM wParam)
{
    if (ID_BOUTON == LOWORD(wParam))
   {
        char text[255];
        int longText = GetWindowText(hEditBox, text, 255);
        if (longText != 0)
        {
            MessageBox(hwnd, text, "Zone de saisie de l'EditBox", MB_OK);
        }
   }
}

Voilà ce qu'on obtient :

2. Conversion

Que faire lorsque l'information désirée est un nombre ?

Premièrement nous déclarons une variable permettant de stocker ce nombre. J'ai choisi un format double :

double nombre;

Nous utilisons ensuite une fonction de convertion du texte :

nombre = atof(text);

Ce nombre peut maintenant être utilisé pour d'éventuels calculs. Par exemple nous allons calculer la racine carrée :

double resultat = sqrt(nombre);

Cette fonction nécessite d'ajouter "#include <math.h>" dans l'en tête.

Peut-on afficher ce nombre dans une boite de dialogue ?

pas directement car il nous faut transformer ce nombre en chaine de caractère avec la fonction suivante :

sprintf(text, "%lf", resultat);

Pour fonctionner, cette fonction nécessite d'ajouter dans l'entête : "#include <stdio.h>".

Réécrivons tout ça dans notre fonction "TestBouton" :

void TestBouton (HWND hwnd, WPARAM wParam)
{
    if (ID_BOUTON == LOWORD(wParam))
   {
        char text[255];
        double nombre, resultat;
        int longText = GetWindowText(hEditBox, text, 255);
        if (longText != 0)
        {
            // Du texte existe dans la zone de saisie
            nombre = atof(text);     // le texte est convertit en nombre.
            resultat = sqrt(nombre);     // Un petit calcul pour l'exemple.
            sprintf(text, "%lf", resultat);     // Reconversion du nombre en texte.
            // Affichage.
            MessageBox(hwnd, text, "La racine carrée est :", MB_OK);
        }
        else
        {
            MessageBox(hwnd, "Vous devez saisir un nombre", "Erreur", MB_OK);
        }
   }
}

Voilà ce qu'on obtient après un clic sur le bouton "CALCUL" :

Nous aurions pu ajouter une protection contre les nombres négatifs (La racine carrée d'un nombre négatif n'existe pas !).
A titre d'exercice pour plus d'élégance vous pourriez ajouter une deuxième "EditBox" et afficher le résultat dans cette dernière.

Pour afficher le texte dans l'EditBox, vous utiliserez la fonction :

SetWindowText(hEditBox2, text);

Les paramètres transmis à la fonction sont respectivement :

Voilà ce que vous pourriez obtenir :

Remarque : Le choix d'un "char" de 255 caractères ne permet pas d'avoir une grande précision dans le résultat qui ne comporte que 7 chiffres significatifs. Je pense que c'est la vieille fonction sprintf issue du C qui réduit ainsi cette précision.
Si quelqu'un a une solution plus intéressante alors je suis preneur dumay@lacroixrouge-brest.fr

Découvrons maintenant le code modifié de la fonction "TestBouton" :

void TestBouton (HWND hwnd, WPARAM wParam)
{
    if (ID_BOUTON == LOWORD(wParam))
   {
        char text[255];
        double nombre, resultat;
        int longText = GetWindowText(hEditBox, text, 255);
        if (longText != 0)
        {
            // Du texte existe dans la zone de saisie
            nombre = atof(text);     // le texte est convertit en nombre.
            if (nombre < 0)
            {
                SetWindowText(hEditBox2, "Erreur");
                MessageBox(hwnd, "Vous devez saisir un nombre POSITIF", "Erreur", MB_OK);
            }
            else
            {
                resultat = sqrt(nombre);     // Racine carrée du nombre.
                sprintf(text, "%lf", resultat);     // Reconversion du nombre en texte.
                // Affichage.
                SetWindowText(hEditBox2, text);
            }
        }
        else
        {
            SetWindowText(hEditBox2, "");
            MessageBox(hwnd, "Vous devez saisir un nombre positif.", "Erreur", MB_OK);
        }
   }
}