多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多。2)通过一个文档关联多个视图,窗口显示整个视图。第二种实现较第一种复杂,这里给出详细的实现方法。 在VC++开发中,单文档多视图(Single Document Multiple Views,SDIV)设计模式是一种常见的用户界面组织方式,尤其适用于编辑器、数据库应用等场景。这种模式允许在一个文档窗口中展示多个不同的视图,每个视图可以独立显示文档的不同方面。本篇将详细介绍如何在VC 6.0环境下实现这一功能。 我们创建一个新的Project,如“MultiView”,选择单文档(Single Document Interface, SDI)属性。系统会自动生成基础类,包括CMainFrame、CMultiViewApp、CMultiViewDoc、CMultiViewView和CAboutDlg。其中,CMultiViewDoc代表文档,CMultiViewView代表初始的视图。 接着,为了添加第二个视图,我们需要创建一个新的MFC类,如CAnotherView,继承自CView或其派生类。在CAnotherView类中,实现GetDocument函数,确保视图能够访问关联的文档: ```cpp CMultiViewDoc* CAnotherView::GetDocument() { return (CMultiViewDoc*)m_pDocument; } ``` 在应用程序类CMultiViewApp中,我们声明两个成员变量m_pFirstView和m_pAnotherView,分别保存两个视图的指针。同时,我们需要在 IDR_MAINFRAME 菜单中添加“视图”菜单项,以及它的两个子菜单“视图一”和“视图二”,并为它们添加相应的命令处理函数OnShowFirstview和OnShowSecondview。 接下来,在CMultiViewApp的InitInstance方法中,我们创建新的视图CAnotherView,并将其与当前的文档关联。这可以通过创建上下文对象CCreateContext,然后调用CView的Create方法来完成: ```cpp // 创建一个新的视图 CView* m_pActiveView = ((CFrameWnd*)m_pMainWnd)->GetActiveView(); m_pFirstView = m_pActiveView; m_pAnotherView = new CAnotherView(); CDocument* m_pDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument(); CCreateContext context; context.m_pCurrentDoc = m_pDoc; // 创建视图 UINT m_IDFORANOTHERVIEW = AFX_IDW_PANE_FIRST + 1; CRect rect; m_pAnotherView->Create(NULL, NULL, WS_CHILD, rect, m_pMainWnd, m_IDFORANOTHERVIEW, &context); ``` 我们需要实现视图之间的切换。在OnShowFirstview函数中,我们将两个视图的ID互换,并调整它们的显示状态: ```cpp void CMultiViewApp::OnShowFirstview() { // 获取并交换视图的ID UINT temp = ::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_pAnotherView->ShowWindow(SW_HIDE); m_pFirstView->ShowWindow(SW_SHOW); // 设置活动视图 ((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pFirstView); ((CFrameWnd*)m_pMainWnd)->RecalcLayout(); } ``` 同样,你需要实现OnShowSecondview函数,以便在需要时显示第二个视图。视图之间的切换是通过修改窗口ID和调整显示状态来实现的,这样可以确保菜单项与当前显示的视图保持一致。 实现VC中的单文档多视图涉及到创建新的视图类、与文档关联、创建视图实例以及处理视图之间的切换。通过这样的设计,用户可以在同一个文档窗口内看到不同角度的数据呈现,极大地提升了用户体验和应用的灵活性。
- 粉丝: 0
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页