Witam.
Tworze frame'a ze CSplitterWnd (static) z dwoma roznymi view:
CRect rect;
GetClientRect( &rect );
if ( splitterWnd.CreateStatic (this, 2, 1, WS_CHILD|WS_VISIBLE, AFX_IDW_PANE_FIRST ) ) {
splitterWnd.IdFromRowCol( 0, 0 );
if ( !splitterWnd.CreateView (0, 0, pContext->m_pNewViewClass, CSize (0, rect.Height()*3/4), pContext) ||
!splitterWnd.CreateView (1, 0, RUNTIME_CLASS( CView2 ), CSize (0, 0), pContext)) {
return FALSE;
}
}
Template tworzony nastepujaco:
template = new CMultiDocTemplate( IDR_TEMPLATE,
RUNTIME_CLASS( CMyDoc ),
RUNTIME_CLASS( CMyFrame ),
RUNTIME_CLASS( CView1 ));
if (!template )
return FALSE;
AddDocTemplate(template );
Jesli chodzi o tworzenie - wszystko wydaje sie dzialac prawidlowo. Tworzy sie frame, tworza sie view. Niestety podczas zamykania frame'a powstaje "first chance exception" w CDocument::OnCloseDocument(); Debugujac dalej zauwazylem, ze OnCloseDocument() wchodzi w petle while po ilosci view (m_viewList.size = 2 ). Nastepnie podczas kasowania frame wewnatrz tej petli ( pFrame->Destroywindow() ) funkcja MDIDestroy generuje wyjatek (zdaje sie, ze ma to cos wspolnego z wysylaniem message do parenta frame'a : WM_MDIDESTROY ).
Najgorsze jest to, ze powyzszy blad/wyjatek nie zawsze ma miejsce i czasem trzeba kilkunastu prob zeby go "wygenerowac". Moze ktos ma jakies doswiadczenia ze splitterem i wieloma view do pojedynczego frame'a. Pozdrawiam.