⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap2_4.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>MFC编程</title>
</head>

<body link="#3973DE" alink="#000000">
<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="13">
      <tr>
        <td width="363" bgcolor="#15397D" height="13"></td>
        <td width="252" bgcolor="#000000" height="13"><p align="right"></font><small><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual 
        C++网络教程</font></a></span></small></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="4">2.4 MFC</font><font size="4">编程</font></font><font FACE="Times New Roman" size="4"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">微软基础类库(</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">:</font><font FACE="Times New Roman" SIZE="3">Microsoft Foundation Class</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">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">MFC</font><font SIZE="3">类库的好处是:首先,</font><font FACE="Times New Roman" SIZE="3">MFC</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">MFC</font><font SIZE="3">库充分利用了</font><font FACE="Times New Roman" SIZE="3">Microsoft</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"></p>
    <p></font><font SIZE="3">对用户来说,用</font><font FACE="Times New Roman" SIZE="3">MFC</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">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">MFC</font><font SIZE="3">标准。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">为了更好的理解</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">,我们有必要了解一下</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">的历史。</font><font FACE="Times New Roman" SIZE="3"><b></p>
    <p></b>2.4.1 MFC</font><font SIZE="3">历史</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">开始,</font><font FACE="Times New Roman" SIZE="3">Microsoft</font><font SIZE="3">建立了一个</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">小组,</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">代表</font><font FACE="Times New Roman" SIZE="3">Application Framework</font><font SIZE="3">,即应用程序框架。据说创建该小组原意是为了发布一个</font><font FACE="Times New Roman" SIZE="3">Borland C++</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">OWL</font><font SIZE="3">的竞争性产品,因为那时侯</font><font FACE="Times New Roman" SIZE="3">Borland </font><font SIZE="3">公司的应用程序框架</font><font FACE="Times New Roman" SIZE="3">OWL(object Windows Language)</font><font SIZE="3">已经做的相当成功。</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">小组象</font><font FACE="Times New Roman" SIZE="3">OWL</font><font SIZE="3">那样,提出了一个高度抽象</font><font FACE="Times New Roman" SIZE="3">Windows API</font><font SIZE="3">的一个类库。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></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">Windows API</font><font SIZE="3">实在太远,过分抽象并没有太大的实用性,相反大大降低了应用程序的效率。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">于是,他们干脆放弃了整个</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">类库,对类库进行重新设计。这次,他们采用了自底向上的方法,从已有的</font><font FACE="Times New Roman" SIZE="3">Windows API</font><font SIZE="3">着手,将类建立在</font><font FACE="Times New Roman" SIZE="3">Windows API</font><font SIZE="3">对象基础上,设计出后来成为</font><font FACE="Times New Roman" SIZE="3">MFC1.0</font><font SIZE="3">的一个类库。但是,你现在仍然可以看到</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">时期的痕迹,许多源程序文件有</font><font FACE="Times New Roman" SIZE="3">afx</font><font SIZE="3">前缀,如</font><font FACE="Times New Roman" SIZE="3">afxabort.cpp,afxmem.cpp</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">延用了许多</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">类库的宏,因此我们经常会看到以</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">开头的宏。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>AFX</font><font SIZE="3">小组实际上做了两件工作:</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">类库和对</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">IDE</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">1994</font><font SIZE="3">年</font><font FACE="Times New Roman" SIZE="3">4</font><font SIZE="3">月份之后,</font><font FACE="Times New Roman" SIZE="3">AFX</font><font SIZE="3">的名字停止使用,该小组成员成为</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">开发组的一部分,即现在的</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">小组。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC1.0</font><font SIZE="3">版于</font><font FACE="Times New Roman" SIZE="3">1992</font><font SIZE="3">年同</font><font FACE="Times New Roman" SIZE="3">Microsoft C/C++7.0</font><font SIZE="3">同时发布。它提供了对</font><font FACE="Times New Roman" SIZE="3">Windows 
    API</font><font SIZE="3">简单的抽象和封装,还没有我们现在常用的文档</font><font FACE="Times New Roman" SIZE="3">/</font><font SIZE="3">视结构特性。但它引入了</font><font FACE="Times New Roman" SIZE="3">CObject</font><font SIZE="3">,通过</font><font FACE="Times New Roman" SIZE="3">CArchive</font><font SIZE="3">的持续化和其他一些</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">中仍然使用的特性,从而奠定了</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">的基础。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">MFC2.0</font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">MFC1.0</font><font SIZE="3">基础上增加了文档</font><font FACE="Times New Roman" SIZE="3">/</font><font SIZE="3">视结构框架、</font><font FACE="Times New Roman" SIZE="3">OLE1.0</font><font SIZE="3">类、消息映射和公用对话框类,废弃了</font><font FACE="Times New Roman" SIZE="3">1.0</font><font SIZE="3">版中的</font><font FACE="Times New Roman" SIZE="3">CModalDialog</font><font SIZE="3">类并将它的功能移入到</font><font FACE="Times New Roman" SIZE="3">CDialog</font><font SIZE="3">中,并增加了工具条、对话条、分割视窗的支持。</font><font FACE="Times New Roman" SIZE="3">MFC2.1</font><font SIZE="3">随同</font><font FACE="Times New Roman" SIZE="3">Visual C++ 1.1 for NT</font><font SIZE="3">发布,它把</font><font FACE="Times New Roman" SIZE="3">MFC2.0</font><font SIZE="3">移植到了</font><font FACE="Times New Roman" SIZE="3">Win32</font><font SIZE="3">上。</font><font FACE="Times New Roman" SIZE="3">MFC2.5</font><font SIZE="3">随同</font><font FACE="Times New Roman" SIZE="3">Visual C++1.5</font><font SIZE="3">一起发布,它引入了</font><font FACE="Times New Roman" SIZE="3">OLE 2.0</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">ODBC</font><font SIZE="3">类。它是最后的官方的</font><font FACE="Times New Roman" SIZE="3">16</font><font SIZE="3">位发行版,于</font><font FACE="Times New Roman" SIZE="3">93</font><font SIZE="3">年</font><font FACE="Times New Roman" SIZE="3">12</font><font SIZE="3">月发布。目前,在开发</font><font FACE="Times New Roman" SIZE="3">16</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">Visual C++1.5</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">MFC 2.5</font><font SIZE="3">仍然有大量的用户。随后的</font><font FACE="Times New Roman" SIZE="3">MFC2.51</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">2.52</font><font SIZE="3">纠正了</font><font FACE="Times New Roman" SIZE="3">MFC.25</font><font SIZE="3">中的一些错误,增加了标签式对话框、</font><font FACE="Times New Roman" SIZE="3">WinSock</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">MAPI(Microsoft </font><font SIZE="3">电子邮件应用程序接口</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">支持。</font><font FACE="Times New Roman" SIZE="3">MFC3.1</font><font SIZE="3">同</font><font FACE="Times New Roman" SIZE="3">Visual C++2.1</font><font SIZE="3">一起于</font><font FACE="Times New Roman" SIZE="3">1995</font><font SIZE="3">年</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">月份发布,它引入了</font><font FACE="Times New Roman" SIZE="3">Windows95</font><font SIZE="3">公共控件(包括动画、热键、图象列表、工具条提示等等)。</font><font FACE="Times New Roman" SIZE="3">MFC4.0</font><font SIZE="3">于</font><font FACE="Times New Roman" SIZE="3">1995</font><font SIZE="3">年</font><font FACE="Times New Roman" SIZE="3">12</font><font SIZE="3">月份同</font><font FACE="Times New Roman" SIZE="3">Visual C++4.0</font><font SIZE="3">一起发布。</font><font FACE="Times New Roman" SIZE="3">Microsoft</font><font SIZE="3">直接从</font><font FACE="Times New Roman" SIZE="3">Visual C++2.0</font><font SIZE="3">一下子跳过一个版本号,升级到了</font><font FACE="Times New Roman" SIZE="3">4.0</font><font SIZE="3">,以保持</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">版本号和</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">版本号的一致性,但这种一致性又在</font><font FACE="Times New Roman" SIZE="3">Visual C++5.0</font><font SIZE="3">中打破了。在</font><font FACE="Times New Roman" SIZE="3">MFC4.0</font><font SIZE="3">中增加了</font><font FACE="Times New Roman" SIZE="3">CSynchronize,CMutex,CEvent,CMultiLock,CShellNew</font><font SIZE="3">以更好的支持多线程以及</font><font FACE="Times New Roman" SIZE="3">Windows 
    95</font><font SIZE="3">的其他一些特性。</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">还引入了</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">(组件画廊)、</font><font FACE="Times New Roman" SIZE="3">STL</font><font SIZE="3">支持和大量的新特性。</font><font FACE="Times New Roman" SIZE="3">MFC4.1</font><font SIZE="3">最重要的特性是支持</font><font FACE="Times New Roman" SIZE="3">Win32s</font><font SIZE="3">。许多</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">开发者一直都在使用该版本。</font><font FACE="Times New Roman" SIZE="3">MFC4.1</font><font SIZE="3">修正了</font><font FACE="Times New Roman" SIZE="3">4.0</font><font SIZE="3">的一些错误并增加了</font><font FACE="Times New Roman" SIZE="3">Internet</font><font SIZE="3">特性。</font><font FACE="Times New Roman" SIZE="3">MFC4.2</font><font SIZE="3">增加了</font><font FACE="Times New Roman" SIZE="3">ISAPI</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">OCX</font><font SIZE="3">容器支持。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC4.21</font><font SIZE="3">于</font><font FACE="Times New Roman" SIZE="3">1997</font><font SIZE="3">年</font><font FACE="Times New Roman" SIZE="3">3</font><font SIZE="3">月</font><font FACE="Times New Roman" SIZE="3">19</font><font SIZE="3">日同</font><font FACE="Times New Roman" SIZE="3">Visual C++5.0</font><font SIZE="3">一起发布,它是目前最新和最完善的</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">版本。它只增加了对微软的</font><font FACE="Times New Roman" SIZE="3">IntelliMouse(</font><font SIZE="3">智能鼠标器</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">的支持。现在</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">版本号又不与</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">匹配了。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC</font><font SIZE="3">发行版列表如下:</font><b><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC Release MSVC Release 16</font><font SIZE="3">位或</font><font FACE="Times New Roman" SIZE="3">32</font><font SIZE="3">位 备注 </font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p>1.0 16 </font><font SIZE="3">简单的 封装</font><font FACE="Times New Roman" SIZE="3">Windows</p>
    <p>2.0 1.0 16 </font><font SIZE="3">增加了文档</font><font FACE="Times New Roman" SIZE="3">/</font><font SIZE="3">视结构</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>2.1 1.1 for NT 32 </font><font SIZE="3">第一个</font><font FACE="Times New Roman" SIZE="3">NT</font><font SIZE="3">的发行版 </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>2.5 1.5 16 OLE/ODBC,</font><font SIZE="3">最后一个</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>16</font><font SIZE="3">位版本</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>2.51 2.0 16 </font><font SIZE="3">修正错误 </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>2.52 2.1 16 </font><font SIZE="3">增加标签式对话框</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>2.52b 2.2 16</p>
    <p>2.5c 4.0 16</p>
    <p>3.0 2.0 32 </font><font SIZE="3">标签式对话框、可停泊工具条</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>3.1 2.1 32 Winsock/MAPI, Windows</font><font SIZE="3">公共控 制 </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>3.2 2.2 32</p>
    <p>4.0 4.0 32 Win 95, </font><font SIZE="3">线程类</font><font FACE="Times New Roman" SIZE="3">, OCX </font><font SIZE="3">容器 </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>4.1 4.1 32 sweeper (WinInet) classes</p>
    <p>**</font><font SIZE="3">以上是最后支持</font><font FACE="Times New Roman" SIZE="3">Win32s</font><font SIZE="3">的版本</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>4.2 4.2 32 </font><font SIZE="3">修正错误</font><font FACE="Times New Roman" SIZE="3">, ISAPI classes</p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>4.2b internet dl 32 </font><font SIZE="3">修正错误</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>4.21 5.0 32 IntelliMouse&amp;trade; support.</p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <b><p></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">2.4.2 MFC</font><font SIZE="3" color="#3973DE">类库概念和组成</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">类库是一个可以在应用中使用的相互关联的</font><font FACE="Times New Roman" SIZE="3">C++</font><font SIZE="3">类的集合。类库有些随编译器提供,如</font><font FACE="Times New Roman" SIZE="3">Borland C++ Turbo Vision</font><font SIZE="3">等;有的是由其他软件公司销售,如用于数据库开发的</font><font FACE="Times New Roman" SIZE="3">CodeBase</font><font SIZE="3">;有的则是由用户自己开发的。比如图象处理类库完成图象显示、格式转换、量化等;串行通信类库用于支持串行口输入输出。有些情况下用户可以直接利用类库中包含的类定义应用程序所需的变量,有时则需要从类库所提供的类中派生出新的类,这依赖于类库的设计和具体的应用程序。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>Microsoft</font><font SIZE="3">提供了一个基础类库</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">,其中包含用来开发</font><font FACE="Times New Roman" SIZE="3">C++</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">C++ Windows</font><font SIZE="3">应用程序的一组类。基础类库的核心是以</font><font FACE="Times New Roman" SIZE="3">C++</font><font SIZE="3">形式封装了大部分的</font><font FACE="Times New Roman" SIZE="3">Windows API</font><font SIZE="3">。类库表示窗口、对话框、设备上下文、公共</font><font FACE="Times New Roman" SIZE="3">GDI</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">Windows</font><font SIZE="3">中结构的简单的</font><font FACE="Times New Roman" SIZE="3">C++</font><font SIZE="3">成员函数的接口。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC</font><font SIZE="3">可分为两个主要部分:(</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">)基础类(</font><font FACE="Times New Roman" SIZE="3">2</font><font SIZE="3">)宏和全程函数。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC</font><font SIZE="3">基础类</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p>MFC</font><font SIZE="3"><font SIZE="3">中的类按功能来分可划分为以下几类:</font><font FACE="Times New Roman" SIZE="3"></p>
    <blockquote>
      <p></font><font SIZE="3">基类</font><font FACE="Times New Roman" SIZE="3"></p>
      <p></font><font SIZE="3">应用程序框架类</font><font FACE="Times New Roman" SIZE="3"></p>
      </font><p><font SIZE="3">应用程序类</font><font FACE="Times New Roman" SIZE="3"></p>
      </font><p><font SIZE="3">命令相关类</font><font FACE="Times New Roman" SIZE="3"></p>
      </font><p><font SIZE="3">文档</font></font><font FACE="Times New Roman" SIZE="3">/</font><font SIZE="3"><font SIZE="3">视类</font><font FACE="Times New Roman" SIZE="3"></p>
      </font><p><font SIZE="3">线程类</font><font FACE="Times New Roman" SIZE="3"></p>
      <p></font><font SIZE="3">可视对象类</font><font FACE="Times New Roman" SIZE="3"></p>
      <p></font><font SIZE="3">窗口类</font><font FACE="Times New Roman" SIZE="3"></p>
      <p></font><font SIZE="3">视类</font><font FACE="Times New Roman" SIZE="3"></p>
      <p></font><font SIZE="3">对话框类</font><font FACE="Times New Roman" SIZE="3"></p>
      <p></font><font SIZE="3">属性表 </font></font><font FACE="Times New Roman" SIZE="3"></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -