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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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