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 :

[MFC] SendMessage entre 2 contrôles


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 54
    Points
    54
    Par défaut [MFC] SendMessage entre 2 contrôles
    Bonjour je travaille sous VisualStudio.NET.

    Mon application se compose d'une boite de dialogue comprenant une ListBox et un Edit (Une fenêtre parent et 2 fenêtres filles de ce fait).

    Je fais apparaitre un menu sur le clic droit de ma listbox,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void CMyListBox::OnRButtonUp(UINT nFlags, CPoint point)
    {
        CMenu menu,*pPopup;
        GetCursorPos(&point);
     
        menu.LoadMenu(IDR_MENU1);
        ASSERT (menu.m_hMenu != NULL);
        pPopup = menu.GetSubMenu(0);
        ASSERT (pPopup != NULL);
        int nResult = pPopup->TrackPopupMenu(TPM_LEFTALIGN |  TPM_RIGHTBUTTON, point.x, point.y, this);  
        menu.DestroyMenu();	
    }
    Le menu possède 2 options : Insérer et Supprimer.

    Pour la dernière citée pas de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CMyListBox::OnSupprimer()
    {
     
        int Index = GetCurSel();
     
        if((Index != LB_ERR)) DeleteString( Index );
    }
    Pour Insérer j'aimerai que le texte contenu dans l'edit s'ajoute à la ListBox. Je dois pour ça faire dialoguer les 2 fenêtres via SendMessage je suppose. Je n'ai pas trouvé d'exemple concluant et l'aide me parait flou.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CMyListBox::OnMenuinserer()
    {
    	// SendMessage ?
     
     
    }
    Note :

    J'ai ajouté 2 variables de contrôles dans la classe représentant la boite de dialogue,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // boîte de dialogue CMonAppMFCDlg
    class CMonAppMFCDlg : public CDialog
    {
         //
     
          public:
     
    	CMyListBox m_CtlList;
    	CEdit m_CtlEdit;
     
     
        //
    }
    Voilà, merci bien !

  2. #2
    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,
    pas besoin de messages.
    tu recuperes le texte de l'edit par un GetWindowText ou UpdateData(TRUE) si une variable est attachée a l'edit
    ensuite tu fais un AddString sur la listbox.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 54
    Points
    54
    Par défaut
    D'accord mais le problème c'est que dans cette méthode,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CMyListBox::OnMenuinserer()
    {
        CString str;
     
        //
     
        AddString(str);
    }
    Je n'ai pas accès à ma variable représentant l'edit (m_CtlEdit) qui est contenu dans la classe de ma boite de dialogue. Je ne peux pas faire m_ctlEdit.GetWindowText(str). Ou dois-je placer le UpdateData(TRUE) pour mettre à jour les données ?

  4. #4
    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,
    et bien da ta classe listbox tu mets un pointeur sur edit .
    que tu initialiase dans OnInitDialog dans ta dialogue.
    et la plus de probleme.
    sinon faire un GetParent() caster sur la classe de la dialogue et la de nouveau tu as acces aux controles ...
    a toi de voir .

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 54
    Points
    54
    Par défaut
    Ok je vois le principe,

    j'ai déclaré mon pointeur comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class CMyListBox : public CListBox
    {
    public :
    	CEdit * Edit;
    Mais dans le InitDialog je ne vois pas comment se passe l'initialisation, il aime pas trop mon :

    CMyListBox::Edit = m_CtlEdit;

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    salut Charles (ou Marilyn?),

    ton m_CtlEdit est un pointeur? S'il n'en est pas un, il faut faire:
    CMyListBox::Edit = &m_CtlEdit;

    P.S: peut-être as-tu modifié les noms pour le post, mais je te déconseille fortement d'utiliser un nom de variable tel 'Edit'. Utilise plutot m_eEdit, quelque chose comme ça. En effet, Visual est une usine à gaz assez monstrueuse, et des tas de classes et autres variables sont utilisées en 'sous-marins' dans nos programmes.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 54
    Points
    54
    Par défaut
    Merci de plus j'avais réalisé une autre erreur de newbie :

    Donc dans le InitDialog() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_CtlList.m_Edit = &m_CtlEdit;
    et la méthode d'insertion donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CMyListBox::OnMenuinserer()
    {
    	CString str;
    	m_Edit->GetWindowText(str);
    	AddString(str);
     
    }

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

Discussions similaires

  1. [MFC] WS_TABSTOP entre CDialog imbriquée
    Par CroustRyu dans le forum MFC
    Réponses: 25
    Dernier message: 30/05/2007, 10h34
  2. [MFC] différence entre CView et CDialog?
    Par r0d dans le forum MFC
    Réponses: 3
    Dernier message: 22/02/2005, 16h23
  3. [MFC] communication entre onglets d'une fenêtre
    Par bigboomshakala dans le forum MFC
    Réponses: 12
    Dernier message: 29/05/2004, 12h12
  4. Réponses: 4
    Dernier message: 23/05/2004, 17h14
  5. Réponses: 6
    Dernier message: 28/02/2004, 09h19

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