如何使用 CFormView 类,在单文档界面 (SDI) 和多文档界面 (MDI) 应用程序

文章翻译 文章翻译
文章编号: 98598 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

注意Microsoft Visual c + +.net (2002) 支持托管的代码模型所提供的 Microsoft.net 框架和非托管本机 Windows 代码模型。本文中的信息仅适用于非托管的 Visual c + + 代码。

注意Microsoft Visual c + + 2005年支持托管的代码模型所提供的 Microsoft.net 框架和非托管本机 Windows 代码模型。

概要

CFormView 类提供了一种方便的方法,将控件放到基于对话框模板的视图。一般的过程,以使用一个 CFormView 类文档中所述,VIEWEX 和 CHKBOOK 示例应用程序提供了与 Microsoft 基础类 (MFC) 版本 2.x 和上面所示。但是,这些应用程序不演示进行到与窗体的初始大小相同框架窗口的初始大小。

下一节列出了支持创建单文档界面 (SDI) 或基于一个 CFormView 尺寸初始框架窗口在窗体、 框架的样式更改和关闭窗体中使用的是按钮的 MDI 文档的多文档界面 (MDI) 应用程序所需的各个步骤。

更多信息

以下步骤描述了如何创建一个 MFC 应用程序向导为默认视图中使用该 CFormView 应用程序:
  1. 使用该应用程序向导生成 SDI 或 MDI 应用程序。这将用正确的样式设置为项目的资源文件插入对话框模板。

    visual Studio 6.0

    在该应用程序向导的第 6 步中选择视图类。在 基类 组合框选择要指定为基类的 CFormViewCFormView

    visual Studio.net 或 Visual Studio 2005 执行以下操作:

    在该应用程序向导的第 1 步中选择 生成的类。在 基类 组合框选择要指定为基类的 CFormViewCFormView
  2. 重写 OnUpdate() 成员函数和调用 UpdateData() CFormView 文档使用当前的文档数据来更新数据成员变量,并执行对话框数据中所述交换 (DDX)。

    : UpdateData 不是虚拟和调用基类,可确保 DoDataExchange 称为通过标准的多态性派生的类。 调用,CFormView 文档状态不会重写 UpdateData。
  3. 如果您想要设置窗体视图的初始大小,重写 OnInitialUpdate() 函数。下面的文本提供了有关此步骤稍有不同,SDI 或 MDI 应用程序中的其他信息。

更改环绕一个 CFormView 一个 SDI 主框架的大小

若要更改窗体中应用程序 Studio 设计适当的大小 (为其视图类使用 CFormView) 的 SDI 应用程序的主框架的大小,重写 OnInitialUpdate() 函数,如下所示 CFormView,从派生类中的:
      void CMyFormView::OnInitialUpdate()
      {
         CFormView::OnInitialUpdate();
         GetParentFrame()->RecalcLayout();
         ResizeParentToFit(); // default argument is TRUE
      }
				
的 ResizeParentToFit() 函数不能防止该窗体更改大小,当用户更改应用程序主框架的大小 (滚动条会自动添加如果需要)。若要修改的框架窗口的窗体视图的父级样式,您可以重写 PreCreateWindow() 函数由应用程序向导生成 CMainFrame 类中。例如对于要删除 WS_THICKFRAME 样式,并防止用户更改窗口的大小声明 PreCreateWindow() MAINFRM.H 中的,然后将下面的代码添加到 MAINFRM.CPP:
      BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)
      {
         cs.style &= ~WS_THICKFRAME;
         return CFrameWnd::PreCreateWindow(cs);
      }
				

更改一个 CFormView 周围的 MDI 子框架的大小

如上所述,更改一个 MDI 子框架的大小的过程是类似于更改 SDI 应用程序的主框架的大小。但是,RecalcLayout() 调用不是必需的。

若要将周围的窗体视图的 MDI 子框架的大小重写 OnInitialUpdate() 函数,如下所示 CFormView 从派生类中的:
      void CMDIFormView::OnInitialUpdate()
      {
         CFormView::OnInitialUpdate();
         ResizeParentToFit(); // Default argument is TRUE.
      }
				
如上所述实质上是相同的后果如果应用程序重写该默认 ResizeParentToFit() 函数的参数,出现的 SDI 应用程序。此外,子窗口可能为封闭的 MDI 主框架或整个屏幕太大。

若要将 MDI 子框架 (例如删除 WS_THICKFRAME 的样式,因此用户不能更改窗口的大小) 的样式派生一个 MDI 子窗口类和重写 PreCreateWindow 函数,如 SDI 上例所示。

关闭按钮具有一个 MDI 窗体

若要创建在关闭该文档的窗体上的按钮添加到 CFormView 类 BN_CLICKED 消息的消息处理程序。请确保在 CFormView 按钮不具有默认 IDOK 或 IDCANCEL 标识符。如果它们执行的操作将创建消息映射和不正确的函数按钮中的错误条目。

一旦消息处理程序是在 $ 位置中,您可以模拟关闭命令在文件菜单,用下面的代码:
      void CMyForm::OnClickedButton1()
      {
         PostMessage(WM_COMMAND, ID_FILE_CLOSE);
      }
				
这种方法来关闭窗体将提示用户保存该文件,如果将与文档相关联的 IsModified() 成员函数返回 TRUE。

属性

文章编号: 98598 - 最后修改: 2006年1月5日 - 修订: 4.0
这篇文章中的信息适用于:
  • Microsoft Foundation Class Library 4.2?当用于
    • Microsoft Visual C++ 1.0 专业版
    • Microsoft Visual C++ 1.5 专业版
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 专业版
    • Microsoft Visual C++ 1.0 专业版
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 5.0 标准版
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ .NET 2003 Standard Edition
    • Microsoft Visual C++ .NET 2002 标准版
    • Microsoft Visual C++ 2005 Express Edition
关键字:?
kbmt kbdocview kbhowto kbmdi kbuidesign KB98598 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 98598
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com