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 erreurJe ne vois pas d'o� peut venir le probl�me.
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."
Dans la fonction OnOpen() de monprogdoc.cpp appel�e par fichier->ouvrir
j'ouvre la fen�tre splitt�e comme ceci :
voici la fonction EkCreateNewWindow :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 EkCreateNewWindow( ((CmonprogApp*) AfxGetApp())->m_ptFormView, this );
dans monprog.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 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; }
et dans splitter.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));
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 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;
Partager