[MFC] Problème avec un splitter
Bonjour,
J'ai une application MFC : lorsque je fais fichier -> ouvrir, cela ouvre une formview et une view séparées par un splitter.
Jusque là tout va bien, mais quand je ferme juste cette fenêtre (pas la mainframe principale) et que je refais fichier -> ouvrir, j'ai une belle erreur
Code:
1 2
| " monprog.exe a rencontré un problème et doit fermer.
Nous vous prions de nous excuser pour le désagrément encouru." |
Je ne vois pas d'où peut venir le problème.
Dans la fonction OnOpen() de monprogdoc.cpp appelée par fichier->ouvrir
j'ouvre la fenêtre splittée comme ceci :
Code:
1 2
|
EkCreateNewWindow( ((CmonprogApp*) AfxGetApp())->m_ptFormView, this ); |
voici la fonction EkCreateNewWindow :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
CFrameWnd* EkCreateNewWindow( CDocTemplate* pTemplate,
CDocument* pDocument )
{
ASSERT_VALID( pTemplate );
ASSERT_VALID( pDocument );
// 1 - Create the new frame window
// (will in turn create the associated view)
CFrameWnd* pFrame = pTemplate->CreateNewFrame(
pDocument, NULL );
if( pFrame == NULL )
{
// Window creation failed
TRACE0( "Warning: failed to create new frame.\n" );
return NULL;
}
ASSERT_KINDOF( CFrameWnd, pFrame );
// 2 - Tell the frame to update itself
// (and its child windows)
pTemplate->InitialUpdateFrame( pFrame, pDocument );
// 3 - Return a pointer to the new frame window object
return pFrame;
} |
dans monprog.cpp :
Code:
1 2 3 4 5 6
| m_ptFormView = new CMultiDocTemplate(
IDR_MESSAGE,//MAINFRAME,
RUNTIME_CLASS(CmonprogDoc),
// RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CSplitter),
RUNTIME_CLASS(CMessage)); |
et dans splitter.cpp
Code:
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
|
if (!m_wndSplitter.CreateStatic(this, 1, 2))
// Création dun splitter 1 ligne, 2 colonnes
{
TRACE0("Failed to CreateStaticSplitter\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMessage), CSize(550, 0), pContext))
// CSize(300,0) : Positionnement du séparateur
// CreateView (0, 0 : Ajout du premier panneau du splitter
// (la vue par defaut est en colonne 0)
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CmonprogView), CSize(0, 0), pContext))
// CreateView (0, 1 : Ajout du deuxième panneau du splitter colonne 1
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
SetActiveView((CView*)m_wndSplitter.GetPane(0,1));
// rendre la vue active
return TRUE; |