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 :

Grouper des élements sur un CDialogs


Sujet :

MFC

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut Grouper des élements sur un CDialogs
    Bonjour,

    Je suis habitué à développer sous Delphi et la je bloque sur l'utilisation des GroupBox,
    voila, sous Delphi, j'ai l'habitude d'utiliser des panels et groupbox pour faire des "lots" de composants et afficher ainsi plusieurs écrans différents sur le meme dialog (form en delphi) en jouant sur leurs visibilité,

    j'ai voulu tenter ca avec les groupbox, mais jvois pascomment ils fonctionnent, ils sont transparant et ne semble pas pouvoir contenir d'élément.

    j'aimerai faire qu'ils soient invisible, et qu'ils puissent contenir X composants, que du coup un simple : group1.visible = true fasse afficher.

    est ce possible ?

    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
    Par défaut
    salut,
    ça n'existe pas ,mais c'est possible avec un peu de code:

    par exemple en creant une classe group:
    le header:
    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
     
    #if !defined(AFX_GROUP_H__AD9C45E9_1C19_44A4_B708_698ED49E178B__INCLUDED_)
    #define AFX_GROUP_H__AD9C45E9_1C19_44A4_B708_698ED49E178B__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // Group.h : header file
    //
     
    /////////////////////////////////////////////////////////////////////////////
    // CGroup window
     
    class CGroup : public CButton
    {
    // Construction
    public:
    	CGroup();
     
    // Attributes
    public:
     
    // Operations
    public:
    	// gestion de l'affichage du groupe
    	bool	ShowGroup(int nCmdShow=SW_SHOW);
     
    	// active /desactive un group
    	bool	EnableGroup(BOOL bEnable=TRUE);
     
            // groupe caché ?
    	bool	IsHide();
     
           // group actif ?
    	bool	IsEnable();
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CGroup)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CGroup();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CGroup)
    		// NOTE - the ClassWizard will add and remove member functions here.
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    private:
    	// recupere les identifiants des controles d'un group.
    	bool	GetCtrlOnGroup();
     
    private:
    	CArray<int,int> m_arIdCtrl;
    	CArray<CRect,CRect> m_arRectCtrl;
     
    };
     
    /////////////////////////////////////////////////////////////////////////////
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
     
    #endif // !defined(AFX_GROUP_H__AD9C45E9_1C19_44A4_B708_698ED49E178B__INCLUDED_)
    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
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // CGroup
     
    CGroup::CGroup()
    {
    }
     
    CGroup::~CGroup()
    {
    }
    //----------------------------------------------------------------------
    bool CGroup::ShowGroup(int nCmdShow/*=SW_SHOW   */)
    {
    	if(!GetCtrlOnGroup()) return false;
    	CWnd *pDialog=GetParent();
     
    	for(int i=0;i<m_arIdCtrl.GetSize();i++) pDialog->GetDlgItem(m_arIdCtrl[i])->ShowWindow(nCmdShow);
     
    	return true;
    }
    //----------------------------------------------------------------------
    bool CGroup::EnableGroup(BOOL bEnable/*=TRUE*/)
    {	
    	if(!GetCtrlOnGroup()) return false;
    	CWnd *pDialog=GetParent();
    	for(int i=0;i<m_arIdCtrl.GetSize();i++) pDialog->GetDlgItem(m_arIdCtrl[i])->EnableWindow(bEnable);
    	return true;
    }
    //----------------------------------------------------------------------
    bool CGroup::GetCtrlOnGroup()
    {
    	ASSERT(m_hWnd);
     
    	if(m_arIdCtrl.GetSize()) return true;
     
    	CWnd *pDialog=GetParent();
     
    	CRect rectGrp;
    	GetWindowRect(&rectGrp);
     
    	CWnd *pCtrl=pDialog->GetNextDlgTabItem(this);
     
    	CRect rectCtrl,rectUnion;
    	if(!pCtrl) return false;
     
    	do
    	{
    		pCtrl->GetWindowRect(&rectCtrl);
     
    		if(rectGrp.PtInRect(CPoint(rectCtrl.left,rectCtrl.top)) &&
    		   rectGrp.PtInRect(CPoint(rectCtrl.right,rectCtrl.top)) &&
    		   rectGrp.PtInRect(CPoint(rectCtrl.left,rectCtrl.bottom)) &&
    		   rectGrp.PtInRect(CPoint(rectCtrl.right,rectCtrl.bottom)))		
    		{
    			m_arIdCtrl.Add(pCtrl->GetDlgCtrlID());
    			m_arRectCtrl.Add(rectCtrl);
    		}
    		else break;		
    		pCtrl=pDialog->GetNextDlgTabItem(pCtrl);
    	}
    	while(pCtrl );
     
    	return (m_arIdCtrl.GetSize()>0);
    }
    //---------------------------
    bool CGroup::IsHide()
    {
    	// 
    	if(!GetCtrlOnGroup()) return false;
     
    	int nct=0;
    	CWnd *pDialog=GetParent();
    	for(int i=0;i<m_arIdCtrl.GetSize();i++) 
    		nct+=!(pDialog->GetDlgItem(m_arIdCtrl[i])->IsWindowVisible());
     
    	return(nct==m_arIdCtrl.GetSize());
    }
    //---------------------------
    bool CGroup::IsEnable()
    {
    	// 	
    	if(!GetCtrlOnGroup()) return false;
     
    	int nct=0;
    	CWnd *pDialog=GetParent();
    	for(int i=0;i<m_arIdCtrl.GetSize();i++) 
    		nct+=pDialog->GetDlgItem(m_arIdCtrl[i])->IsWindowEnabled();
     
    	return(nct==m_arIdCtrl.GetSize());
    }
    //---------------------------
     
    BEGIN_MESSAGE_MAP(CGroup, CButton)
    	//{{AFX_MSG_MAP(CGroup)
    		// NOTE - the ClassWizard will add and remove mapping macros here.
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CGroup message handlers
    l'utilisation dans une CFormView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CSampleSDIView::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    	//m_group.ShowGroup(!m_group.IsHide()?SW_HIDE:SW_SHOW);
    	  m_group.EnableGroup(!m_group.IsEnable());
    }
    il suffit de mettre un groupbox dans la ressource d'enlever la proprieté visible .
    de declarer une variable controle dessus en choisissant la classe CGroup.

    Attention aux conditions pour qu’un contrôle fasse partie d’un groupe :
    Le premier contrôle possède le style group et tab stop.
    L’ordre des tab stop doit être réglés au niveau des ressources (tab order).

    a adapter selon ses besoins..

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    c'est fou que cela n'existe pas en c++,

    c'est ingerable du coup sur l'IDE tout les boutons, les un sur les autres

    merci bien en tt cas.

  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
    Citation Envoyé par firejocker
    c'est fou que cela n'existe pas en c++,

    c'est ingerable du coup sur l'IDE tout les boutons, les un sur les autres

    merci bien en tt cas.
    ça n'a rien a voir avec le C++ .
    l'ide VC et les MFC ne sont pas un RAD , par contre on peut tout faire avec mais ça demande un peu d'huile de coude pour constituer sa bibliothèque de méthodes personnelles.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    Une question alors .....


    comment ca marche les tab control ?

    quand un garss developpe son appli avec un tab control,

    comment il fait, tout les controle sont les 1 sur les autres ?

    et il gere l'affichage a la main ?

  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
    Par défaut
    re,
    un panneau du TabCtrl == une dialogue dans les ressources.
    voir cet exemple avec la CXtabCtrl qui simplifie l'utilisation du CTabCtrl:
    http://farscape.developpez.com/Samples/Cxtabctrl.zip


  7. #7
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    Il existe deux classes CProperyPage et CPropertySheet qui
    font office d'onglet ou chaque onglet est une boîte de dialogue.

    C'est relativement facile à gérer.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    Ok, merci, je vais analyser ca

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    jsuis en train de regarder comment ca marche, c'est particulier CXtabCtrl.

    jtrouve pas oou est caché le texte e "TODO : place control here." qui m'apparait sur mes fiches

    vous auriez pas un exemple avec CPropertyPage et CPropertySheet ?

  10. #10
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    Tu as :
    http://www.developpez.net/forums/vie...cpropertysheet

    Par exemple... ou sur MSDN :

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cpropertypage.asp

    Il y a des exemples à la fin...

  11. #11
    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 firejocker
    jsuis en train de regarder comment ca marche, c'est particulier CXtabCtrl.

    jtrouve pas oou est caché le texte e "TODO : place control here." qui m'apparait sur mes fiches

    vous auriez pas un exemple avec CPropertyPage et CPropertySheet ?
    ,tu va dans l'editeur de ressources tu ouvre le dossier dialogues..
    tu trouves les dialogues utilisees pour le tabctrl.

    allez un petit effort

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    ben ca, je les ai deja levé

    je cherche le texte sur tout le projet ... rien ! :/

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/08/2014, 08h25
  2. [XL-2010] Grouper des date sur un TCD
    Par nassiri dans le forum Excel
    Réponses: 5
    Dernier message: 13/10/2013, 08h07
  3. Macro pour grouper des lignes sur une plage qui peut varier
    Par RichRich59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2011, 13h04
  4. Macro pour grouper des lignes sur une plage qui peut varier
    Par girardinho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2010, 09h43
  5. pointeur sur un des élements d'un TQUERY ou d'un TCLIENTDATA
    Par richard038 dans le forum Bases de données
    Réponses: 7
    Dernier message: 30/08/2005, 18h05

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