在单文档程序中动态切换多个窗体---VC---文档中心---源码天空

上传人:jiups****uk12 文档编号:93377796 上传时间:2019-07-21 格式:DOC 页数:8 大小:14.21KB
返回 下载 相关 举报
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第1页
第1页 / 共8页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第2页
第2页 / 共8页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第3页
第3页 / 共8页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第4页
第4页 / 共8页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《在单文档程序中动态切换多个窗体---VC---文档中心---源码天空》由会员分享,可在线阅读,更多相关《在单文档程序中动态切换多个窗体---VC---文档中心---源码天空(8页珍藏版)》请在金锄头文库上搜索。

1、在单文档程序中动态切换多个窗体 - VC - 文档中心 - 源码天空 新建一个基于CFormView的单文档应用程序,再添加一个窗体和与之对应的基于CFormView的新视类,然后通过在主框架类里添加控制代码和菜单控制实现这两个窗体的动态切换,下面就是具体的实现过程: (一) 用MFC AppWizard(exe)建立一个新项目SwitchForm,并在第二步的创建类型上选择为Single documnet单文档模式,第三、四、五、六步均取确省状态,最后一步选择CFormView作为视类的基类。点按完成按钮,生成了初始工程SwitchForm。 (二) 点选菜单Insert、Resource&

2、#8230;,在弹出的Insert Resource对话框中Dialog树里的IDD_FORMVIEW,点击New按钮,生成了一个新的窗体,将其ID号改为IDD_NEXTFORM。在原有的窗体上加一个静态框这是第一个窗体;在新建的窗体上也添加一个静态框这是第二个窗体。 (三) 在菜单资源的IDR_MAINFRAME上添加一级菜单窗体切换,及其二级菜单第一个窗体、第二个窗体,其标识号分别为ID_FIRSTFORM和ID_SECONDFORM。修该第一个窗体的属性为Checked,表明程序初始时显示的是第一个窗体。 (四) 在ClassView属性页里的SwitchForm classes上右键,

3、在弹出菜单上选择New Class…,弹出New Class对话框,选择Dialog ID:为我们刚添加的新窗体IDD_NEXTFORM,选择Base class:为CFormView,类名取为CNextFormView,这样就把第二个窗体对应的视图类添加到了工程。 (五) 在框架类里添加函数SwitchToForm(): void CMainFrame:SwitchToForm(int nForm) / 获取原来的活动窗体的视图句柄 CView* pOldActiveView = GetActiveView(); / 获取由nForm标识的窗体所对应的视图句柄 CView* pN

4、ewActiveView = (CView*) GetDlgItem(nForm); / 若视图句柄为空,则创建一新的。 if (pNewActiveView = NULL) if (nForm = IDD_SWITCHFORM_FORM) pNewActiveView = (CView*)new CSwitchFormView; if (nForm = IDD_NEXTFORM) pNewActiveView = (CView*)new CNextFormView; CCreateContext context; context.m_pCurrentDoc = pOldActiveView-

5、>GetDocument(); pNewActiveView->Create(NULL, NULL, 0L, CFrameWnd:rectDefault, this, nForm, &context); pNewActiveView->OnInitialUpdate(); / 选择pNewActiveView为活动窗体 SetActiveView(pNewActiveView);/ 显示活动窗体,隐藏非活动窗体 pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE);

6、 int ID; if (pOldActiveView->GetRuntimeClass() = RUNTIME_CLASS(CSwitchFormView) ID = IDD_SWITCHFORM_FORM; if(pOldActiveView->GetRuntimeClass() = RUNTIME_CLASS(CNextFormView) ID = IDD_NEXTFORM;/ 设置窗体的ID号 pOldActiveView->SetDlgCtrlID(ID); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); R

7、ecalcLayout(); (六)添加两个菜单相对应的命令响应函数和更新函数如下: void CMainFrame:OnFirstform()/ 通过IsKindOf函数确定当前活动窗口是否是第一个窗口,如是,则无须切换, / 否则将通过SwitchToForm函数将当前活动窗口切换到IDD_SWITCHFORM_FORM / 标识的第二个窗体。 if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView) return; SwitchToForm(IDD_SWITCHFORM_FORM); void CMainFrame:O

8、nUpdateFirstform(CCmdUI *pCmdUI)/ 通过IsKindOf函数判断当前活动窗口是否是第一个窗体,如是则将其选中。 pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView); void CMainFrame:OnSecondform() if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView) return; SwitchToForm(IDD_NEXTFORM); void CMainFrame:On

9、UpdateSecondform(CCmdUI *pCmdUI) pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView); 然后再在该文件开始处添加对两个视图类的引用: #include SwitchFormDoc.h#include SwitchFormView.h#include NextFormView.h 在此须注意:应在两个视类的引用之前添加对文档类的引用,否则会引起编译错误。另外,由于视类的构造函数在声明时都确省的声明为保护型的,在框架类中无法引用,所以还要将两个视类的类声明改动如下

10、: class CNextFormView : public CFormView DECLARE_DYNCREATE(CNextFormView) / protected: 将 protected 改为 publicpublic: CNextFormView(); virtual CNextFormView(); …… class CSwitchFormView : public CFormView/ protected: 将 protected 改成 publicpublic: CSwitchFormView(); DECLARE_DYNCREATE(CSwitchFormView) ……

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号