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 :

[Débutant][MFC] Conversion Casse CEdit vers ...


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 88
    Par défaut [Débutant][MFC] Conversion Casse CEdit vers ...
    Bonjour,

    voici mon problème:

    J'ai une classe:
    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
     
    class CFiche  
    {
    public:	
    	int m_edit_ref1;
    	char m_edit_ref2;
    	int m_edit_ref3;
     
    	CString client[20],lieu[20],type[30];
     
    	char m_edit_mod1;
    	int m_edit_mod2;
     
    	unsigned int date;
    public:
    	CFiche();
    	virtual ~CFiche();
    	};

    Ensuite dans une fonction OnAjouter, je souhaite enregistrer des champs CEdit dans cette classe puis les écrire dans un fichier, ici je n'ai essayé qu'avec le champ IDC_EDIT_CLI (ajouté comme variable de type CString dans ClassWizard):
    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
     
    void CNewModalInfo::OnAjouter() 
    {
    	// TODO: Add your control notification handler code here
     
    	CFiche *pfic;
    	CEdit* pclient;
     
    	pclient = (CEdit*) GetDlgItem(IDC_EDIT_CLI);
    	GotoDlgCtrl(pclient);
     
    	pfic=new CFiche;
     
    	pfic->client= * pclient;
     
    	//Ecriture des caractéristiques dans un nouveau fichier
     
    	//CStdioFile fic ("c:\\Ref1.txt", CFile::modeCreate | CFile::modeWrite | CFile::typeText | CFile::modeNoTruncate  );
    	//fic.WriteString("Lieu:\n");
    	//fic.WriteString(plieu);
     
    	//fic.Close();
    }
    Le problème, c'est que j'ai toujours une erreur de type:
    cannot convert from 'class CEdit' to 'class CString [20]
    Pourtant mon controle CEdit IDC_EDIT_CLI est défini comme CString.

    Où est mon erreur?

    Je dois aussi enregistrer des champs de type int ou unsigned int, est ce que j'aurais le même problème?

    Merci d'avance.

  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
    on ne définit pas un cstring avec des []
    ca, c'était bon du temps des tableaux de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CString client, lieu, type;
    ca suffit

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 88
    Par défaut
    OK merci, j'ai pas encore trop l'habitude.

    J'ai changé ça et maintenant j'ai un autre message d'erreur qui est apparement lui aussi un pb de conversion (je ne comprends plus rien à toutes ces histoires de conversions):
    error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class CEdit' (or there is no acceptable conversion)
    sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	pfic->client= * pclient;
    :

  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
    il faut utiliser GetWindowText pour récuperer la valeur du CEdit http://msdn.microsoft.com/library/de...windowtext.asp

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 88
    Par défaut
    En fait, j'aurais bien aimé savoir d'où vient ce problème de conversion.

    Pourquoi un CString (du controle CEdit) ne peut-il pas être affecté à un autre CString (de ma classe CFiche)?

    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
    ce n'est pas un problème de conversion, mais d'utilisation

    Pour récuperer la valeur d'un Edit, tu dois faire comme indiqué dans le lien que je t'ai donné.

    C'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pclient->GetWindowText(pfic->client);

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 88
    Par défaut
    J'ai fait ce que tu m'as dit et je n'ai plus d'erreur de compilation mais maintenant j'ai un bug: l'exe se lance et quant je clique sur le bouton Ajouter de la boite "Fenetre blanche" puis "Terminer maintenant".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void CNewModalInfo::OnAjouter() 
    {
    	// TODO: Add your control notification handler code here
     
    	CFiche *pfic;
    	CEdit* pclient;
     
    	pclient->GetWindowText(pfic->client);
     
    	MessageBox(pfic->client,"Test",MB_OK);
     
    }
    Je précise que ça plante même si je ne mets pas la MessageBox.


  8. #8
    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
    t'aurais pas oublier de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclient = (CEdit*) GetDlgItem(IDC_EDIT_CLI);

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 88
    Par défaut
    Exact, j'avais oublié mais ça buge encore "...exe a généré une erreur.....
    Voulez vous envoyer...":

    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
     
    void CNewModalInfo::OnAjouter() 
    {
    	// TODO: Add your control notification handler code here
     
    	CFiche *pfic;
    	CEdit* pclient;
     
    	pclient = (CEdit*) GetDlgItem(IDC_EDIT_CLI);
    	pclient->GetWindowText(pfic->client);
     
    	MessageBox(pfic->client,"Test",MB_OK);
     
     
    	/*CStdioFile fic ("c:\\Ref1.txt", CFile::modeCreate | CFile::modeWrite | CFile::typeText | CFile::modeNoTruncate  );
    	fic.WriteString("Lieu:\n");
    	fic.WriteString(pfic->client);
     
    	fic.Close();*/
    }
    J'ai un warning comme quoi une variable n'est pas initialisée:
    warning C4700: local variable 'pfic' used without having been initialized
    Est ce que cela peut venir de là?

  10. #10
    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
    ah ... ca c'est sur !

    CFiche est un pointeur, non initialisé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFiche *pfic = new CFiche();
    Pourquoi utiliser un pointeur d'ailleurs ?
    Ne pas oublier de libérer l'objet aussi !

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 88
    Par défaut
    Super ça marche, merci beaucoup!


    J'ai utilisé un pointeur parce que je l'avais vu comme ça dans un exemple et je crois que maintenant que ça marche je vais plus y toucher.

    Pour libérer l'objet, c'est avec "Delete" je crois, je vais essayer.

    Remerci.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ConversioN C++.net vers visual C++ mfc
    Par ricky78 dans le forum MFC
    Réponses: 5
    Dernier message: 13/06/2007, 17h03
  2. Réponses: 11
    Dernier message: 03/05/2006, 17h06
  3. [Think Pascal] Portage/conversion Think Pascal vers MAC/Windows/Linux
    Par Alain Vitry dans le forum Autres IDE
    Réponses: 1
    Dernier message: 19/03/2005, 11h24
  4. Réponses: 6
    Dernier message: 16/05/2004, 19h03
  5. Conversion distance , angle vers coordonnées de points
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2004, 22h55

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