你目前正处于脱机状态,正在等待 Internet 重新连接

如何使用 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。
kbfasttips

警告:本文已自动翻译

属性

文章 ID:98598 - 上次审阅时间:01/05/2006 01:11:56 - 修订版本: 4.0

Microsoft Foundation Class Library 4.2

  • kbmt kbdocview kbhowto kbmdi kbuidesign KB98598 KbMtzh
反馈
ame='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">