IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[API] R�cup�rer la valeur d'un champs EDIT ?


Sujet :

MFC

  1. #1
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut [API] R�cup�rer la valeur d'un champs EDIT ?
    Salut,

    Dans un 1er temps, je ne sais pas vraiment si c'est des MFC ou pas, et dans un 2eme j'ai bien lu le "Tutorial d'initiation
    A la programmation avec l'API Windows" mais j'ai du mal a comprendre :s.

    Je voudrai savoir comment faire pour r�cup�rer la valeur d'un champs EDIT num�rique, faire de calcule avec, puis l'affichiger dans un MessageBox()
    D'apr�s le tuto nomm� ci-dessus, il faut employer la fonction GetDlgItemInt() or il me renvoie rien.

    Bon je vais essayer d'exposer un peu mieux le probl�me:
    J'aimerai r�aliser une petite appli, cette appli serai une bo�te de dialogue avec 2 contr�les de type "Edit", les 2 seraient num�rique.

    Pour l'instant, grace au tuto, j'ai r�ussi a cr�er la fen�tre, et les contr�les mais impossible de faire un calcule avec, le calcule est aussi simple que �a:
    ou cn serai le 1er contr�le "Edit" et f le 2eme... et lorsque l'on cliquerai sur calculer, le MessageBox() afficherai le r�sultat.. et c'est l� ou j'ai du mal, je n'arrive pas a faire de calcule avec les contr�les "Edit", et impossible de l'envoyer dans le MessageBox()..

    Si vous pouviez m'orient� �a serai fort simpatique ..

    voila mon code actuelle:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    // Procédure de gestion de la boite de dialogue
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    	int Select, iLine, total, cn=0,f=0;
    	char *buf="";
     
    	switch(message)
    	{
    		case WM_COMMAND:
     
    			Select=LOWORD(wParam);
    			BOOL fError; 
    			BOOL fRelative;
     
    			fRelative = TRUE; 
     
    			switch(Select)
    			{
    				case IDOK:
     
    					//GetDlgItemText(Dlg,IDC_EDIT1,buf,2);
    					//GetDlgItemText(Dlg,IDC_EDIT2,buf2,2);
     
                        iLine = GetDlgItemInt(Dlg,IDC_EDIT1, &fError, fRelative); 
     
    					if (iLine)
    					{
    						SetDlgItemText(Dlg,IDC_EDIT1,buf);
    						MessageBox(Dlg, buf, "test", MB_OK); 
    					}
     
    					// total = ((cn*f)/200);
     
     
    				return TRUE;
     
    				case IDCANCEL:
    					EndDialog(Dlg,Select);
    				return TRUE;
    			}
    		default:
    		return FALSE;
    	}
    }
    Merci par avance,
    Cordialement.

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    ce que je te propose :

    rajouter une variable � ta callback :dans le WM_CREATE, r�cuperer le handle de l'�dit
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    hEdit = GetDlgItem(Dlg, IDC_EDIT1);
    Puis, dans le IDOK, r�cuperer la valeur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    						int len = GetWindowTextLength(hEdit);
    						char * buff = new char[len+1];
    						GetWindowText(hEdit, buff, len+1);
    attention, buff devra etre lib�r�


    ps : c'est pas du MFC, mais de l'API

  3. #3
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    Salut nico-pyright(c),

    Merci, mais j'ai certainement tr�s mal compris ce que tu viens de me dire car �a ne fonctionne toujours pas malgr�s le code fournis.. peu �tre que cela vien de mon code (tr�s certainement )

    Voila le code entier en �sperant que �a aide plus :/, il doit d'ailleur �tre pliens de fautes..
    .: Edit :.
    Boulet je suis, le code fonctionne en le modifiant un peu
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include <windows.h>
    #include "resource.h"
     
    // Prototype de notre fonction
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
     
    // Rien de spécial ici
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow)
    {
     	DialogBox(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)MainProc);
    	return 0;
    }
     
    // Procédure de gestion de la boite de dialogue
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    	int Select, iLine;
    	char *buf="";
    	static HWND hEdit;
     
    	switch(message)
    	{
    		case WM_COMMAND:
     
    			Select=LOWORD(wParam);
    			BOOL fError; 
    			BOOL fRelative;
     
    			fRelative = TRUE; 
     
    			switch(Select)
    			{
    				case IDOK:
                        iLine = GetDlgItemInt(Dlg,IDC_EDIT1, &fError, fRelative); 
    					hEdit = GetDlgItem(Dlg, IDC_EDIT1);
     
    					if (iLine)
    					{
    						int len = GetWindowTextLength(hEdit); 
    						char * buff = new char[len+1]; 
    						GetWindowText(hEdit, buff, len+1); 
     
    						MessageBox(Dlg, buff, " Calcule", MB_OK); 
    					}
    					// total = ((cn*f)/200);
    				return TRUE;
     
    				case IDCANCEL:
    					EndDialog(Dlg,Select);
    				return TRUE;
    			}
    		default:
    		return FALSE;
    	}
    }

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    je ne vois pas de d�sallocation pour buff

    ensuite, il est en g�n�ral plus judicieux de faire les initialisations dans le WM_CREATE

    Enfin, si tu r�cup�res un nombre, il faudra le convertir comme indiqu� dans la FAQ

  5. #5
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    Salut nico-pyright(c),

    Effectivement, il n'y en a pas pour l'instant, j'y penserai la prochaine fois pour WM_CREATE (or dans l'exemple donn�e il n'y est pas).

    Pour la conversion, avec ton code pas de probl�me je le recupere bien mais je n'arrive pas � faire de calcule avec :/

    Pour d�truire buff il faut que je face "delete []buff" non ?

    Merci

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    suffirait ; attention, il ne faut pas le faire n'importe quand bien sur ...
    Si tu ne le maitrises pas, tu peux remplacer par une chaine statique assez longueet virer l'�tape du new

    Pour la conversion, je n'ai rien indiqu� (a part d'aller voir dans la faq), mais si tu veux pouvoir faire une multiplication sur ta chaine r�cup�r�e, il va falloir la transformer (avec strtod) ; ensuite, si tu veux l'afficher dans un messageBox, il faudra la retransformer en chaine (avec sprintf par exemple)

  7. #7
    mat.M
    Invit�(e)
    Par d�faut
    Citation Envoy� par Darkenshin
    Effectivement, il n'y en a pas pour l'instant, j'y penserai la prochaine fois pour WM_CREATE (or dans l'exemple donn�e il n'y est pas).

    Pour d�truire buff il faut que je face "delete []buff" non ?

    Merci
    Non ! II faut pas y penser 3 jours apr�s . C'est tout de suite qui faut le faire sinon ton appli va �tre instable , la m�moire va se fragmenter..
    C'est pourtant simple boudiou : un new , un delete.
    Evidemment il faut d�sallouer le tampon au bon moment

  8. #8
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    Salut,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     int len = GetWindowTextLength(hEdit); 
                      char * buff = new char[len+1]; 
                      GetWindowText(hEdit, buff, len+1);
    Il semblerai que la conversion est d�j� faite a partir de l�

    Pour "delete buff;", il suffit de la possitionner apres l'utilisation non ?

  9. #9
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    vu que je sais pas ce que tu veux faire ...
    Mais, l�, tu disposes d'une chaine de caract�res.

    Voil�

  10. #10
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    Salut mat.M & nico-pyright(c),

    Oui effectivement

    @nico-pyright(c), lol, en faite je voudrai recuperer le champ1 et le champ2 (controle edit) faire (champ1*champ2)/200 puis l'afficher dans un messagebox() quand on click sur "ok"

    .: Edit :.
    En gros je voudrai convertire �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
       float cn, f, c;
     
       printf("Votre cout en nourriture: ");
       scanf("%f", &cn);
     
       printf("\nVotre pourcentage de fermier: "); 
       scanf("%f", &f);
     
       if ((cn > 0) && (f > 0))
       {
    		c = ((cn*f)/200);
    		printf("\nVotre nombre maximal de ferme 'effectives' est de %.0f. \n\n", c); 
       }
       else
       {
    	   printf("Erreur !");
       }
     
     
       system("pause");
       return 0;
    }
    dans une API

  11. #11
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    d'o� ma remarque, on ne peut pas multiplier des chaines entre elles ...
    il faut passer par des nombres (entier, double, ce que tu veux).

    Enfin, tu verras quand tu en auras besoin

    Si ton post est r�solu, n'oublie pas le bouton en bas � gauche

  12. #12
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    Oui, mais il n'est pas totalement r�solu :/
    sinon regarde le poste au dessus, j'ai �diter mais tu a r�pondu avant ^^

    Je sais qu'il faut passer par des int ou des float mais le probl�me si je fait:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    					if (iLine && iLine2)
    					{
    						int len = GetWindowTextLength(hEdit); 
    						int len2 = GetWindowTextLength(hEdit2); 
     
    						int test;
    						test = len*len2;
     
    						char * buff = new char[test+1]; 
     
    						GetWindowText(hEdit, buff, test+1);
    						MessageBox(Dlg, buff, " Calcule", MB_OK); 
     
    						delete buff;
     
    					}
    il n'affiche que le 1er
    .: Edit :.
    Et non le r�sultat de la multiplication

  13. #13
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    alors, comprenons nous bien
    len c'est la longueur du champ (donc de la chaine)
    si tu rentres "123456", len va valloir 6

    donc, il faut que tu fasses un GetWindowText/GetWindowTextLength sur chaque EDIT.
    Tu vas obtenir 2 variables chaine (buff1 et buff2 par exemple)

    ensuite, il va falloir les convertir en double par exemple avec strtod
    faire la multiplication
    puis convertir le r�sultat en chaine avec sprintf pour affichage dans un messagebox

  14. #14
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    J'avais bien compris d'ou ce que j'avais fait :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    					if (iLine && iLine2)
    					{
    						int len = GetWindowTextLength(hEdit); 
    						int len2 = GetWindowTextLength(hEdit2); 
     
    						char * buff = new char[len+1]; 
    						char * buff2 = new char[len2+1];
     
    						GetWindowText(hEdit, buff, len+1);
    						GetWindowText(hEdit2, buff2, len2+1);
     
    						char *pEnd,*pEnd2;
    						double dbl, dbl2, test;
     
    						dbl = strtod (buff,&pEnd);
    						dbl2 = strtod (buff2,&pEnd2);
     
    						test = (dbl*dbl2);
     
    						// total = ((cn*f)/200);
    						MessageBox(Dlg, buff, " Calcule", MB_OK); 
    						MessageBox(Dlg, buff2, " Calcule", MB_OK);
     
    						delete buff;
    						delete buff2;
    					}
    mais apr�s la multiplication je suis un peu perdu car sprintf() me dit qu'il ne peut pas convertir de l'int avec du char * :/ ensuite il me manque l'info sur comment l'impl�menter dans le messagebox()

    sprintf ("Its square: %.0lf\n",test);

    error C2664: 'sprintf' : cannot convert parameter 2 from 'double' to 'const char *'

  15. #15
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    ca te fait :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    test = dbl*dbl2 / 200;
    char temp[50];
    sprintf(temp,"Résultat : %f",test);
    MessageBox(Dlg, buff, temp, MB_OK);

  16. #16
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Par d�faut
    Merci :o

    tout fonctionne grace a toi , dsl d'avoir jouer le boulet j'ai un peu de mal avec le C

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�cup�rer la valeur d'un champ Edit
    Par Watier_53 dans le forum VBScript
    R�ponses: 3
    Dernier message: 28/03/2008, 17h00
  2. API pour r�cup�rer la valeur d'un champ Edit
    Par buteiduil dans le forum Windows
    R�ponses: 4
    Dernier message: 15/05/2005, 22h32
  3. R�ponses: 1
    Dernier message: 22/02/2005, 23h40
  4. R�cup�rer la valeur d'un champ disabled
    Par nebule dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 27/01/2005, 10h45
  5. r�cup�rer la valeur du 2�me champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de donn�es
    R�ponses: 3
    Dernier message: 20/07/2004, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo