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 :
hEditBox le handle de notre EditBox.
la chaîne de caractère "text" qui recevra les informations contenues dans la zone de saisie de l'EditBox.
Le nombre max de caractères qui seront copiés incluant le caractère NULL de fin de chaine. La chaine sera tronquée s'il y a dépassement.
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 :
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 :
Le handle de la deuxième EditBox.
Le texte à afficher.
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);
}
}
}