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]Pointeur sur Dialog


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut [MFC]Pointeur sur Dialog
    Est il possible de retrouver un pointeur sur une dialog a partir de son identifiant??

    J'essaye de faire un peu comme dans le topic précédent (http://www.developpez.net/forums/viewtopic.php?t=358214), mais cette fois je veux récupérer le pointeur sur un panneau d'un tabcontrol à partir d'un autre panneau. Je ne vois pas d'autre manière de procéder que de partir de l'identifiant du panneau dont on cherche le pointeur...

    Encore une question compliquée !??!

  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
    Par défaut
    salut,
    le point commun de tous les panneaux c'est le tabcontrol.
    pour recuperer un panneau par son index (nNoPane):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
           TCITEM item;
            CWnd* pWnd;
    	item.mask = TCIF_PARAM;
     
    	GetItem(nNoPane, &item);
    	pWnd = reinterpret_cast<CWnd*> (item.lParam);
    	ASSERT_VALID(pWnd);
    au fait GetParent( ) sur le panneau doit renvoyer le tabControl.

    pour que ça fonctionne il faudra sur l'ajout d'un panneau
    affecter le pointeur du panneau dans lparam ....
    avant de faire InsertItem.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    item.lParam = (LPARAM) pWnd;

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    resalut
    J'ai un petit problème de compréhension, en m'inspirant d'un exemple trouvé sur le net, j'ai créé une classe qui dérive de CTabCtrl. A quoi correspond TCITEM item, je n'utilise pas cette structure pour remplir mon tabctrl...

    Je te mets les fichiers correspondant pour que tu puisses comprendre comment j'ai fait

    fichier .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
    // CMyTabCtrl window
     
    class CMyTabCtrl : public CTabCtrl
    {
    // Construction
    public:
    	CMyTabCtrl();
     
    // Attributes
    public:
    	int m_DialogID[3];
    	CDialog *m_Dialog[3];
     
    	int m_nPageCount;
     
    	void ActivateTabDialogs(int pSel);
    	void InitDialogs();
     
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CMyTabCtrl)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CMyTabCtrl();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CMyTabCtrl)
    	afx_msg void OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult);
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    };

    fichier .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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    /////////////////////////////////////////////////////////////////////////////
    // CMyTabCtrl
     
    CMyTabCtrl::CMyTabCtrl()
    {
    	m_DialogID[0] = IDD_SERVER;
    	m_DialogID[1] = IDD_RENDERSET;
    	m_DialogID[2] = IDD_JOBQUEUE;
     
     
    	m_Dialog[0] = new CServerDlg();
    	m_Dialog[1] = new CRenderSetDlg();
    	m_Dialog[2] = new CJobQueueDlg();
     
    	m_nPageCount = 3;
     
    }
     
    CMyTabCtrl::~CMyTabCtrl()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
    	//{{AFX_MSG_MAP(CMyTabCtrl)
    	ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchangeTab)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CMyTabCtrl message handlers
     
    //This function creates the Dialog boxes once
    void CMyTabCtrl::InitDialogs()
    {
    m_Dialog[0]->Create(m_DialogID[0],GetParent());
    m_Dialog[1]->Create(m_DialogID[1],GetParent());
    m_Dialog[2]->Create(m_DialogID[2],GetParent());
    }
     
    //Selection change event for the class derived from CTabCtrl
    void CMyTabCtrl::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
    {
       int nSel = GetCurSel();
       ActivateTabDialogs(nSel);
       *pResult = 0;
    }
     
    void CMyTabCtrl::ActivateTabDialogs(int pSel)
    {
     // int nSel = GetCurSel();
      if(m_Dialog[pSel]->m_hWnd)
         m_Dialog[pSel]->ShowWindow(SW_HIDE);
     
      CRect l_rectClient;
      CRect l_rectWnd;
     
      GetClientRect(l_rectClient);
      AdjustRect(FALSE,l_rectClient);
      GetWindowRect(l_rectWnd);
      GetParent()->ScreenToClient(l_rectWnd);
      l_rectClient.OffsetRect(l_rectWnd.left,l_rectWnd.top);
     
      for(int nCount=0; nCount < m_nPageCount; nCount++){
         m_Dialog[nCount]->SetWindowPos(&wndTop, l_rectClient.left, l_rectClient.top, l_rectClient.Width(), l_rectClient.Height(), SWP_HIDEWINDOW);
      }
      m_Dialog[pSel]->SetWindowPos(&wndTop, l_rectClient.left, l_rectClient.top, l_rectClient.Width(), l_rectClient.Height(), SWP_SHOWWINDOW);
     
      m_Dialog[pSel]->ShowWindow(SW_SHOW);
    }

    Initialisation du TabCtrl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     m_tabCtrl.InitDialogs();
     
    	m_tabCtrl.InsertItem(0, "   tab1   ", 0);
    	m_tabCtrl.InsertItem(1, "   tab2   ", 1);
    	m_tabCtrl.InsertItem(2, "   tab3   ", 2);
     
     
        m_tabCtrl.ActivateTabDialogs(0);

  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
    Par défaut
    et bien d'apres ton code tu peux faire encore plus simple vu que tu disposes d'un tableau des dialogues m_Dialog .
    une fois que tu as recuperer le pointeur sur le tabcontrol avec GetParent()
    tu n'as plus qu'a utiliser le tableau pour acceder aux differents onglets .

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Ok merci ca marche

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/07/2007, 11h12
  2. Passage de pointeur de dialog MFC
    Par mr.saucisse dans le forum MFC
    Réponses: 7
    Dernier message: 05/02/2006, 13h29
  3. Réponses: 4
    Dernier message: 08/02/2005, 20h47
  4. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  5. [MFC]Info sur da la fusion sous Word
    Par kor dans le forum MFC
    Réponses: 6
    Dernier message: 22/08/2003, 11h14

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