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 :

[Visual C++][MFC]Affichage dans un Edit Control a partir d'une function hors class


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut [Visual C++][MFC]Affichage dans un Edit Control a partir d'une function hors class
    Bonjour a tous,

    Voila j'ai une variable CEdit m_Edit1 associée a un Edit Control. Je veux faire un truc du style :

    void Display(void)
    {
    m_Edit.SetWindowText("he");
    UpdateData(FALSE);
    }
    Mais je ne peux pas car ma fonction ne connait pas m_Edit. Il ne connait pas non plus UpdateData(FALSE).

    Comment faire ????

    Merci

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    comment as-tu créé ton CEdit?
    Peux-tu nous donner le code du .h de la classe qui contient ce CEdit?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    pour utiliser des données membres ou methodes d'un objet hors classe il faut disposer d'un pointeur sur l'objet.
    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void Display(void)
    {
    pMyDlg->m_Edit.SetWindowText("he");
    pMyDlg->UpdateData(FALSE);
    }
    mais bon ce genre de chose devrait etre reservé a des threads ou des fonctions statiques a la classe...
    en dehors de ces cas, ton design n'est pas bon...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    j'ai simplifié le probleme mais en effet c'est pour une thread.
    Je test et te donne la réponse...
    merci

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    alors si c'est pour un thread consulte la faq....
    http://c.developpez.com/faq/vc/?page...d#WorkerThread

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Je travail sous VS 2003.
    j'ai généré mon m_Edit a partir de mon "add member variable wizard" en cliquant sur mon control.
    Cela m'a donc généré dans mon xxxView.h :

    public:
    CEdit m_Edit;


    Et dans mon xxxView.cpp :

    DDX_Control(pDX, IDC_EDIT1, m_Edit);

    En créant une variable global:

    static CEdit* Edit1;

    et en écrivant:

    Edit1->m_Edit.SetWindowText("he");
    Edit1->UpdateData(FALSE);


    Cela me génere l'erreur suivante :

    m_Edit is not a member of 'CEdit'
    SetWindowTextA must have a class/struct/union type


    Pourtant mon m_Edit est bien de type CEdit.
    La commande Edit1->UpdateData(FALSE); fontionne parcontre

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Edit1->m_Edit.SetWindowText("he");
    Edit1->UpdateData(FALSE);
    AAAAaaaaarghh cela fait la éniéme fois ! UpdateData apparemment personne ne pige comment fonctionne cette instruction .
    Farscape fait qque chose !

    Soit tu utilises SetWindowText
    soit tu affectes le controle avec nom_controle=valeur PLUS UpdateData
    UpdateData est utilisé pour mettre à jour des controles lors de l'affichage de fenêtres de type dialogue

    Edit1->m_Edit.SetWindowText("he");
    Pas la peine de passer par m_Edit !
    Il suffit de déclarer Edit1->SetWindowText("he");

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par mat.M
    AAAAaaaaarghh cela fait la éniéme fois ! UpdateData apparemment personne ne pige comment fonctionne cette instruction .
    Farscape fait qque chose !
    ben dans la faq il y a pas mal de chose la dessus,http://c.developpez.com/faq/vc/?page...nge#UpdateData

    la le probleme c'est qu'il va falloir reviser ses bases sur le C++, regarder les classes des MFC .
    et eventuellement mon tuto (lien dans ma signature)..

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Il est vrais qu'on utilise pas toujours UpdateData(FALSE) de la bonne maniere.

    Enfin, le Edit1->SetWindowText("he"); que tu m'a conseillé ne marche pas
    Ca me fait un break dans la classe void CWnd::SetWindowText(LPCTSTR lpszString)

    a la ligne ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

    Je vois pas trop comment ca pourrait marcher. . Le Edit1 étant déclaré en variable global de type CEdit* comment le programme peut savoir quand on fait Edit1->SetWindowText("ho"); que cela s'adresse a notre EditControl? Si il y en a plusieurs dans la fenetre?

  10. #10
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    je penses que tu n'as pas lié ta varaible global un ctrl existant !!
    par exemple on suppose que tu as ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class MyDialog : public CDialog
    {
    ....
    CEdit  m_edit;
    .....
    };
    il faut qu'à un moment tu fasses ca :

    sinon cela correspond à avoir Edit1 qui n'est pas cohérent !!!

    mais je ne comprends pas pq elle est globales :s
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    En effet je n'avais pas lié ma variable avec le control existant. Ca marche


    Ma variable Edit1 doit etre vu par ma class pour faire: Edit1 = &m_edit;

    et aussi par ma fonction pour faire: Edit1->SetWindowText("he");

    Donc je me suis dit que le mettre en global c'était pas faux...
    Ya mieux donc je suppose...

    Merci

  12. #12
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    c'est la fonctiond e ton thread ?

    si c'est le cas tu lui passe quoi à cette fonction comme paramètre ?
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Dans mon cas c'est un peu compliqué a expliquer .... En gros

    je crais une thread : threadIdentification = _beginthread(&NotifyReceiver,1,&threadID);

    Dans ce thread je rentre en comm avec un appareil de detection de tags(identité) par un serveur :

    SOCKADDR_IN ServerAddr;
    ...
    wVersionRequested = MAKEWORD( 2, 2 );
    skt = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    ....
    client = accept(skt,(struct sockaddr FAR*) &ClientAddr, (int FAR *) &addrlen);
    if (client == INVALID_SOCKET )
    {
    err = WSAGetLastError();
    continue;
    }


    Et en gros mon prog reviens dans cette fonction toutes les seconde par exemple et continue apres cette derniere ligne. Alors je recupere l'identité de mes tags.
    Je dois alors les traiter et afficher des infomations dans des controls de ma fenetre.
    Donc je prend les identités de mes tags, je les balances dans une autre fonction qui ne fait pas partie de ma class view, je traite les stags et les affiche.

    On passe part 2 fonctions qui ne connaissent pas mes objets graphiques. Je ne peux donc pas passe en parametres ces objets.

    voili voilo

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

Discussions similaires

  1. Affichage dans un Picture control ?
    Par faroukus dans le forum OpenCV
    Réponses: 2
    Dernier message: 25/08/2008, 09h11
  2. Problème d'affichage dans un Edit Text
    Par Constant_Conbustion dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 12/05/2008, 11h38
  3. [MFC] Affichage dans un textbox
    Par Copernic09 dans le forum MFC
    Réponses: 7
    Dernier message: 07/12/2007, 13h22
  4. texte dans un edit control
    Par boboz2 dans le forum MFC
    Réponses: 1
    Dernier message: 14/08/2007, 16h22
  5. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12

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