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 : S�lectionner tout - Visualiser dans une fen�tre � part
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 : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
 
EkCreateNewWindow( ((CmonprogApp*) AfxGetApp())->m_ptFormView, this );
voici la fonction EkCreateNewWindow :

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
 
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 : S�lectionner tout - Visualiser dans une fen�tre � part
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 : 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
 
 if (!m_wndSplitter.CreateStatic(this, 1, 2))
  // Création d’un 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;