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] Controler les splitter


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [MFC] Controler les splitter
    Salut,

    J'utilise les splitters pour avoir dans ma fenetre une vue et un formulaire. J'aimerai bloquer la barre du splitter (qu'on ne puisse pas la deplacer avec la souris) et réduire son épaisseur.

    Merci.

    Toune

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    pour bloquer le splitter :
    il faut faire une classe derivée de CSplitterWnd et surchargée la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class CSplitterWndEx : public CSplitterWnd
    {
    // Construction
    public:
    	CSplitterWndEx();
     
    // Attributes
    public:
    	virtual void StartTracking(int ht){return ;}
    pour l'epaisseur je ne suis pas sur que ce soit possible directement il faudra certainement reprendre la main sur le dessin voir OnDrawSplitter .

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Salut,

    Le blocage de la barre du splitter marche mais on a toujours le changement du curseur de la souris indiquant la possibilité de déplacer cette barre (donc c'est pas terrible). Pour le changement d'épaisseur de la barre j'ai regardé comme tu as dis OnDrawSplitter mais ça pose des problèmes d'affichages et au mieux j'arrive a effacer la barre ou à garder la même épaisseur (donc encore pas terrible).

    J'aimerai donc savoir si il y a un autre moyen (que les splitter) pour pouvoir créer une interface ayant une partie vue (view) et une autre partie formulaire (form).

    Merci.

    Toune.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    tu baisses bien vite les bras
    pour le splitter fin essaye de mettre ça dans le constructeur de la nouvelle classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    m_cxSplitter=PANE_BORDER;     // = 1
    m_cySplitter=PANE_BORDER;     // = 1
    m_cxBorderShare=PANE_SHARE;   // = 0
    m_cyBorderShare=PANE_SHARE;   // = 0
    m_cxSplitterGap=PANE_GAP;     // = 1
    m_cySplitterGap=PANE_GAP;     // = 1
    pour le curseur ça doit pas etre dur de le courcircuite .

  5. #5
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    ben il te suffit dans cette classe de surcharger l'évenement OnSetCUrsor:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CTaClasseSplitterWnd::OnSetCursor(pWnd, nHitTest, message)
    {
    	if (!m_bBarLocked)
    		{return CWnd::OnSetCursor(pWnd, nHitTest, message);}
    	return CTaClasseSplitterWnd::OnSetCursor(pWnd, nHitTest, message);
     
    }
    Qui va piano va sano...

  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
    bien la classe definitive:
    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
     
    #define PANE_BORDER 1
    #define PANE_SHARE  0
    #define PANE_GAP 1
     
    class CSplitterWndEx : public CSplitterWnd
    {
    // Construction
    public:
       CSplitterWndEx()
       {
           m_bExTracking=true;
       }
       void SetThinFrame()
       {
            m_cxSplitter=PANE_BORDER;     
            m_cySplitter=PANE_BORDER;     
            m_cxBorderShare=PANE_SHARE;   
            m_cyBorderShare=PANE_SHARE;   
            m_cxSplitterGap=PANE_GAP;     
            m_cySplitterGap=PANE_GAP;   
       }
    // Operations
    public:
        void SetTracking(bool bEnable=true){m_bExTracking=bEnable;}
     
        virtual void StartTracking(int ht)
        {
            if(!m_bExTracking) return ;
            CSplitterWnd::StartTracking(ht);
        } 
       // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CSplitterWndEx)
    	public:	
    	//}}AFX_VIRTUAL
     
    // Attributes
    public:
     
    bool m_bExTracking;
     
    // Generated message map functions
    protected:
    	//{{AFX_MSG(CSplitterWndEx)	
    	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
    	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    // .cpp
    BEGIN_MESSAGE_MAP(CSplitterWndEx, CSplitterWnd)
    	//{{AFX_MSG_MAP(CSplitterWndEx)
    	ON_WM_SETCURSOR()
    	ON_WM_MOUSEMOVE()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    //-------------------------------------------------
    BOOL CSplitterWndEx::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
    {
    	// TODO: Add your message handler code here and/or call default
        if(!m_bExTracking) return FALSE;
    	return CSplitterWnd::OnSetCursor(pWnd, nHitTest, message);
    }
    //---------------------------------------
    void CSplitterWndEx::OnMouseMove(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	if(!m_bExTracking) return ;
    	CSplitterWnd::OnMouseMove(nFlags, point);
    }
    utilisation dans CMainFrame:
    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
     
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
        // TODO: Add your specialized code here and/or call the base class
        m_wndSplitter.SetThinFrame(); // bordure fine
        m_wndSplitter.SetTracking(false);// pas de tracking.
    	if (!m_wndSplitter.CreateStatic(this, 1, 2))
    		return FALSE;
     
    	if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSdiSplitterView), CSize(100, 100), pContext) ||
    		!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyFormView), CSize(100, 100), pContext))
    	{
    		m_wndSplitter.DestroyWindow();
    		return FALSE;
    	}
    	return TRUE;
    }

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci

    Ca marche bien et c'est propre!!

    Toune

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/12/2005, 10h43
  2. [mfc]control
    Par marseillais57 dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 11h32
  3. [mfc] controle de la souris
    Par arno2004 dans le forum MFC
    Réponses: 4
    Dernier message: 27/04/2004, 15h22
  4. Réponses: 6
    Dernier message: 04/01/2004, 20h59
  5. [MFC]Calculer les FPS
    Par inerti@ dans le forum MFC
    Réponses: 6
    Dernier message: 19/03/2003, 18h22

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