欢迎来到天天文库
浏览记录
ID:49655821
大小:2.82 MB
页数:43页
时间:2020-03-03
《关于单文档多视与MFC的初始化过程.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、单文档多视的实现多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多。2)通过一个文档关联多个视图,窗口显示整个视图。第二种实现较第一种复杂,这里给出详细的实现方法。Step1:使用VC6.0新建一个Project,命名为:MultiView。除选择单文档属性外,一切使用“默认”方式。于是你可以获得五个类:CMainFrame,CMultiViewApp,CMultiViewDoc,CMultiV
2、iewView,和CAboutDlg; Step2:新建一个新的视图View,添加一个新的MFCClass(Insert->NewClass),基类为CView(或者CView的派生子类,如CEditView等)。类的名字为CAnotherView,这就是新的视图;并为CAnotherView添加GetDocument的实现:CMultiViewDoc*CAnotherView::GetDocument(){ return(CMultiViewDoc*)m_pDocument;} Step3:在CMultiViewApp添加成员变量记录这两个视图:private:
3、 CView*m_pFirstView; CView*m_pAnotherView;给程序菜单IDR_MAINFRAME添加一个菜单项目“视图”,该菜单项有两个子菜单“视图一”和“视图二”,添加相应函数:(voidCMultiViewApp::OnShowFirstview()和voidCMultiViewApp::OnShowSecondview());注意这里将菜单消息的响应都放在app对象里面,而不是放到MainFrame对象中进行。Step4:创建新的视图:在BOOLCMultiViewApp::InitInstance()中添加代码:…….//
4、创建一个新的视图 CView*m_pActiveView=((CFrameWnd*)m_pMainWnd)->GetActiveView(); m_pFirstView=m_pActiveView; m_pAnotherView=newCAnotherView(); //文档和视图关联 CDocument*m_pDoc=((CFrameWnd*)m_pMainWnd)->GetActiveDocument(); CCreateContextcontext; context.m_pCurre
5、ntDoc=m_pDoc; //创建视图 UINTm_IDFORANOTHERVIEW=AFX_IDW_PANE_FIRST+1; CRectrect; m_pAnotherView->Create(NULL,NULL,WS_CHILD,rect,m_pMainWnd,m_IDFORANOTHERVIEW,&context); …… Step5:现在已经创建了视图,并且都和文档关联起来了。现在要作的就是视图间的转换。在voidCMultiViewApp::OnShowFirstview()中添加实现代码:voidCMultiVi
6、ewApp::OnShowFirstview(){ //TODO:Addyourcommandhandlercodehere UINTtemp=::GetWindowLong(m_pAnotherView->m_hWnd,GWL_ID); ::SetWindowLong(m_pAnotherView->m_hWnd,GWL_ID,::GetWindowLong(m_pFirstView->m_hWnd,GWL_ID)); ::SetWindowLong(m_pFirstView->m_hWnd,GWL_ID,temp); m_pAno
7、therView->ShowWindow(SW_HIDE); m_pFirstView->ShowWindow(SW_SHOW); ((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pFirstView); ((CFrameWnd*)m_pMainWnd)->RecalcLayout(); m_pFirstView->Invalidate();} 在voidCMultiViewApp::OnShowSecondview()中添
此文档下载收益归作者所有