Comment recuperer des données chiffrées contenues dans une editbox ?

pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004 - 26 juil. 2004 à 16:05
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 27 juil. 2004 à 14:22
Bonjour a tous.
Je suis actuellement sur un pgm permettant de faire des calcul a partir de donnée insérées par un utilisateur sous forme de chiffres dans des EditBox.

Pour recupérer du text a partir des EditBox pas de probleme je sais faire, mais je n'y arrive pas pour des chiffres.

Si quelqu'un pouvait m'aider !!

Precision, je programme en api win32 avec VC++ 6.0.

Voila ce que j'ai ecrit pour le moment (ce n'est que le debut evidemment...) Les element identifiés par IDC_ASSUMi sont des rdio button. Le but est que lorsque l'utilisateur clique sur un des radio button, l'aplication memorise les donnée saisies dans les EditBox afin de pouvoir les traiter.

Merci pour votre aide. 8-)

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

HWND hDlg;
HINSTANCE hInst;

BOOL CALLBACK ChildDlgProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

BOOL CALLBACK MainDlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
HWND hwnd=NULL;
char name[40];
char* young=NULL;
char* poisson=NULL;
char* toughness=NULL;
char* thickness=NULL;
char* length=NULL;
char* loading=NULL;

switch(Msg)
{

case WM_INITDIALOG:
hDlg = hWnd;
return 1;

case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_ASSUM1:

GetDlgItemText(NULL,EDITNAME,name,255);
DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_ASSUM1),hWnd,ChildDlgProc,NULL);
break;

case IDC_ASSUM2:
DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_ASSUM2),hWnd,ChildDlgProc,NULL);
break;

case IDC_ASSUM3:
DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_ASSUM3),hWnd,ChildDlgProc,NULL);
break;

case IDCANCEL:
EndDialog(hWnd,IDCANCEL);
break;
}
break;
}
return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{ hInst = hInstance;
return DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, MainDlgProc, NULL);
}

5 réponses

Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
26 juil. 2004 à 17:07
Faut utiliser atoi:

GetDlgItemText(NULL,EDITNAME,name,255);
int a = atoi(name);

Et il faudrait mieux mettre 40 comme taille max du buffer car le name ne peut contenir qu'au maximum 40 éléments.
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
26 juil. 2004 à 17:21
Merci bien pour ce coup de main.
Ca fonctionne.
J'ai aussi trouver GetDlgItemInt().
Ca fonctionne aussi.

Mais j'ai un autre probleme alors j'en profite.
Maintenant que j'ai mes données, je voudrais effectuer des calculs elementaire dessus (multiplication, division et racine carrée).
Pour cela j'include math.h (pour la racine carrée).

Malheureusment kan j'ecris mes ligne de calcul mon pgm plante....alors que j'ai fait les meme calcul avec la meme syntaxe mais en MFC et ca fonctionne parfaitement, ainsi qu'en console...
Je comprend po...

voila le code en question :(y,p,tough,l,thick,lo sont des entier et Kic, Gic, young, poisson, toughness,length,thickness,loading des int*)

Merci pour l'aide !!!

Timo

case IDC_ASSUM1:

GetDlgItemText(NULL,IDC_EDITNAME,name,40);
y=GetDlgItemInt(NULL,EDITYOUNG,young,30);
p=GetDlgItemInt(NULL,EDITPOISSON,poisson,30);
tough=GetDlgItemInt(NULL,EDITTOUGHNESS,toughness,30);
l=GetDlgItemInt(NULL,EDITLENGTHCRACK,length,30);
thick=GetDlgItemInt(NULL,EDITTHICKNESS,thickness,30);
lo=GetDlgItemInt(NULL,EDITLOADING,loading,30);

SetDlgItemInt(hDlg,EDITYOUNG,55,0);

*q=Pi*l*0.001;
*Kic=(*loading)*1000000*sqrt(*p);
*Gic=((3-(*poisson))/(4*(*young)*1000000))*(*Kic);

SetDlgItemInt(NULL,EDITKIC,*Kic,0);

DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_ASSUM1),hWnd,ChildDlgProc,0);
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 juil. 2004 à 09:48
'lut

simplement en utilisant le classwizard
specifie que ton edit box ne doit contenir que des nombres (ça évitera des erreurs)

coche number dans les propriétés - styles

en ayant coché cette option, tu pourra utiliser une variable d'échange entiere ou réelle ou comme tu veux...

après, les UpdateData, tu t'en sortiras...

@+
Magic Nono: l'informagicien!
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
27 juil. 2004 à 10:57
tout d'abord merci pour ta reponse.

J'y ai pensé a faire ca mais le probleme que cela pose est que je ne peux rentrer que des entier dans mes EditBox, alors que j'aurai besoin de flottant....souci....

Je cherche toujours mais je n'ai toujours pas trouvé....

T.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 juil. 2004 à 14:22
alors il faut récupérer l'evt onKeyDown ou onKeyUp
et valider uniquements les caractères qui t'intéressent : "0123456789."
et comme ce sera une chaine tu utilisera un atof

@+
Magic Nono: l'informagicien!
0
Rejoignez-nous