Bonjour
J'ai bien cherché sur le forum ( et pas que celui la...) et je ne comprend pas.
J'essaye de faire une chose simple : à partir d'un boutton, faire apparaitre une boite de dialogue non-modale mais de la forme CFormView.
J'ai crée dans les ressources une boite de dialogue du genre IDD_PROPPAGE_MEDIUM.
Puis avec l'assistant de classe, je définis sa classe : CIfo de type CFormView
Je renomme l'IDD de la boite : IDD_IFO ( pour faire plus simple )
Je rajoute l'include de Ifo.h dans mon programme de base ( BaseView.h )
Et c'est là que tout se corse :
J'ai essayé Create puis ShowWindow et j'ai un probleme d'assertion ce qui me semble normal vu la façon dont j'ai écrit mon Create ( de façon très hasardeuse...)
Je vous met le code :
BaseView.h
BaseView.cpp ( seulement les parties que j'ai touché )
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 #include "Ifo.h" #pragma once class CBaseView : public CFormView { protected: // création à partir de la sérialisation uniquement CBaseView(); DECLARE_DYNCREATE(CBaseView) public: enum{ IDD = IDD_BASE_FORM }; // Attributs public: CBaseDoc* GetDocument() const; CWnd * m_ifownd ; // Opérations public: // Substitutions public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void DoDataExchange(CDataExchange* pDX); // Prise en charge de DDX/DDV virtual void OnInitialUpdate(); // premier appel après la construction // Implémentation public: virtual ~CBaseView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Fonctions générées de la table des messages protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton1(); }; #ifndef _DEBUG // version de débogage dans BaseView.cpp inline CBaseDoc* CBaseView::GetDocument() const { return reinterpret_cast<CBaseDoc*>(m_pDocument); } #endif
Ifo.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 void CBaseView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_ifownd = new CWnd ; m_ifownd->CreateEx(WS_EX_NOPARENTNOTIFY , //J'ai essayé plusieurs arguments sans succes. _T("STATIC"), _T("Hi"), WS_DISABLED , CRect(0,0,100,100),this, IDD_IFO); ... void CBaseView::OnBnClickedButton1() { // TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle m_ifownd->ShowWindow(TRUE) ; }
le Ifo.cpp est celui généré par l'assistant
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 #pragma once // Mode formulaire CIfo class CIfo : public CFormView { DECLARE_DYNCREATE(CIfo) protected: CIfo(); // constructeur protégé utilisé par la création dynamique virtual ~CIfo(); public: enum { IDD = IDD_IFO }; #ifdef _DEBUG virtual void AssertValid() const; #ifndef _WIN32_WCE virtual void Dump(CDumpContext& dc) const; #endif #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // Prise en charge de DDX/DDV DECLARE_MESSAGE_MAP() };
Précision : je suis sous Visual Studio 2005 Standard et Winxp projet SDI avec Doc/Vue. Je veux faire une boite de dialog de type CFormView car ça à l'air plus facil pour dessiner des graphs dedans ( grace au CDC ).
J'ai réussi jusque là à avancer sans poser de questions ( Merci Farscape pour votre tuto sur les MFC ), mais là j'ai besoin d'aide.
Je vous remercie d'avoir prit le temps de me lire et je vous serai très reconnaissant si vous pouviez me répondre ou me guider.
Je m'excuse pour mon orthographe pas très au point.
Bonne journée.
la prochaine fois pense à mettre la balise de code Merci,Farscape
Partager