在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第1页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第2页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第3页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第4页
在单文档程序中动态切换多个窗体---VC---文档中心---源码天空_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在单文档程序中动态切换多个窗体 VC 文档中心 源码天空 新建一个基于CFormView的单文档应用程序 再添加一个窗 体和与之对应的基于CFormView的新视类 然后通过在主框 架类里添加控制代码和菜单控制实现这两个窗体的动态切 换 下面就是具体的实现过程 一 用 MFC AppWizard exe 建立一个新项目 SwitchForm 并在第二步 的创建类型上选择为 Single documnet 单文档模式 第三 四 五 六步均取确省状态 最 后一步选择 CFormView 作为视类的基类 点按 完成 按钮 生成了初始工程 SwitchForm 二 点选菜单 Insert Resource 在弹出的 Insert Resource 对话框中 Dialog 树里的 IDD FORMVIEW 点击 New 按钮 生成了一个新的窗体 将其ID号改为 IDD NEX TFORM 在原有的窗体上加一个静态框 这是第一个窗体 在新建的窗体上也添加一个静态框 这是第二个窗体 三 在菜单资源的 IDR MAINFRAME 上添加一级菜单 窗体切 换 及其二级菜单 第一个窗体 第二个窗体 其标识号 分别为 ID FIRSTFORM 和 ID SECONDFORM 修该 第 一个窗体 的属性为 Checked 表明程序初始时显示的是第 一个窗体 四 在 ClassView 属性页里的 SwitchForm classes 上右键 在弹出菜单上选择 New Class 弹出 New Class 对话框 选择 Dialog ID 为我们刚添加的新窗体 IDD NEXTFORM 选择 Base class 为 CFormView 类名取为 CNextFormView 这样就 把第二个窗体对应的视图类添加到了工程 五 在框架类里添加函数SwitchToForm void CMainFrame SwitchToForm int nForm 获取原来的活动窗体的视图句柄 CView pOldActiveView GetActiveView 获取由 nForm 标识的窗体所对应的视图句柄 CView pNewActiveView 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 GetDocument pNewActiveView Create NULL NULL 0L CFrameWnd rectDefault this nForm context pNewActiveView OnInitialUpdate 选择pNewActiveView为活动窗体 SetActiveView pNewActiveView 显示活动窗体 隐藏非活动窗体 pNewActiveView ShowWindow SW SHOW pOldActiveView ShowWindow SW HIDE 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 RecalcLayout 六 添加两个菜单相对应的命令响应函数和更新函数如下 void CMainFrame OnFirstform 通过IsKindOf函数确定当前活动窗口是否是第一个窗口 如 是 则无须切换 否则将通过SwitchToForm函数将当前活动窗口切换到 IDD SWITCHFORM FORM 标识的第二个窗体 if GetActiveView IsKindOf RUNTIME CLASS CSwitchFormView return SwitchToForm IDD SWITCHFORM FORM void CMainFrame OnUpdateFirstform 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 OnUpdateSecondform CCmdUI pCmdUI pCmdUI SetCheck GetActiveView IsKindOf RUNTIME CLASS CNextFormView 然后再在该文件开始处添加对两个视图类的引用 include SwitchFormDoc h include SwitchFormView h include NextFormView h 在此须注意 应在两个视类的引用之前添加对文档类的引用 否则会引起编译错误 另外 由于视 类的构造函数在声明时都确省的声明为保护型的 在框架类 中无法引用 所以还要将两个视类的类 声明改动如下 class CNextFormView public CFormView DECLARE DYNCREATE CNextFormView protected 将 protected 改为 public public CNextFormView virtual CN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论