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]gestion du reflected control de classes encapsulées


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Points : 28
    Points
    28
    Par défaut [MFC]gestion du reflected control de classes encapsulées
    Bonjour,

    Je suis débutant MFC et après avoir parcouru la FAQ (j'ai peut-être raté qqchose) je n'ai pas trouvé de réponse à mon problème.
    J'ai une boîte de dialogue. Dans le classWizard, je crée une nouvelle classe CMonBouton basée sur CButton. Toujours dans le classWizard, j'ajoute une fonction OnMonBoutonClic de type "=BN_CLICKED" (reflected control). Dans le programme de ma boîte de dialogue, j'instancie un ou plusieurs boutons basés sur CMonBouton et je les affiche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CMonBouton *ptrMonBouton=new CMonBouton();
    ptrMonBouton->Create(_T("Bouton"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(ptrPosBouton[m_indexBouton]->left,ptrPosBouton[m_indexBouton]->top,ptrPosBouton[m_indexBouton]->right,ptrPosBouton[m_indexBouton]->bottom), this, m_indexBouton);
    m_indexBouton++;
    tout marche correctement, lorsque je clique sur l'un des boutons, j'active bien le CMonBouton::OnMonBoutonClic pour l'objet correspondant. A ce stade comment faire pour activer une méthode personnalisée (pas prise en charge dans CDialog) de la boîte de dialog parent, comment lui redonner la main en fait?
    J'ai lu les TN062 et TN061 de la msdn sur les "message reflection" mais c'est un peu confus dans ma tête... j'aimerais renvoyer une notification à ma boîte de dialogue Parent avec un paramètre (notamment l'index du bouton), j'ai essayé de manipuler SendNotifyMessage du côté de mon bouton et de gérer le OnNotify du côté boîte de dialogue sans succès.
    J'ai l'impression d'essayer de faire qqchose d'extrêmement simple pourtant

    A défaut d'y répondre, merci d'avoir lu la question

  2. #2
    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
    pourquoi ne crées-tu pas une methode dans ta boite de dialog qui sera appelée dans ta methode onButtonClic()?

  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 si ce que tu nommes par la dialog parent est bien au sens windows son parent,
    il suffit de faire dans cette fonction :
    GetParent() à caster avec le nom de la classe parent et appeler la fonction concernée ..

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Points : 28
    Points
    28
    Par défaut
    D'abord, merci pour ces réponses !

    pourquoi ne crées-tu pas une methode dans ta boite de dialog qui sera appelée dans ta methode onButtonClic()?
    mon bouton n'existe pas encore, il n'y a pas d'IDs d'objets associés à mon bouton dans les identités d'objets de ma boîte de dialogue.
    Ma méthode onMonBoutonClic est définie en dehors de ma classe liée à la boîte de dialogue, donc je ne peux appeler directement la méthode perso de ma boîte de dialogue.

    salut si ce que tu nommes par la dialog parent est bien au sens windows son parent,
    il suffit de faire dans cette fonction :
    GetParent() à caster avec le nom de la classe parent et appeler la fonction concernée ..
    GetParent()-> me donne accès aux méthodes standards d'une CWnd. Caster avec le nom de la classe ?

    J'ai quand même réussi à faire ce que je voulais en ajoutant dans le constructeur du bouton, un pointeur pointant sur la boîte de dialogue "personnalisée" (avec des membres/méthodes en plus) parente (au sens windows).

    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
    #include "DlgPerso.h"
     
    // MonBouton.h : header file
    //
     
    /////////////////////////////////////////////////////////////////////////////
    // CMonBouton window
     
    class CMonBouton : public CButton
    {
    // Construction
    public:
    	CMonBouton(class CDlgPerso *);
     
    // Attributes
    public:
    	class CDlgPerso *ptrDlgParent;
    le .cpp

    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
    /////////////////////////////////////////////////////////////////////////////
    // CMonBouton
     
    CMonBouton::CMonBouton(CDlgPerso *ptr)
    {
    	ptrDlgParent=ptr;
    }
     
    CMonBouton::~CMonBouton()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CMonBouton, CButton)
    	//{{AFX_MSG_MAP(CMonBouton)
    	ON_CONTROL_REFLECT(BN_CLICKED, OnMonBoutonClic)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CMonBouton message handlers
     
    void CMonBouton::OnMonBoutonClic() 
    {
    	// TODO: Add your control notification handler code here
    	ptrDlgParent->methodePerso();
     
    }
    Mais il me semble quand même qu'il doit y avoir un moyen de notifier la CWnd parent, ensuite de récupérer cette notification et en fonction des paramètres de rediriger vers une méthode perso de la boîte de dialogue en l'occurence.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Points : 28
    Points
    28
    Par défaut
    Je mets le tag résolu parce que le problème est réglé mais j'aimerais relancer la question sur les notifications

  6. #6
    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,
    il te faudra expliciter ton probleme plus clairement ,car je ne vois pas trop le probleme avec les messages reflect et le sujet actuel.


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

Discussions similaires

  1. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  2. [MFC] Gestion d'un bus GPIB
    Par angeromudelparis dans le forum MFC
    Réponses: 8
    Dernier message: 04/10/2005, 12h25
  3. Réponses: 7
    Dernier message: 05/08/2004, 14h55
  4. (MFC) Redimensionner une List Control auto / Boite Dlg
    Par Guybrush113 dans le forum MFC
    Réponses: 7
    Dernier message: 23/04/2004, 09h24
  5. [MFC]gestion du controle MaskedEdit
    Par dj_kyl dans le forum MFC
    Réponses: 2
    Dernier message: 27/11/2003, 19h58

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