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
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
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
 
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) ;
 
 
}
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
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()
};
le Ifo.cpp est celui généré par l'assistant

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