Dynamic SubViews
Riso Nemec -- nemec@softec.softec.sk Monday, July 08, 1996 ENV: VC++ 4.0 / Win95 Dear experts! Standard MFC model directly supports Document-View model 1:N. Sometimes we need to show in a View of a document also attributes (generally View) of associated Document. WE DO NOT WANT TO DO IT DIRECTLY IN THAT VIEW. We want to realize such a diagram: ------------------- | Class1BasicView | ------------------- | | | --------------- | | Class2View | | --------------- | | ----------- ---------- | Class1 | ------> | Class2 | ----------- ---------- where Class1 has a pointer to an instance of a class Class2 (or of a subclass of Class2 !!!). 1) We want to leave the drawing, updates etc to classes Class2 and Class2View (using powerfull Document-View updating mechanism). 2) We want to dynamically fill the corresponding subview (when the associated object is of Class3 - subclass of Class2, it has its own Class3View) with the view of actual associated object. 3) Splitted Window is insufficient - we need to place subview area at any place, possibly many subviews. If you have any suggestions on correct (and effective) methods doing this (preferably), or 3rd-party library (less preferably) or arguments why it's impossible (I don't want to hear about it! :-), respond to this mailing list or by mail to (nemec@softec.sk). Or does somewhere exist a CViewCtrl? THANK YOU! -- ___ ___ ____ _ ____________________________________________________ / __)/ \| ) | Richard NEMEC, SOFTEC, Bratislava, Slovakia, Europe (___ \ | \ (| | phone: +42-7-273805 (_____)____/_|\_\_| e-mail: nemec@softec.sk ____ _ ___ ___ www: -- N/A -- | ) |/ __)/ \ hobby: iveta@home.dnv.sk | (| |___ \ | \ ...: ??? |_|\_\_|_____)____/ ____________________________________________________
Riso Nemec -- nemec@softec.softec.sk Thursday, July 11, 1996 ENV: VC++ 4.0 / Win95 Dear experts! Standard MFC model directly supports Document-View model 1:N. Sometimes we need to show in a View of a document also attributes (generally View) of associated Document. WE DO NOT WANT TO DO IT DIRECTLY IN THAT VIEW. We want to realize such a diagram: ------------------- | Class1BasicView | ------------------- | | | --------------- | | Class2View | | --------------- | | ----------- ---------- | Class1 | ------> | Class2 | ----------- ---------- where Class1 has a pointer to an instance of a class Class2 (or of a subclass of Class2 !!!). 1) We want to leave the drawing, updates etc to classes Class2 and Class2View (using powerfull Document-View updating mechanism). 2) We want to dynamically fill the corresponding subview (when the associated object is of Class3 - subclass of Class2, it has its own Class3View) with the view of actual associated object. 3) Splitted Window is insufficient - we need to place subview area at any place, possibly many subviews. If you have any suggestions on correct (and effective) methods doing this (preferably), or 3rd-party library (less preferably) or arguments why it's impossible (I don't want to hear about it! :-), respond to this mailing list or by mail to (nemec@softec.sk). Or does somewhere exist a CViewCtrl? THANK YOU! -- ___ ___ ____ _ ____________________________________________________ / __)/ \| ) | Richard NEMEC, SOFTEC, Bratislava, Slovakia, Europe (___ \ | \ (| | phone: +42-7-273805 (_____)____/_|\_\_| e-mail: nemec@softec.sk ____ _ ___ ___ www: -- N/A -- | ) |/ __)/ \ hobby: iveta@home.dnv.sk | (| |___ \ | \ ...: ??? |_|\_\_|_____)____/ ____________________________________________________
PP mail system -- LAWSONW@sydney.ccur.com Friday, July 12, 1996 G'day Riso! Real stupid question: have you considered Splitter windows? Without thinking too hard about it, seems to me that you ought to be able to do whatever you like after an UpdateAllViews -- i.e., display attributes rather than a portion of the real document. Regards, Jim Lawson Williams
Josef Haslinger -- josef.haslinger@gascad.telecom.at Monday, July 15, 1996 Riso Nemec wrote: [snip] I had a similar problem and i replaced the current view of a splitter window. But i had to write my own ReplaceView function: // // replace the view of a splitter window // BOOL ReplaceView( CSplitterWnd* pSplitter, int row, int col,CRuntimeClass * pViewClass, SIZE size) { CCreateContext context; BOOL bSetActive; if(( pSplitter->GetPane( row, col )->IsKindOf( pViewClass )) == TRUE ) return FALSE; // Get pointer to CDocument object so that it can be used in the creation // process of the new view CDocument* pDoc = ((CView *)pSplitter->GetPane( row, col ))->GetDocument(); CView* pActiveView = pSplitter->GetParentFrame()->GetActiveView(); if( pActiveView == NULL || pActiveView == pSplitter->GetPane( row, col )) bSetActive = TRUE; else bSetActive = FALSE; // set flag so that document will not be deleted when view is destroyed pDoc->m_bAutoDelete=FALSE; // Delete existing view ((CView *) pSplitter->GetPane( row, col ))->DestroyWindow(); // set flag back to default pDoc->m_bAutoDelete=TRUE; // Create new view context.m_pNewViewClass = pViewClass; context.m_pCurrentDoc = pDoc; context.m_pNewDocTemplate = NULL; context.m_pLastView = NULL; context.m_pCurrentFrame = NULL; pSplitter->CreateView( row, col, pViewClass, size, &context ); CView * pNewView= (CView *)pSplitter->GetPane( row, col ); if( bSetActive==TRUE ) pSplitter->GetParentFrame()->SetActiveView( pNewView ); pSplitter->RecalcLayout(); pNewView->OnInitialUpdate(); pSplitter->GetPane( row, col )->SendMessage( WM_PAINT ); return TRUE; } -- Josef Haslinger GASCAD Gesellschaft fьr Computer Aided Design Ges.m.b.H Wehrgrabengasse 33 A-4400 STEYR / AUSTRIA / EUROPE Phone: ++43 7252 82323 17 Fax: ++43 7252 82323 9 (private: hasling@art.at / 07477 43821)
| Вернуться в корень Архива |