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 :

Ajouter un CDockPane Personnalisé dans une application MDI


Sujet :

MFC

  1. #1
    cedrix57
    Invité(e)
    Par défaut Ajouter un CDockPane Personnalisé dans une application MDI
    Bonjour,

    Je débute avec les MFC et j'essai de comprendre comment la CMainFrame avec une architecture MDI fonctionne. J'utilise Microsoft Visual Studio 2010 et je suis parti d'une application MFC mdi sans ruban.
    Pour le moment j'essai d'ajouté mon propre DockPane qui affichera quelques CStatic et CEdit. Mais je n'arrive même pas à ajouté un CEdit. Voici mon code :

    ResultatView.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
    #pragma once
     
     
    // ResultatView
     
    class ResultatView : public CDockablePane
    {
    	DECLARE_DYNAMIC(ResultatView)
     
    public:
    	ResultatView();
    	virtual ~ResultatView();
     
    	void AdjustLayout();
    	void OnChangeVisualStyle();
    	virtual BOOL PreTranslateMessage(MSG* pMsg);
     
     
    protected:
      CStatic text01;
    	void FillClassView();
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	afx_msg void OnSize(UINT nType, int cx, int cy);
    	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
    	afx_msg void OnClassAddMemberFunction();
    	afx_msg void OnClassAddMemberVariable();
    	afx_msg void OnClassDefinition();
    	afx_msg void OnClassProperties();
    	afx_msg void OnNewFolder();
    	afx_msg void OnPaint();
    	afx_msg void OnSetFocus(CWnd* pOldWnd);
    	afx_msg LRESULT OnChangeActiveTab(WPARAM, LPARAM);
    	afx_msg void OnSort(UINT id);
    	afx_msg void OnUpdateSort(CCmdUI* pCmdUI);
     
    	DECLARE_MESSAGE_MAP()
    };
    ResultatView.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
    // ResultatView.cpp*: fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "testMdi2.h"
    #include "ResultatView.h"
     
     
    // ResultatView
     
    IMPLEMENT_DYNAMIC(ResultatView, CDockablePane)
     
    ResultatView::ResultatView(){
    }
     
    ResultatView::~ResultatView(){
    }
     
    void ResultatView::AdjustLayout(){
    	if (GetSafeHwnd() == NULL)
    	{
    		return;
    	}
      //Ici par exemple je peux ajuster mes widget conteneur en fonction d'évennement de déplacements
    }
    void ResultatView::OnChangeVisualStyle(){
      //On verra plus tard. Je pense que cela concerne si l'utilisateur change le style de l'application
    }
    BOOL ResultatView::PreTranslateMessage(MSG* pMsg){
    	return CDockablePane::PreTranslateMessage(pMsg);
    }
     
     
    void ResultatView::FillClassView(){
    }
     
     
    int ResultatView::OnCreate(LPCREATESTRUCT lpCreateStruct){
    	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
    		return -1;
      //TODO ici j'ajoute des trucs comme des labels etc...
    	CRect rectDummy(10,10,150,50);
    	//rectDummy.SetRectEmpty();
      //rectDummy.right = 50;
      //rectDummy.top = 10;
    	const DWORD dwViewStyle = WS_CHILD|WS_VISIBLE|SS_CENTER;
      this->text01.Create(CString(_T("label 01")), dwViewStyle, rectDummy, this);
      return 0;
    }
     
    void ResultatView::OnSize(UINT nType, int cx, int cy){
    	CDockablePane::OnSize(nType, cx, cy);
    	AdjustLayout();
    }
    void ResultatView::OnContextMenu(CWnd* pWnd, CPoint point){
      //Quand on clique dessus je pense
    }
    void ResultatView::OnClassAddMemberFunction(){
    	AfxMessageBox(_T("Ajouter une fonction membre..."));
    }
    void ResultatView::OnClassAddMemberVariable(){
    }
    void ResultatView::OnClassDefinition(){
    }
    void ResultatView::OnClassProperties(){
    }
    void ResultatView::OnNewFolder(){
    	AfxMessageBox(_T("Nouveau dossier..."));
    }
    void ResultatView::OnPaint(){
      //Pas compris
    	CPaintDC dc(this); // contexte de périphérique pour la peinture
     
    	CRect rectTree;
      this->text01.GetWindowRect(rectTree);
    	ScreenToClient(rectTree);
     
    	rectTree.InflateRect(1, 1);
    	dc.Draw3dRect(rectTree, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DSHADOW));
    }
    void ResultatView::OnSetFocus(CWnd* pOldWnd){
    	CDockablePane::OnSetFocus(pOldWnd);
      //Par exemple on peut mettre le focus sur le widget principal
    }
    //LRESULT ResultatView::OnChangeActiveTab(WPARAM, LPARAM){
    //}
    void ResultatView::OnSort(UINT id){
      //Moi j'ai rien a trier
    }
    void ResultatView::OnUpdateSort(CCmdUI* pCmdUI){
      //Moi j'ai rien a trier
    }
     
    BEGIN_MESSAGE_MAP(ResultatView, CDockablePane)
    END_MESSAGE_MAP()
     
     
     
    // Gestionnaires de messages de ResultatView
    Je ne suis pas trop sûr de la manière dont se créé un CStatic, ainsi que de comment écrire la fonction OnPaint.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    Est-ce que tu as géré la création de ta boite dans CMainFrame ?

    Si tu veux faire une boite de dialogue dockable utilise les CPaneDialog.
    Tu crée une boite de dialogue (sans bord) dans les ressources, tu places tous tes controles et tu crées la classe associé en type CDialogEx.
    Après il suffit de changer la classe CDialogEx en CPaneDialog.
    Il faut modifier le OnInitDialog qui devient HandleInitDialog.

Discussions similaires

  1. Changer l'arrière plan des forms dans une application MDI
    Par zentaf dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 06/04/2007, 12h39
  2. Comment fermer une fenêtre Child dans une application MDI
    Par bahiatoon dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/10/2006, 08h57
  3. Réponses: 11
    Dernier message: 06/12/2005, 08h23
  4. Réponses: 4
    Dernier message: 14/02/2005, 19h41

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