📄 chap8_1.htm
字号:
<html>
<head>
<title>8.1多文档界面窗口</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>
<table border="0" width="615" cellspacing="0" cellpadding="0">
<tr>
</b><td><div align="center"><center><table border="0" width="615" cellpadding="0" cellspacing="0" height="20">
<tr>
<td width="377" bgcolor="#15397D" height="20"></td>
<td width="238" bgcolor="#000000" height="20"><p align="right"></font><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual
C++网络教程</font></a></span></td>
</tr>
</table>
</center></div><font FACE="Times New Roman" size="3"><p ALIGN="CENTER"></font><font color="#3973DE"><font FACE="Times New Roman" size="5">8.1</font><font size="5">多文档界面窗口</font></font><font FACE="Times New Roman" size="4"></p>
<p></font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">应用程序是另一类重要的文档视结构程序。它的特点是:用户一次可以打开多个文档,每个文档对应不同的窗口;主窗口的菜单会自动随着当前活动的子窗口的变化而变化;可以对子窗口进行层叠、平铺等各种操作;子窗口可以在</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗口时,它将占满</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">主窗口的全部客户区。</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">不仅可以在同一时间内同时打开多个文档,还可以为同一文档打开多个视图。在</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">菜单下选择</font><font FACE="Times New Roman" SIZE="3">New</font><font SIZE="3">,就为当前活动文档打开一个新的子窗口。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">从程序员角度看,每个</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">应用程序必须有一个</font><font FACE="Times New Roman" SIZE="3">CMDIFrameWnd</font><font SIZE="3">或其派生类的实例,这个窗口称作</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">框架窗口。</font><font FACE="Times New Roman" SIZE="3">CMDIFrameWnd</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">CFrameWnd</font><font SIZE="3">的派生类,它除了拥有</font><font FACE="Times New Roman" SIZE="3">CFrameWnd</font><font SIZE="3">框架窗口类的全部特性外,还具有以下与</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">相关的特性:</font><font FACE="Times New Roman" SIZE="3"></p>
<blockquote>
</font><font SIZE="3"><p ALIGN="JUSTIFY">与</font><font FACE="Times New Roman" SIZE="3">SDI</font><font SIZE="3">不同,主框架窗口并不直接与一个文档和视图相关联。</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">框架窗口拥有</font><font FACE="Times New Roman" SIZE="3">MDICLIENT</font><font SIZE="3">(</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">客户窗口),在显示或隐藏控制条(包括工具条、状态栏、对话条)时,重新定位该子窗口。</p>
</font><font FACE="Times New Roman" SIZE="3"><p>MDI</font><font SIZE="3">客户窗口是</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">子窗口的直接父窗口,它负责管理主框架窗口的客户区以及创建子窗口。每个</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">主框架窗口都有且只有一个</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">客户窗口。</p>
</font><font FACE="Times New Roman" SIZE="3"><p>MDI</font><font SIZE="3">主框架窗口、客户窗口和子窗口的关系如下图所示:</p>
<p ALIGN="CENTER"><img src="T8_1.gif" alt="T8_1.tif (207392 bytes)" WIDTH="574" HEIGHT="301"></p>
</font><p ALIGN="CENTER"><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">8-1
MDI</font><font SIZE="3">主框架窗口、客户窗口和子窗口</font></p>
<font FACE="Times New Roman" SIZE="3"><p>MDI</font><font SIZE="3">子窗口是</font><font FACE="Times New Roman" SIZE="3">CMDIChildWnd</font><font SIZE="3">或其派生类的实例,</font><font FACE="Times New Roman" SIZE="3">CMDIChildWnd</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">CFrameWnd</font><font SIZE="3">的派生类,用于容纳视图和文档,它相当于</font><font FACE="Times New Roman" SIZE="3">SDI</font><font SIZE="3">下的主框架窗口。每打开一个文档,框架就自动为文档创建一个</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">子窗口。一个</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">应用程序负责动态的创建和删除</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">子窗口。在任何时刻,最多只有一个子窗口是活动的</font><font FACE="Times New Roman" SIZE="3">(</font><font SIZE="3">窗口标题栏颜色呈高亮显示</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">框架窗口始终与当前活动子窗口相关联,命令消息在传给</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">框架窗口之前首先分派给当前活动子窗口。</p>
<p>在没有任何活动的</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">子窗口时,</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">框架窗口可以拥有自己的缺省菜单。当有活动子窗口时,</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">框架窗口的菜单条会自动被子窗口的菜单所替代。框架会自动监视当前活动的子窗口类型,并相应的改变主窗口的菜单。比如,在</font><font FACE="Times New Roman" SIZE="3">Visual Studio</font><font SIZE="3">中,当选择对话框资源编辑窗口或源程序窗口时,菜单会有所不同。但是,对于程序员来说,只需要在</font><font FACE="Times New Roman" SIZE="3">InitInstance</font><font SIZE="3">中注册文档时指定每一类子窗口(严格的讲是文档)所使用的菜单,而不必显式的通过调用函数去改变主框架窗口的菜单,因为框架会自动完成这一任务。</p>
</font><font FACE="Times New Roman" SIZE="3"><p>MDI</font><font SIZE="3">框架窗口为层叠、平铺、排列子窗口和新建子窗口等一些标准窗口操作提供了缺省的菜单响应。在响应新建子窗口命令时,框架调用</font><font FACE="Times New Roman" SIZE="3">CDocTemplate::CreateNewFrame()</font><font SIZE="3">为当前活动文档创建一个子窗口。</font><font FACE="Times New Roman" SIZE="3">CreateNewFrame()</font><font SIZE="3">不仅创建子窗口,还创建与文档相对应的视图。</font></p>
</blockquote>
<font FACE="Times New Roman" SIZE="3"><p></font><b><font size="4"> </font><font FACE="Times New Roman" size="4"></p>
</font></b><p><font SIZE="3">下面,我们结合一个绘图程序例子,介绍多文档界面技术。在此之前,我们首先要介绍一下如何在</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">中绘图以及</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">的图形设备接口(</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">)。</font></p>
<div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
<tr>
<td><a href="chap8.htm">上一页</a></td>
<td><p align="right"><a href="chap8_2.htm">下一页</a></td>
</tr>
</table>
</center></div><font size="5"><hr noshade color="#3973DE" size="1">
<p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
未经许可,请勿以任何形式复制</font></td>
<b>
</tr>
</table>
</center></div>
<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -