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 :

CXTabCtrl accès a la dialogue parent


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut CXTabCtrl accès a la dialogue parent
    Bonjour à tous !

    Je reviens à la charge avec le CXTabCtrl!
    J'expose mon Problème:

    J'ai une dialogue principale qui contient un tabcontrol de type CXTabcontrol.
    Dans ce tab control il 'y 4 dialogues (4 onglets) chaque dialogue a sa propre classe.
    Je souhaiterais à partir de ces dialogues (onglets) utiliser des fonctions de la dialogue principale (celle qui contient le TabControl)!!
    Est ce possible et si oui, comment puis je procéder???

    Merci d'avance de votre aide
    Kemanke

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Personne pour m'aider?
    Suis je pas clair, dois je reformuler ma question?

    Merci d'avance
    Kemanke

  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
    Par défaut
    j'ai déjà repondu x fois à ce probléme ...
    il faut utiliser GetParent().
    GetParent() dans un onglet donne le pointeur sur le tabCtrl.
    le parent du tabctrl c'est la dialogue.
    donc deux GetParent() successif donne le pointeur sur la dialogue.
    on peut aussi stocker dans chaque onglet un pointeur sur la dialogue mére au moment du create de l'onglet .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Je sais que tu as déjà répondu x fois à cette question Farscape et je m'en excuses mais lorsque je fais dans mon onglet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->GetParent()->GetParent()
    donc deux GeParent() Successifs je n'arrive pas à atteindre les fonction de la boite de dialogue contenant mon tabcontrol!

    Alors ai je bien compris ce que tu m'as expliqué ou alors pas du tout?

    Merci beaucoup

  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
    Par défaut
    il faut caster le retour sur le nom de la classe de la dialogue ....

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Je ne suis pas sur de comprendre???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAppDlg* pApp = (CAppDlg *)this->GetParent()->GetParent();
    dans mon dialogue onglet?

  7. #7
    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
    Par défaut
    si c'est ta classe dialogue oui mais en prenant un peu plus de precautions...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CXTabCtrl *pTab=static_cast<CXTabCtrl *>(this->GetParent());
    CAppDlg* pApp = NULL;
    if(pTab) pApp = static_cast<CAppDlg *>(pTab->GetParent());

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    le Problème est que si j'inclus le header de mon dialogue onglet dans dans mon dialogue principale (vu qu'il faut bien créer l'onglet en question) et ensuite si j'inclus le header de mon dialogue principale dans mon dialogue onglet, il y a des erreurs et ce qui compréhensible!

    Tu as une idée?

    Merci du temps que tu me consacres!
    Kemanke

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Sinon tu as dit:

    on peut aussi stocker dans chaque onglet un pointeur sur la dialogue mére au moment du create de l'onglet .
    comment puis je faire cela? peut etre, est ce la solution?

    Merci encore.

  10. #10
    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
    Par défaut
    Citation Envoyé par Kemanke
    le Problème est que si j'inclus le header de mon dialogue onglet dans dans mon dialogue principale (vu qu'il faut bien créer l'onglet en question) et ensuite si j'inclus le header de mon dialogue principale dans mon dialogue onglet, il y a des erreurs et ce qui compréhensible!

    Tu as une idée?

    Merci du temps que tu me consacres!
    Kemanke
    ça ne doit pas causer de problémes ,il faut juste faire attention à l'ordre des includes.
    il faut mettre l'include de la boite de dialogue et de ses dépendances dans le source des autres onglets .

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Si ça pose problème:

    J'ai ma dialogue Principale: CAppDlg (AppDlg.h et .cpp)
    J'ai ma dialogue Onglet: CBase (Base.h et .cpp)

    Si dans AppDlg.h je met #include "Base.h"
    et Si je met dans Base.h #include "AppDlg.h"

    J'ai une erreur à la compilation...
    Peut être que maintenant j'ai omis quelque chose:

    Dans AppDlg.h

    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
    #pragma once
    #include "afxwin.h"
    #include "afxcmn.h"
    #include "TabControl\XTabCtrl.h"
    #include "Base.h"
    #include "Divers\Picture.h"
     
    class CAppDlg : public CTplDlgColor<CDialog>
    {
    //____________________________
    // Données membres de classe
    public:
    	CAppDlg(CWnd* pParent = NULL);	// constructeur standard
     
    	enum { IDD = IDD_APPSPEEDTRUCK_DIALOG };
     
    	//Controls du dialogue
    	CXTabCtrl m_tabctrl;
     
    	//
    	CFont m_fontTabCtrl;
    	CImageList m_imagelistTab;
    	CPicture m_picture;
     
     
    	CBase* m_pBase;
     
    //____________________________
    // Fonctions membres de classe
    protected:
     
    	virtual void DoDataExchange(CDataExchange* pDX);	// prise en charge de DDX/DDV
    	virtual BOOL OnInitDialog();
     
    	//Fonctions générées de la table des messages
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	virtual void OnOK();
     
    	DECLARE_MESSAGE_MAP()
     
    public:
     
    	afx_msg void OnDestroy();
     
    	afx_msg void OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult);
     
    };
    et ensuite Base.h:

    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
    #pragma once
    #include "AppDlg.h"
    #include "TabControl\XTabCtrl.h"
     
    class CBase : public CTplDlgColor<CDialog>
    {
    	//DECLARE_DYNAMIC(CBase)
     
    public:
    	CBase(CWnd* pParent = NULL);   // constructeur standard
    	virtual ~CBase();
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_BASE };
    	CXTabCtrl* m_pTab;
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
    	virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
     
    	DECLARE_MESSAGE_MAP()
    public:
    	virtual BOOL OnInitDialog();
    	virtual void OnDestroy();
     
    	virtual void OnOK();
    	virtual void OnCancel();
     
    };
    Merci d'avance
    Kemanke

  12. #12
    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
    Par défaut
    vu comme ça c'est sûr que ça va causer problèmes ...
    vire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "afxwin.h"
    #include "afxcmn.h"
    #include "TabControl\XTabCtrl.h"
    

    de
    AppDlg.h et met les lignes dans stdafx.h ,tu ne devrais pas avoir
    de afxwin.h ou afxcmn.h dans un include d'application..
    dans base.h tu ne devrais pas avoir besoin de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "AppDlg.h"
    #include "TabControl\XTabCtrl.h"
    par contre tu dois rajouter dans base.cpp


    Note :par rapport a ton pb precedent au cas ou tu ne l'aurais pas remarqué dans mon exemple et dans ta classe onglet un pointeur sur le tabcontrol est initialisé .
    pour retrouver la dialogue il suffit de faire dans l'onglet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CAppDlg *pApp=static_cast<CAppDlg *>(m_pTab->GetParent());

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    J'ai fait ce que tu m'as indiqué de faire:


    AppDlg.h
    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
    #pragma once
    #include "Base.h"
     
     
    class CAppDlg : public CTplDlgColor<CDialog>
    {
    //____________________________
    // Données membres de classe
    public:
    	CAppDlg(CWnd* pParent = NULL);	// constructeur standard
     
    	enum { IDD = IDD_APPSPEEDTRUCK_DIALOG };
     
    	//Controls du dialogue
    	CXTabCtrl m_tabctrl;
     
    	//Aggrégation
    	CBase* m_pBase;
    //____________________________
    // Fonctions membres de classe
    ...
     
    	DECLARE_MESSAGE_MAP()
    ...
     
    };
    et dans Base.h:

    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
    #pragma once
    #include "AppDlg.h"
     
    class CBase : public CTplDlgColor<CDialog>
    {
    	//DECLARE_DYNAMIC(CBase)
     
    public:
    	CBase(CWnd* pParent = NULL);   // constructeur standard
    	virtual ~CBase();
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_BASE };
    	CXTabCtrl* m_pTab;
     
    ...
     
    	DECLARE_MESSAGE_MAP()
    ...
    };
    et J'ai comme erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	error C2143: erreur de syntaxe*: absence de ';' avant '*'
    Cette erreur pointe sur CBase* m_pBase; dans AppDlg.h

    Merci de ton aide

  14. #14
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Citation Envoyé par farscape
    met les lignes dans stdafx.h ,tu ne devrais pas avoir
    de afxwin.h ou afxcmn.h dans un include d'application.
    Farscape, pourquoi faut-il ne pas inclure afxwin.h et afxcmn.h dans une appli ?

  15. #15
    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
    Par défaut
    parce que habituellement dans une applie MFC c'est dans stdafx.h que ces includes sont générés ,il est alors inutile de se générer des temps de compilation plus long et des problèmes en les ajoutant dans d'autres .h de l'application...

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Toujours pas d'explication à mon problème alors ?

  17. #17
    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
    Par défaut
    tu n'as pas fait ce que j'ai dis ...
    tu as toujours un #include "AppDlg.h" qui traine dans base.h
    Citation Envoyé par farscape
    dans base.h tu ne devrais pas avoir besoin de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "AppDlg.h"
    #include "TabControl\XTabCtrl.h"
    par contre tu dois rajouter dans base.cpp


  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Autant pour moi Farscape, j'avais mal lu!!!
    Je vais essayer tout cela.

    Je te remercie de tout le tps que tu as passé à répondre à mes questions!!!

    Merci beaucoup
    Kemanke

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

Discussions similaires

  1. Accès aux variables du pom parent
    Par DanielW33 dans le forum Maven
    Réponses: 14
    Dernier message: 30/12/2011, 16h23
  2. Interdire l'accès au dossier parent
    Par Maurice Fallou dans le forum Administration
    Réponses: 5
    Dernier message: 26/02/2009, 13h33
  3. Accés aux méthodes de la boite dialogue parent
    Par Soronite dans le forum MFC
    Réponses: 6
    Dernier message: 04/03/2007, 20h29
  4. [Système] Accès methode parent
    Par vince1415 dans le forum Langage
    Réponses: 8
    Dernier message: 21/06/2006, 10h24
  5. acces à la Bd situee dans le dossier parent
    Par trialrofr dans le forum ASP
    Réponses: 4
    Dernier message: 04/01/2005, 17h37

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