<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_学习笔记。。。积累！！</title><subtitle type="text">合抱之木,生于毫末。九层之台,起于累土。千里之行,始于足下</subtitle><id>http://feed.cnblogs.com/blog/u/55627/rss</id><updated>2012-05-23T09:13:37Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/55627/rss"/><entry><id>http://www.cnblogs.com/gaojun/archive/2012/05/23/2514967.html</id><title type="text">如何编写漂亮日志博客（原）</title><summary type="text">一直以来都想把自己的博客风格与外观好好调整一下，让人有耳目一新的感觉，每当看到别人漂亮的博客，这种冲动更加强烈。终于利用一点时间学习了一下如何改变自己博客风格的方法、工具、注意事项，通过实践觉得还是有挺多收获的，因此将学习过程记录下来，为有这方面需要的人提供一点帮助。为不使大家对较多文字感到厌烦，我尽量言简意赅！ 一、编写准备 俗话说“工欲善其事，必先利其器”，编写博客也有一些工具、插件...</summary><published>2012-05-23T08:28:00Z</published><updated>2012-05-23T08:28:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2012/05/23/2514967.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2012/05/23/2514967.html"/><content type="html">&lt;style type="text/css"&gt;blockquote {    background-color: #eff4e1;    border: 1px solid #cddd9e;    border-radius: 15px 15px 15px 15px;    margin: 2em 16px;    color: #333333;    font-size: 14pt;font-weight: bold;}blockquote:after {    bottom: -0.15em;    content: url("http://images.cnblogs.com/cnblogs_com/rush/268781/o_quote_right.png");    float: right;    font-size: 6em;    line-height: 0.1em;    position: relative;    right: -0.15em;}blockquote:before {    content: url("http://images.cnblogs.com/cnblogs_com/rush/268781/o_quote_left.png");    font-size: 6em;    left: -0.15em;    line-height: 0.1em;    position: relative;    top: -0.15em;}&lt;/style&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Cambria"&gt;&amp;nbsp; &lt;/font&gt;&lt;font  face="Utsaah"&gt;&lt;font face="Cambria"&gt; &lt;/font&gt;&lt;font  face="微软雅黑"&gt;一直以来都想把自己的博客风格与外观好好调整一下，让人有耳目一新的感觉，每当看到别人漂亮的博客，这种冲动更加强烈。终于利用一点时间学习了一下如何改变自己博客风格的方法、工具、注意事项，通过实践觉得还是有挺多收获的，因此将学习过程记录下来，为有这方面需要的人提供一点帮助。为不使大家对较多文字感到厌烦，我尽量言简意赅！&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;strong&gt;一、编写准备&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font  face="微软雅黑"&gt;俗话说“工欲善其事，必先利其器”，编写博客也有一些工具、插件帮助你实现自己的风格，我选择的是Window Live Writer，它可与博客服务器连接即时发布，具有离线编辑，所见其所得，插件支持等强大功能。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font  face="微软雅黑"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Window Live Writer下载地址：&lt;/font&gt;&lt;a title="http://explore.live.com/windows-live-writer" href="http://explore.live.com/windows-live-writer；"&gt;&lt;font &gt;&lt;font face="微软雅黑"&gt;http://explore.live.com/windows-live-writer；&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font  face="微软雅黑"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Window Live Writer配置使用：打开Window Live Writer－日志－添加日志账户，根据你的博客地址选择日志服务，然后填写URL地址（访问博客URL），用户名（登录名），密码，连接（Window Live Writer会下载你日志服务器后台环境设置，Web编辑器、CSS样式等）；&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font  face="微软雅黑"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Window Live Writer的三种视图：编辑，预览，源代码&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font  face="微软雅黑"&gt;编辑：进行正常的文字编辑，提供通用的排版、格式设置等功能 &lt;/font&gt; &lt;li&gt;&lt;font  face="微软雅黑"&gt;预览：提供日志的预览功能，与发布后的日志效果基本一志（模拟IE浏览器，对于Firefox与Chrome的样式不能支持） &lt;/font&gt; &lt;li&gt;&lt;font  face="微软雅黑"&gt;源代码：提供日志后台源码编辑功能，增加扩展性和灵活性，但由于源码较复杂，对于没有HTML基础的人来说是难以想像的。。。&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font  face="微软雅黑"&gt;&amp;nbsp;&amp;nbsp; Window Live Writer插件支持，可以为Window Live Writer安装一些插件来辅助编辑，插件的下载地址集中存放于微软的&lt;/font&gt;&lt;a href="http://plugins.live.com/writer/browse?orderby=featured&amp;amp;page=1"&gt;&lt;font  face="微软雅黑"&gt;Window Live Plugs&lt;/font&gt;&lt;/a&gt;&lt;font  face="微软雅黑"&gt;网站，可以根据分类下载需要的插件到本地，直接运行安装，然后重新启动Window Live Writer在右下角可看到插件button标识。常用插件如：&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://plugins.live.com/writer/detail/polaroid-picture"&gt;&lt;font  face="微软雅黑"&gt;Polaroid Picture&lt;/font&gt;&lt;/a&gt;&lt;font  face="微软雅黑"&gt;可以制作漂亮的宝丽来相纸效果，插入图片，非常受欢迎。 &lt;/font&gt; &lt;li&gt;&lt;a href="http://plugins.live.com/writer/detail/inserting-plugin-code"&gt;&lt;font  face="微软雅黑"&gt;插入代码块&lt;/font&gt;&lt;/a&gt;&lt;font  face="微软雅黑"&gt; 使用SyntaxHighlightx库 支持代码折叠，用户选择是否折叠代码 定义折叠显示的名称 用户添加网站模版，非常适合编辑含有代码的博客日志。 &lt;/font&gt; &lt;li&gt;&lt;a href="http://plugins.live.com/writer/detail/paste-from-visual-studio"&gt;&lt;font  face="微软雅黑"&gt;from Visul Studio&lt;/font&gt;&lt;/a&gt;&lt;font  face="微软雅黑"&gt;插件可将复制或剪切自Visual Studio等IDE环境中代码保持原样粘贴到所编辑日志中，具体使用：IDE中复制代码－Window Live Writer中确认要插入位置，点击from Visul Studio粘贴即可 &lt;/font&gt; &lt;li&gt;&lt;font  face="微软雅黑"&gt;Inert Symbol 可以插入一些特殊符号&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;二、日志编写&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font  face="微软雅黑"&gt;&amp;nbsp; 持续更新。。。 &lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/2514967.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2012/05/23/2514967.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2012/05/14/2498839.html</id><title type="text">Eclipse历史及版本介绍（转）</title><summary type="text">Eclipse历史及版本介绍</summary><published>2012-05-14T01:04:00Z</published><updated>2012-05-14T01:04:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2012/05/14/2498839.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2012/05/14/2498839.html"/><content type="html">&lt;div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: 20px !important; background-image: url(http://imgsrc.baidu.com/css/pic/item/365aa007813ec5e17a894706.jpg); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; padding-left: 30px; font-weight: bold; overflow-x: hidden; overflow-y: hidden; text-align: -webkit-left; background-repeat: no-repeat no-repeat; "&gt;Eclipse历史及版本介绍&lt;/div&gt;&lt;div style="font-family: Georgia; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 12px; line-height: 20px !important; margin-top: 10px; margin-bottom: 10px; margin-left: 0px; color: #9d9d9d; margin-right: 20px; text-align: right; background-color: #ffffff; "&gt;2011-04-18 5:36 P.M.&lt;/div&gt;&lt;table style="line-height: 20px !important; table-layout: fixed; font-family: Arial; background-color: #ffffff; width: 927px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 12px; "&gt;&lt;div id="blog_text" style="font-family: Tahoma; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; color: #555555; overflow-x: hidden; overflow-y: hidden; position: relative !important; border-image: initial; "&gt;&lt;p&gt;2001年11月7日 ，Eclipse 1.0发布&amp;nbsp;&amp;nbsp;&lt;br /&gt;半年之后，2002年6月27日Eclipse进入了2.0时代。2.0时代的Eclipse经历了2.0和2.1两个大的版本。其中2.0在 之后又推出了2.0.1和2.0.2，而之后在2003年3月27日推出的2.1版本，也接连推出了2.1.1，2.1.2和2.1.3三个后续修订版本。&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;2004年6月25日 对Eclipse来说是一个值得记住的日子，进入3.0时代的Eclipse采用了OSGi运行时架构。这一年 Eclipse基金会成立，这也标志着Eclipse即将进入一个新的时代。3.0后有两个小的修订版本3.0.1和3.0.2。详细的发布时间信息请参 看Eclipse官网&lt;a href="http://archive.eclipse.org/eclipse/downloads/index.php" style="text-decoration: none; font-weight: bold; color: #445f88; font-family: Georgia; "&gt;http://archive.eclipse.org/eclipse/downloads/index.php&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;2005年6月27日 Eclipse 3.1发布，之所以要特别提一下3.1，是因为从这个版本开始一直到还没有发布的3.5版，形成了一个以木星卫星名称相关的系列。1610年，著名的科学 家伽利略通过对木卫1-木卫4的观察，提出了反驳地心说的证据，木卫1-木卫4因此也被称之为伽利略四大卫星（木星还有很多之后发现的其它卫星）。这四大 卫星还被分别赋予了四个神话传说中人物的名字：&amp;nbsp;&amp;nbsp;&lt;br /&gt;木卫1：IO，伊奥&amp;nbsp;&amp;nbsp;&lt;br /&gt;木卫2：Europa，欧罗巴&amp;nbsp;&amp;nbsp;&lt;br /&gt;木卫3：Ganymede，盖尼米德.(值得一提的是早于伽利略2000年前,有记录表明战国时期中国的甘德在公元前346年就已发现了木卫3)&amp;nbsp;&amp;nbsp;&lt;br /&gt;木卫4：Callisto，卡里斯托&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;(取这四个人的名字，一个很重要的原因可能就在于这四个人物都以俊美著称)&lt;br /&gt;&lt;br /&gt;但是Eclipse从3.1到3.4的命名（codename）并非按照木卫1-4的顺序，而是根据这四颗卫星距离木星从近到远的顺序，因此 Eclipse 3.1就使用了木星已知卫星中第1近的木卫1&amp;#8212;&amp;#8212;IO来命名，Eclipse 3.2就使用木卫4&amp;#8212;&amp;#8212;Callisto距木星（所有木卫中）第4近，Eclipse 3.3采用了木卫2&amp;#8212;&amp;#8212;Europa（第6近），剩下最远的木卫3--Ganaymede就送给了Eclipse 3.4。&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;下面是目前已知的版本代号&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.1 版本代号 IO 【木卫1，伊奥】&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.2 版本代号 Callisto 【木卫四，卡里斯托 】&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.3 版本代号 Eruopa 【木卫二，欧罗巴 】&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.4 版本代号 Ganymede 【木卫三，盖尼米德 】&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.5 版本代号 Galileo 【伽利略】&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.6 版本代号 Helios 【太阳神】&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; "&gt;Eclipse 3.7 版本代号 Indigo 【靛青】[处于计划阶段]&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/2498839.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2012/05/14/2498839.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2012/05/08/2489924.html</id><title type="text">mysql常用命令操作</title><summary type="text">mysql常用命令操作，陆续更新中。。。。</summary><published>2012-05-08T05:15:00Z</published><updated>2012-05-08T05:15:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2012/05/08/2489924.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2012/05/08/2489924.html"/><content type="html">&lt;div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: 26px; font-weight: bold; text-align: left; border-left-width: 5px; border-left-style: solid; border-left-color: #87b8de; text-indent: 8px; overflow-x: hidden; overflow-y: hidden; background-color: #f3fafd; "&gt;&amp;nbsp;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;使用SHOW语句找出在服务器上当前存在什么数据库：&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;&lt;ccid_nobr style="font-family: 宋体; background-color: #f8f8f8; "&gt;&lt;table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="font-size: 12px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#e6e6e6" style="font-size: 9pt; "&gt;&lt;ccid_code&gt;mysql&amp;gt; SHOW DATABASES;  +----------+  | Database |  +----------+  | mysql |  | test |  +----------+  3 rows in set (0.00 sec)&lt;/ccid_code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;2、创建一个数据库abccs&lt;/strong&gt;&amp;nbsp;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;mysql&amp;gt; CREATE DATABASE abccs;&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;注意不同操作系统对大小写的敏感。&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;3、选择你所创建的数据库&lt;/strong&gt;&amp;nbsp;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;mysql&amp;gt; USE abccs&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;Database changed&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;此时你已经进入你刚才所建立的数据库abccs.&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;4、 创建一个数据库表&lt;/strong&gt;&amp;nbsp;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;首先看现在你的数据库中存在什么表：&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;mysql&amp;gt; SHOW TABLES;&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;Empty set (0.00 sec)&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable:&amp;nbsp;&amp;nbsp;&amp;nbsp;我们要建立一个你公司员工的生日表，表的内容包含员工姓名、性别、出生日期、出生城市。&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;ccid_nobr style="font-family: 宋体; background-color: #f8f8f8; "&gt;&lt;table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="font-size: 12px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#e6e6e6" style="font-size: 9pt; "&gt;&lt;ccid_code&gt;mysql&amp;gt; CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1),  -&amp;gt; birth DATE, birthaddr VARCHAR(20));  Query OK, 0 rows affected (0.00 sec)&lt;/ccid_code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;由于name、birthadd的列值是变化的，因此选择VARCHAR，其长度不一定是20。可以选择从1到255的任何长度，如果以后需要改变它的字长，可以使用ALTER TABLE语句。）;性别只需一个字符就可以表示："m"或"f"，因此选用CHAR(1);birth列则使用DATE数据类型。&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;创建了一个表后，我们可以看看刚才做的结果，用SHOW TABLES显示数据库中有哪些表：&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;ccid_nobr style="font-family: 宋体; background-color: #f8f8f8; "&gt;&lt;table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="font-size: 12px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#e6e6e6" style="font-size: 9pt; "&gt;&lt;ccid_code&gt;mysql&amp;gt; SHOW TABLES;  +---------------------+  | Tables in menagerie |  +---------------------+  | mytables |  +---------------------+&lt;/ccid_code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;5、显示表的结构：&lt;/strong&gt;&amp;nbsp;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;ccid_nobr style="font-family: 宋体; background-color: #f8f8f8; "&gt;&lt;table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="font-size: 12px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#e6e6e6" style="font-size: 9pt; "&gt;&lt;ccid_code&gt;mysql&amp;gt; DESCRIBE mytable;  +-------------+-------------+------+-----+---------+-------+  | Field | Type | Null | Key | Default | Extra |  +-------------+-------------+------+-----+---------+-------+  | name | varchar(20) | YES | | NULL | |  | sex | char(1) | YES | | NULL | |  | birth | date | YES | | NULL | |  | deathaddr | varchar(20) | YES | | NULL | |  +-------------+-------------+------+-----+---------+-------+  4 rows in set (0.00 sec)&lt;/ccid_code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;6、 往表中加入记录&lt;/strong&gt;&amp;nbsp;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;我们先用SELECT命令来查看表中的数据：&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;mysql&amp;gt; select * from mytable;&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;Empty set (0.00 sec)&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;这说明刚才创建的表还没有记录。&amp;nbsp;加入一条新记录：&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;ccid_nobr style="font-family: 宋体; background-color: #f8f8f8; "&gt;&lt;table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="font-size: 12px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#e6e6e6" style="font-size: 9pt; "&gt;&lt;ccid_code&gt;mysql&amp;gt; insert into mytable  -&amp;gt; values (&amp;#8242;abccs&amp;#8242;,&amp;#8242;f&amp;#8242;,&amp;#8242;1977-07-07&amp;#8242;,&amp;#8242;china&amp;#8242;);  Query OK, 1 row affected (0.05 sec)&lt;/ccid_code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;再用上面的SELECT命令看看发生了什么变化。我们可以按此方法一条一条地将所有员工的记录加入到表中。&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;strong style="font-family: 宋体; background-color: #f8f8f8; "&gt;7、用文本方式将数据装入一个数据库表&lt;/strong&gt;&amp;nbsp;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;如果一条一条地输入，很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。创建一个文本文件&amp;#8220;mysql.txt&amp;#8221;，每行包含一个记录，用定位符(tab)把值分开，并且以在CREATE TABLE语句中列出的列次序给出，例如：&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;ccid_nobr style="font-family: 宋体; background-color: #f8f8f8; "&gt;&lt;table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="font-size: 12px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#e6e6e6" style="font-size: 9pt; "&gt;&lt;ccid_code&gt;abccs f 1977-07-07 china 　  mary f 1978-12-12 usa  tom m 1970-09-02 usa&lt;/ccid_code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;使用下面命令将文本文件&amp;#8220;mytable.txt&amp;#8221;装载到mytable表中:mysql&amp;gt; LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet;&amp;nbsp;&lt;/span&gt;&lt;br style="font-family: 宋体; background-color: #f8f8f8; " /&gt;&lt;span style="font-family: 宋体; background-color: #f8f8f8; "&gt;再使用如下命令看看是否已将数据输入到数据库表中：mysql&amp;gt; select * from mytable;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-weight: bold; line-height: 26px; text-align: left; text-indent: 8px; background-color: #f3fafd; "&gt;mysql 显示表结构&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;table style="table-layout: fixed; font-family: Arial; background-color: #f3fafd; width: 898px; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 12px; line-height: 18px; "&gt;&lt;div id="blog_text" style="word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; overflow-x: hidden; overflow-y: hidden; position: relative !important; border-image: initial; "&gt;&lt;p&gt;desc 表名;&lt;br /&gt;show columns from 表名;&lt;br /&gt;describe 表名;&lt;br /&gt;show create table 表名;&lt;/p&gt;&lt;p&gt;select * from INFORMATION_SCHEMA.COLUMNS Where&amp;nbsp;&lt;span style="color: #ff0000; "&gt;TABLE_SCHEMA='数据库名'&lt;/span&gt;&amp;nbsp;and table_name = '表名';&lt;/p&gt;&lt;p&gt;注意红色部分。&lt;/p&gt;&lt;p&gt;在多个数据库有相同表名，就会出现重复的字段，红色部分是为了约束范围。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;strong style="line-height: normal; "&gt;&lt;span style="color: #ff0000; "&gt;当数据表结构修改时，该语句需要重启MYSQL才能使结构变化改动生效！&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: 26px; font-weight: bold; text-align: left; border-left-width: 5px; border-left-style: solid; border-left-color: #87b8de; text-indent: 8px; overflow-x: hidden; overflow-y: hidden; background-color: #f3fafd; "&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/2489924.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2012/05/08/2489924.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2012/05/07/2487374.html</id><title type="text">table布局 height=100%无效分析（原创）</title><summary type="text">在使用table表格进行页面布局时，经常使用将表格高度设置style="height:100%"来实现表格高度满屏效果，但在最新的浏览器中经常遇到无效，根本原因再于浏览器使用用的工作模式的不同造成的</summary><published>2012-05-07T06:37:00Z</published><updated>2012-05-07T06:37:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2012/05/07/2487374.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2012/05/07/2487374.html"/><content type="html">&lt;div&gt;在使用table表格进行页面布局时，经常使用将表格高度设置style="height:100%"来实现表格高度满屏效果，但在最新的浏览器中经常遇到无效，根本原因再于浏览器使用用的工作模式的不同造成的；在Firefox与IE8标准模式下，HTML与Body标签默认是没有高度（即高度为0）&amp;nbsp;，而是根据其中的内容自适应，如果设置表格的style="height:100%"，达不到全屏效果。&lt;/div&gt;&lt;p&gt;&lt;strong&gt;问题分析：&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;有关浏览器工作模式大致可分为三种：Standarded Mode， Almost Standarded Mode及Quirks Mode，其中Standarded Mode最为严格，即页面要求最规范，最符合W3C标准，又称为Strict Mode；Quirks Mode是指浏览器模拟早期浏览器版本，为了适应早期页面中不规范的标签等；Almost Standarded Mode是当前使用最广泛的工作模式，是一种由不规范到规范过渡（其实它与Standarded Mode区别并不大，仅在图片显示及少量脚本解析上存在差异）。以上三种模式是由页面最开始的&amp;lt;!DOCTYPE&amp;gt;（文档对象类型）定义的，浏览器在加载页面时，首先根据文档对象类型定义来判断当前页面是应该使用哪种工作模式来渲染页面以达到页面定义者的预期效果。&lt;/p&gt;&lt;p&gt;常见&amp;nbsp;HTML中&amp;lt;!DOCTYPE&amp;gt;（文档对象类型）有：&lt;/p&gt;&lt;p class="code"&gt;&amp;nbsp;（1）&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;（注意其中&amp;nbsp;Transitional 表示：Almost Standarded Mode&amp;nbsp;）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;（2）&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd"&amp;gt;（表示：Standarded Mode&amp;nbsp;）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;（3） 未写&amp;lt;!DOCTYPE&amp;gt;声明，或&amp;lt;!DOCTYPE &amp;gt;声明书写有误，则工作在Quriks Mode&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;（4） &amp;lt;!DOCTYPE html&amp;gt;（Transitional 的简化：Almost Standarded Mode）&lt;/p&gt;&lt;p&gt;获取更多有关DOCTYPE信息请查看：&lt;a href="http://www.w3school.com.cn/tags/tag_doctype.asp"&gt;W3C DOCTYPE&lt;/a&gt;&amp;nbsp;&lt;a href="https://developer.mozilla.org/en/Mozilla%2527s_DOCTYPE_sniffing"&gt;Mozilla's DOCTYPE sniffing&lt;/a&gt;&lt;/p&gt;&lt;p&gt;回到问题：&amp;nbsp;&lt;/p&gt;&lt;p&gt;一个对象高度是否可以使用百分比显示，取决于对象的父级对象，Table在body之中，因此它的父级是body，而浏览器在标准模式下，是没有给body一个高度属性的，因此当设置height:100%;时，不会产生任何效果（内容根据高度自适应），而当给body设置了100%之后（相对于html标签），它的子级对象Table的height:100%;便发生作用了，这便是浏览器解析规则引发的高度自适应问题。值得注意：Firefox中的HTML标签不是 100%高度，因此给两个标签都定义为height:100%;以保证两个浏览器下均能够正常显示。&lt;/p&gt;&lt;p&gt;解决方案：（1）为&amp;lt;html&amp;gt;与&amp;lt;body&amp;gt;标签添加100%的高宽属性。&amp;nbsp;（2）可直接删除&amp;lt;!DOCTYPE&amp;gt;定义，这样浏览器会工作在Quriks Mode下，body与html默认有高宽度，但不推荐这种方式&lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;lt;style type="text/css"&amp;gt;&lt;/div&gt;&lt;div&gt;html,body{ &lt;/div&gt;&lt;p&gt;width:100%;&amp;nbsp;&lt;/p&gt;&lt;p&gt;height:100%;&lt;/p&gt;&lt;p&gt;}&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;lt;!--以下设置全屏--&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;body {&lt;/div&gt;&lt;div&gt;margin-left: 0px;&lt;/div&gt;&lt;div&gt;margin-top: 0px;&lt;/div&gt;&lt;div&gt;margin-right: 0px;&lt;/div&gt;&lt;div&gt;margin-bottom: 0px;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&amp;lt;/style&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/2487374.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2012/05/07/2487374.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2012/04/28/2475490.html</id><title type="text">18种常见室内花卉的功效 (转自网络)</title><summary type="text">18种常见室内花卉的功效 多了解一些花卉，亲近植物，让心情也好起来</summary><published>2012-04-28T09:28:00Z</published><updated>2012-04-28T09:28:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2012/04/28/2475490.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2012/04/28/2475490.html"/><content type="html">&lt;p align="CENTER"&gt;&lt;strong&gt;18&lt;/strong&gt;&lt;strong&gt;种常见室内花卉的功效&lt;/strong&gt;&lt;/p&gt; &lt;p align="left"&gt; &lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt;：滴水观音：有清除空气灰尘的功效。（不能放在卧室）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/1.jpg" height="516" width="260" /&gt;&lt;/div&gt;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt;：非洲茉莉：产生的挥发性油类具有显著的杀菌作用。可使人放松、有利于睡眠，还能提高工作效率。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/2.jpg" height="391" width="363" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;3&lt;/strong&gt;&lt;strong&gt;：白掌：抑制人体呼出的废气&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;如氨气和丙酮&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;同时它也可以过滤空气中的苯、三氯乙烯和甲醛。它的高蒸发速度可以防止鼻粘膜干燥，使患病的可能性大大降低。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/3.jpg" height="337" width="261" /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;4&lt;/strong&gt;&lt;strong&gt;：银皇后：以它独特的空气净化能力著称：空气中污染物的浓度越高，它越能发挥其净化能力！因此它非常适合通风条件不佳的阴暗房间。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/4.jpg" height="337" width="426" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;5&lt;/strong&gt;&lt;strong&gt;：铁线蕨：每小时能吸收大约&lt;/strong&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;strong&gt;微克的甲醛，因此被认为是最有效的生物&lt;/strong&gt;&lt;strong&gt;&amp;#8220;净化器&amp;#8221;。成天与油漆、涂料打交道者，或者身边有喜好吸烟的人，应该在工作场所放至少一盆蕨类植物。另外，它还可以抑制电脑显示器和打印机中释放的二甲苯和甲苯。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/5.jpg" height="454" width="334" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;6:&lt;/strong&gt;&lt;strong&gt;鸭脚木：给吸烟家庭带来新鲜的空气。叶片可以从烟雾弥漫的空气中吸收尼古丁和其他有害物质，并通过光合作用将之转换为无害的植物自有的物质。另外，它每小时能把甲醛浓度降低大约&lt;/strong&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;strong&gt;毫克。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/6.jpg" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;7:&lt;/strong&gt;&lt;strong&gt;吊兰&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;能吸收空气中&lt;/strong&gt;&lt;strong&gt;95%&lt;/strong&gt;&lt;strong&gt;的一氧化碳和&lt;/strong&gt;&lt;strong&gt;85%&lt;/strong&gt;&lt;strong&gt;的甲醛&lt;/strong&gt;&lt;strong&gt;. &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;吊兰能在微弱的光线下进行光合作用&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;吊兰能吸收空气中的有毒有害气体&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;一盆吊兰在&lt;/strong&gt;&lt;strong&gt;8~10&lt;/strong&gt;&lt;strong&gt;平米的房间就相当于一个空气净化器&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;一般在房间内养&lt;/strong&gt;&lt;strong&gt;1~2&lt;/strong&gt;&lt;strong&gt;盆吊兰&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;能在&lt;/strong&gt;&lt;strong&gt;24&lt;/strong&gt;&lt;strong&gt;小时释放出氧气&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;同时吸收空气中的甲醛&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;苯乙烯&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;一氧化碳&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;二氧化碳等致癌物质&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;吊兰对某些有害物质的吸收力特别强&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;比如空气中混合的一氧化碳和甲醛分别能达到&lt;/strong&gt;&lt;strong&gt;95%&lt;/strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;strong&gt;85%.&lt;/strong&gt;&lt;strong&gt;吊兰还能分解苯&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;吸收香烟烟雾中的尼古丁等比较稳定的有害物质&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;所以吊兰又被称为室内空气的绿色净化器&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/7.jpg" height="422" width="411" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;8:&lt;/strong&gt;&lt;strong&gt;芦荟&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;一盆芦荟相当于九台生物空气清洁器&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;盆栽芦荟有空气净化专家的美誉&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;一盆芦荟就等于九台生物空气清洁器&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;可吸收甲醛&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;二氧化碳&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;二氧化硫&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;一氧化碳等有害物质&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;尤其对甲醛吸收特别强&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;在&lt;/strong&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;strong&gt;小时光照条件下&lt;/strong&gt;&lt;strong&gt;..&lt;/strong&gt;&lt;strong&gt;一盆芦荟可消除一平方米空气中&lt;/strong&gt;&lt;strong&gt;90%&lt;/strong&gt;&lt;strong&gt;的甲醛&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;还能杀灭空气中的有害微生物&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;并能吸附灰尘&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;对净化居室环境有很大作用&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;当室内有害空气过高时芦荟的叶片就会出现斑点&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;这就是求援信号&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;只要在室内再增加几盆芦荟&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;室内空气质量又会趋于正常&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/8.jpg" height="412" width="332" /&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;9:&lt;/strong&gt;&lt;strong&gt;龟背竹&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;夜间吸收二氧化碳&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;改善空气质量&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;龟背竹净化空气的功能略微弱一些&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;它不像吊兰&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;芦荟是净化空气的多面手&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;但龟背竹对清除空气中的甲醛的效果比较明显&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;另外&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;龟背竹有晚间吸收二氧化碳的功效&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;对改善室内空气质量&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;提高含氧量有很大帮助&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;加上龟背竹一般植株较大&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;造型优雅&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;叶片又比较疏朗美观&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;所以是一种非常理想的室内植物&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;龟背竹的果实成熟后可以做菜&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;香味像凤梨或者香蕉&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/9.jpg" height="350" width="258" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;10:&lt;/strong&gt;&lt;strong&gt;常春藤&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;吸收甲醛的冠军&lt;/strong&gt;&lt;strong&gt;. &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;常春藤是目前吸收甲醛最有效的室内植物&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;每平方米的常春藤的叶片可以吸收甲醛&lt;/strong&gt;&lt;strong&gt;1.48&lt;/strong&gt;&lt;strong&gt;毫克&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;而&lt;/strong&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt;盆成年的常春藤的叶片总面积大约&lt;/strong&gt;&lt;strong&gt;0.78&lt;/strong&gt;&lt;strong&gt;平方米&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;同时常春藤还可以吸收苯这种有毒有害物质&lt;/strong&gt;&lt;strong&gt;,24&lt;/strong&gt;&lt;strong&gt;小时光照条件下可吸收室内&lt;/strong&gt;&lt;strong&gt;90%&lt;/strong&gt;&lt;strong&gt;的苯&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;根据推测&lt;/strong&gt;&lt;strong&gt;,10&lt;/strong&gt;&lt;strong&gt;平方米的房间&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;只需要放上&lt;/strong&gt;&lt;strong&gt;2-3&lt;/strong&gt;&lt;strong&gt;盆常春藤就可以起到净化空气的作用&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;它还能吸附微粒灰尘&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/10.jpg" height="325" width="260" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;11:&lt;/strong&gt;&lt;strong&gt;橡皮树&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;消除有害物质的多面手&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;橡皮树是一个消除有害植物的多面手&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;对空气中的一氧化碳&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;二氧化碳&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;氟化氢等有害气体有一定抗性&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;橡皮树还能消除可吸入颗粒物污染&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;对室内灰尘能起到有效的滞尘作用&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/11.jpg" height="522" width="489" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;12:&lt;/strong&gt;&lt;strong&gt;文竹&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;消灭细菌和病毒的防护伞&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;文竹含有的植物芳香有抗菌成分&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;可以清除空气中的细菌和病毒&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;具有保健功能&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;所以文竹释放出的气味有杀菌益菌之力&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;此外&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;文竹还有很高的药用价值&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;挖取它的肉质根洗去上面的尘土污垢&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;晒干备用或新鲜即用&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;叶状枝随用随采&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;均有止咳润肺凉血解毒之功效&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/12.jpg" height="360" width="357" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;13:&lt;/strong&gt;&lt;strong&gt;棕竹&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;消除重金属污染和二氧化碳&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;棕竹的功能类似龟背竹&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;同属于大叶观赏植物的棕竹能够吸收&lt;/strong&gt;&lt;strong&gt;80%&lt;/strong&gt;&lt;strong&gt;以上的多种有害气体&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;净化空气&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;同时棕竹还能消除重金属污染并对二氧化硫污染有一定的抵抗作用&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;当然作为叶面硕大的观叶植物&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;他们最大的特点就是具有一般植物所不能企及的消化二氧化碳并制造氧气的功能&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/13.jpg" height="517" width="301" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;14:&lt;/strong&gt;&lt;strong&gt;富贵竹&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;适合卧室的健康植物&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;富贵竹可以帮助不经常开窗通风的房间改善空气质量&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;具有消毒功能&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;尤其是卧室&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;富贵竹可以有效的吸收废气&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;使卧室的私密环境得到改善&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/14.jpg" height="326" width="450" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;15:&lt;/strong&gt;&lt;strong&gt;发财树&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;对抗烟草燃烧产生的废气&lt;/strong&gt;&lt;strong&gt;. &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;发财树四季长青&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;能通过光合作用吸收有毒气体释放氧气&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;能比较有效的吸收一氧化碳和二氧化碳的污染&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;对抵抗烟草燃烧产生的废气有一定作用&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt; &lt;p align="CENTER"&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/15.jpg" height="565" width="303" /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;16:&lt;/strong&gt;&lt;strong&gt;绿萝&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;改善空气质量消除有害物质。绿萝的生命力很强&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;吸收有害物质的能力也很强&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;可以帮助不经常开窗通风的房间改善空气质量&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;绿萝还能消除甲醛等有害物质&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;其功能不亚于长春藤&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;吊兰&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/16.jpg" height="459" width="248" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt; &lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;17:&lt;/strong&gt;&lt;strong&gt;仙人掌&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;减少电磁辐射的最佳植物&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;仙人掌具有很强的消炎灭菌作用&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;在对付污染方面&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;仙人掌是减少电磁辐射的最佳植物&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;此外仙人掌夜间吸收二氧化碳释放氧气。晚上居室内放有仙人掌&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;就可以补充氧气&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;利于睡眠&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt; &lt;/p&gt; &lt;p align="CENTER"&gt; &lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/17.jpg" height="379" width="253" /&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="LEFT"&gt; &lt;strong&gt;18:&lt;/strong&gt;&lt;strong&gt;君子兰&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;strong&gt;释放氧气&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;吸收烟雾的清新剂&lt;/strong&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;一株成年的君子兰，一昼夜能吸收&lt;/strong&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt;立升空气&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;释放&lt;/strong&gt;&lt;strong&gt;80%&lt;/strong&gt;&lt;strong&gt;的氧气，在极其微弱的光线下也能发生光合作用。它在夜里不会散发二氧化碳&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;在十几平方米的室内有两三盆君子兰就可以把室内的烟雾吸收掉&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;特别是北方寒冷的冬天&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;由于门窗紧闭&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;室内空气不流通&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;strong&gt;君子兰会起到很好的调节空气的作用&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;strong&gt;保持室内空气清新&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/18.jpg" height="436" width="570" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="CENTER"&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/2475490.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2012/04/28/2475490.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2010/09/11/1824016.html</id><title type="text">C++ string学习</title><summary type="text">C++中string是标准库中一种容器,相当于保存元素类型为char的vector容器(自己理解),这个类提供了相当丰富的函数来完成对字符串操作,以及与C风格字符串之间转换,下面是对string一些总结</summary><published>2010-09-11T08:33:00Z</published><updated>2010-09-11T08:33:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2010/09/11/1824016.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2010/09/11/1824016.html"/><content type="html">&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;C++中string是标准库中一种容器,相当于保存元素类型为char的vector容器(自己理解),这个类提供了相当丰富的函数来完成对字符串操作,以及与C风格字符串之间转换,下面是对string一些总结&amp;lt;引用&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;一，C语言的字符串&lt;/p&gt;&lt;p&gt;在C语言里，对字符串的处理一项都是一件比较痛苦的事情，因为通常在实现字符串的操作的时候都会用到最不容易驾驭的类型&amp;#8212;&amp;#8212;指针。&lt;/p&gt;&lt;p&gt;比如下面这个例子：&lt;/p&gt;&lt;p&gt;//example 1:&lt;/p&gt;&lt;p&gt;char str[12] = "Hello";&lt;/p&gt;&lt;p&gt;char *p = str;&lt;/p&gt;&lt;p&gt;*p = 'h';&amp;nbsp; //改变第一个字母&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//example 2:&lt;/p&gt;&lt;p&gt;char *ptr = "Hello"; &lt;/p&gt;&lt;p&gt;*ptr = 'h';&amp;nbsp; //错误&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第一个字符串时用数组开辟的，它是可以改变的变量。而第二个字符串则是一个常量，也就是字面值。ptr只是指向它的指针而已，而不能改变指向的内容。&lt;/p&gt;&lt;p&gt;看两者的汇编即可明了：&lt;/p&gt;&lt;p&gt;char p[] = "Hello";&lt;br /&gt;004114B8&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [string "Hello" (4166FCh)] &lt;br /&gt;004114BD&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [ebp-10h],eax &lt;br /&gt;004114C0&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cx,word ptr ds:[416700h] &lt;br /&gt;004114C7&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word ptr [ebp-0Ch],cx &lt;/p&gt;&lt;p&gt;char *ptr = "Hello";&lt;br /&gt;004114CB&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [ebp-1Ch],offset string "Hello" (4166FCh) &lt;/p&gt;&lt;p&gt;可见用数组和用指针是完全不相同的。&lt;/p&gt;&lt;p&gt;要想通过指针来改变常量是错误，正确的写法应该是用const指针。&lt;/p&gt;&lt;p&gt;const char *ptr = "Hello";&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二，初识string类&lt;/p&gt;&lt;p&gt;正是因为C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握，不适合大程序的开发，所以C++标准库定义了一种string类，定义在头文件&amp;lt;string&amp;gt;。注意&amp;lt;string.h&amp;gt;和&amp;lt;cstring&amp;gt;都是错误的，这两个头文件主要定义C风格字符串操作的一些方法，譬如strlen(), strcpy()等。第一个是C的头文件格式，而第二个是C++风格的头文件，但是和&amp;lt;string.h&amp;gt;是一样的，它的目的是为了和C兼容。&lt;/p&gt;&lt;p&gt;看下面例子:&lt;/p&gt;&lt;p&gt;//example 3:&lt;/p&gt;&lt;p&gt;string str("world");&amp;nbsp;&amp;nbsp; //可以用C风格字符串初始化&lt;/p&gt;&lt;p&gt;string words = "Hello";&lt;/p&gt;&lt;p&gt;string greet = words;&lt;/p&gt;&lt;p&gt;string&amp;nbsp; join = greet + words;&amp;nbsp; //可以像基本类型一样操作&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但是如果试图把string类型的对象直接赋给C风格的字符串的话，编译器会报错的。&lt;/p&gt;&lt;p&gt;string var = "Olympic";&lt;/p&gt;&lt;p&gt;char *ptr = var;&amp;nbsp; //error！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但是实际应用中这个问题也难以避免，很多时候我们还是需要将string类型的转化为char*来实现自定义的操作，C++标准库也为了和之前用C写的程序兼容，于是可以用string的c_str()函数。&lt;/p&gt;&lt;p&gt;string var = "Olympic";&lt;/p&gt;&lt;p&gt;char *ptr = var.c_str(); //还不能被编译&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但是c_str()为了防止意外地修改string对象，返回的是const指针，所以上面这段代码是不能被编译的。正确的应该是用const指针。&lt;/p&gt;&lt;p&gt;string var = "Olympic";&lt;/p&gt;&lt;p&gt;const char *p = var.c_str(); //Correct!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这个c_str()方法在C++IO流操作上也被广泛应用。&lt;/p&gt;&lt;p&gt;在打开文件时，如果要指定文件名，可以用C风格的字符串。如果用到string类型的字符串作为文件名时，就必须调用c_str()方法将其转换为一个C风格字符串。&lt;/p&gt;&lt;p&gt;//example 4:&lt;/p&gt;&lt;p&gt;string&amp;nbsp;&amp;nbsp; filename;&amp;nbsp; //定义文件名称&lt;/p&gt;&lt;p&gt;cin &amp;gt;&amp;gt; filename; &lt;/p&gt;&lt;p&gt;ifstream.open(filename.c_str());&amp;nbsp; //要使用C风格字符串&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;三， 深入了解string类&lt;/p&gt;&lt;p&gt;对string有一定了解以后，我们可以来了解C++标准库定义的一系列丰富的字符串操作，当然都是基于string类型。从某一种程度上来说，string就是一种字符容器。&lt;/p&gt;&lt;p&gt;标准库为string定义了很多方法，包括构造、插入(insert)、替换(assign和replace)、比较(compare)、查找(find)、删除(erase)、连接(append)以及对子串的操作(substr)。而每一种操作都有很多种重载。&lt;/p&gt;&lt;p&gt;比如插入，除了包括标准容器的插入方式以外，string类本身还有一些特有的插入方法。&lt;/p&gt;&lt;p&gt;//example 5:&lt;/p&gt;&lt;p&gt;//与标准容器相同的插入操作：&lt;/p&gt;&lt;p&gt;str.insert(iter, value) //在迭代器iter之前插入value, 返回新元素的迭代器&lt;/p&gt;&lt;p&gt;str.insert(iter, n, value); //在迭代器iter之前插入n个value，返回void&lt;/p&gt;&lt;p&gt;str.insert(iter, begin, end); //在迭代器iter之前插入迭代器begin和end标记范围内的元素，返回void&lt;/p&gt;&lt;p&gt;//string类特有的插入方法:&lt;/p&gt;&lt;p&gt;str.insert(pos, n, ch); //在下标为pos的字符之前插入n个字符ch&lt;/p&gt;&lt;p&gt;str.insert(pos, str2); //在下标为pos的字符之前插入string类型的对象str2的副本&lt;/p&gt;&lt;p&gt;str.insert(pos1, str2, pos2, len); //在下标为pos1的z字符之前插入string类型str2中从下表为pos2开始的len个字符&lt;/p&gt;&lt;p&gt;str.insert(pos, cp); //在下标为pos的字符前插入字符指针cp指向的C风格字符串的副本&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;总之string是一种非常灵活的字符串类型，标准库让我们可以忽略内存管理和具体实现方式，我们只需要关注其接口就好。并且初学者在使用字符串的时候也应尽量使用这种类型，而不是C风格的字符串。&lt;/p&gt;&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;之所以抛弃char*的字符串而选用C++标准程序库中的string类，是因为他和前者比较起来，不必担心内存是否足够、字符串长度等等，而且作为一个类出现，他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作，== 进行比较，+ 做串联（是不是很简单?）。我们尽可以把它看成是C++的基本数据类型。&lt;br /&gt;&amp;nbsp; &amp;nbsp;好了，进入正题&amp;#8230;&amp;#8230;&amp;#8230;&lt;br /&gt;首先，为了在我们的程序中使用string类型，我们必须包含头文件 &lt;string&gt;&lt;/string&gt;。如下：&lt;br /&gt;&amp;nbsp; &amp;nbsp;#include &lt;string&gt;&lt;/string&gt;//注意这里不是string.h string.h是C字符串头文件&lt;br /&gt;&lt;br /&gt;1．声明一个C++字符串&lt;br /&gt;声明一个字符串变量很简单：&lt;br /&gt;&amp;nbsp; &amp;nbsp;string Str;&lt;br /&gt;这样我们就声明了一个字符串变量，但既然是一个类，就有构造函数和析构函数。上面的声明没有传入参数，所以就直接使用了string的默认的构造函数，这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下：&lt;br /&gt;a) &amp;nbsp; &amp;nbsp;string s; &amp;nbsp;//生成一个空字符串s&lt;br /&gt;b) &amp;nbsp; &amp;nbsp;string s(str) //拷贝构造函数 生成str的复制品&lt;br /&gt;c) &amp;nbsp; &amp;nbsp;string s(str,stridx) //将字符串str内&amp;#8220;始于位置stridx&amp;#8221;的部分当作字符串的初值&lt;br /&gt;d) &amp;nbsp; &amp;nbsp;string s(str,stridx,strlen) //将字符串str内&amp;#8220;始于stridx且长度顶多strlen&amp;#8221;的部分作为字符串的初值&lt;br /&gt;e) &amp;nbsp; &amp;nbsp;string s(cstr) //将C字符串作为s的初值&lt;br /&gt;f) &amp;nbsp; &amp;nbsp;string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。&lt;br /&gt;g) &amp;nbsp; &amp;nbsp;string s(num,c) //生成一个字符串，包含num个c字符&lt;br /&gt;h) &amp;nbsp; &amp;nbsp;string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值&lt;br /&gt;i) &amp;nbsp; &amp;nbsp;s.~string() //销毁所有字符，释放内存&lt;br /&gt;都很简单，我就不解释了。&lt;br /&gt;2．字符串操作函数&lt;br /&gt;&amp;nbsp; &amp;nbsp;这里是C++字符串的重点，我先把各种操作函数罗列出来，不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数，再到后面看他的详细解释。&lt;br /&gt;a) =,assign() &amp;nbsp; //赋以新值&lt;br /&gt;b) swap() &amp;nbsp; //交换两个字符串的内容&lt;br /&gt;c) +=,append(),push_back() //在尾部添加字符&lt;br /&gt;d) insert() //插入字符&lt;br /&gt;e) erase() //删除字符&lt;br /&gt;f) clear() //删除全部字符 &lt;br /&gt;g) replace() //替换字符&lt;br /&gt;h) + //串联字符串&lt;br /&gt;i) ==,!=,&amp;lt;,&amp;lt;=,&amp;gt;,&amp;gt;=,compare() &amp;nbsp;//比较字符串&lt;br /&gt;j) size(),length() &amp;nbsp;//返回字符数量&lt;br /&gt;k) max_size() //返回字符的可能最大个数&lt;br /&gt;l) empty() &amp;nbsp;//判断字符串是否为空&lt;br /&gt;m) capacity() //返回重新分配之前的字符容量&lt;br /&gt;n) reserve() //保留一定量内存以容纳一定数量的字符&lt;br /&gt;o) [ ], at() //存取单一字符&lt;br /&gt;p) &amp;gt;&amp;gt;,getline() //从stream读取某值&lt;br /&gt;q) &amp;lt;&amp;lt; &amp;nbsp;//将谋值写入stream&lt;br /&gt;r) copy() //将某值赋值为一个C_string&lt;br /&gt;s) c_str() //将内容以C_string返回&lt;br /&gt;t) data() //将内容以字符数组形式返回&lt;br /&gt;u) substr() //返回某个子字符串&lt;br /&gt;v)查找函数&lt;br /&gt;w)begin() end() //提供类似STL的迭代器支持&lt;br /&gt;x) rbegin() rend() //逆向迭代器&lt;br /&gt;y) get_allocator() //返回配置器&lt;br /&gt;下面详细介绍：&lt;br /&gt;2．1 C++字符串和C字符串的转换&lt;br /&gt;&amp;nbsp; &amp;nbsp;C++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy()，其中，data()以字符数组的形式返回字符串内容，但并不添加&amp;#8217;\0&amp;#8217;。c_str()返回一个以&amp;#8216;\0&amp;#8217;结尾的字符数组，而copy()则把字符串的内容复制或写入既有的c_string或字符数组内。C++字符串并不以&amp;#8217;\0&amp;#8217;结尾。我的建议是在程序中能使用C++字符串就使用，除非万不得已不选用c_string。由于只是简单介绍，详细介绍掠过，谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。我详细解释。&lt;br /&gt;2．2 大小和容量函数&lt;br /&gt;&amp;nbsp; &amp;nbsp;一个C++字符串存在三种大小：a)现有的字符数，函数是size()和length()，他们等效。Empty()用来检查字符串是否为空。b)max_size() 这个大小是指当前C++字符串最多能包含的字符数，很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他，应该大小足够我们用的。但是不够用的话，会抛出length_error异常c)capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数，这个函数为string重新分配内存。重新分配的大小由其参数决定，默认参数为0，这时候会对string进行非强制性缩减。&lt;br /&gt;&lt;br /&gt;还有必要再重复一下C++字符串和C字符串转换的问题，许多人会遇到这样的问题，自己做的程序要调用别人的函数、类什么的（比如数据库连接函数Connect(char*,char*)），但别人的函数参数用的是char*形式的，而我们知道，c_str()、data()返回的字符数组由该字符串拥有，所以是一种const char*,要想作为上面提及的函数的参数，还必须拷贝到一个char*,而我们的原则是能不使用C字符串就不使用。那么，这时候我们的处理方式是：如果此函数对参数(也就是char*)的内容不修改的话，我们可以这样Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是这时候是存在危险的，因为这样转换后的字符串其实是可以修改的（有兴趣地可以自己试一试），所以我强调除非函数调用的时候不对参数进行修改，否则必须拷贝到一个char*上去。当然，更稳妥的办法是无论什么情况都拷贝到一个char*上去。同时我们也祈祷现在仍然使用C字符串进行编程的高手们（说他们是高手一点儿也不为过，也许在我们还穿开裆裤的时候他们就开始编程了，哈哈&amp;#8230;）写的函数都比较规范，那样我们就不必进行强制转换了。&lt;br /&gt;&lt;br /&gt;2．3元素存取&lt;br /&gt;&amp;nbsp; &amp;nbsp;我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效（有效索引0~str.length()），如果索引失效，会引起未定义的行为。而at()会检查，如果使用at()的时候索引无效，会抛出out_of_range异常。&lt;br /&gt;&amp;nbsp; &amp;nbsp;有一个例外不得不说，const string a;的操作符[]对索引值是a.length()仍然有效，其返回值是&amp;#8217;\0&amp;#8217;。其他的各种情况，a.length()索引都是无效的。举例如下：&lt;br /&gt;const string Cstr(&amp;#8220;const string&amp;#8221;);&lt;br /&gt;string Str(&amp;#8220;string&amp;#8221;);&lt;br /&gt;&lt;br /&gt;Str[3]; &amp;nbsp; &amp;nbsp;//ok&lt;br /&gt;Str.at(3); &amp;nbsp;//ok&lt;br /&gt;&lt;br /&gt;Str[100]; //未定义的行为&lt;br /&gt;Str.at(100); &amp;nbsp;//throw out_of_range&lt;br /&gt;&lt;br /&gt;Str[Str.length()] &amp;nbsp;//未定义行为&lt;br /&gt;Cstr[Cstr.length()] //返回 &amp;#8216;\0&amp;#8217;&lt;br /&gt;Str.at(Str.length());//throw out_of_range&lt;br /&gt;Cstr.at(Cstr.length()) ////throw out_of_range&lt;br /&gt;&lt;br /&gt;我不赞成类似于下面的引用或指针赋值：&lt;br /&gt;char&amp;amp; r=s[2];&lt;br /&gt;char* p= &amp;amp;s[3];&lt;br /&gt;因为一旦发生重新分配，r,p立即失效。避免的方法就是不使用。&lt;br /&gt;&lt;br /&gt;2．4比较函数&lt;br /&gt;&amp;nbsp; &amp;nbsp;C++字符串支持常见的比较操作符（&amp;gt;,&amp;gt;=,&amp;lt;,&amp;lt;=,==,!=），甚至支持string与C-string的比较(如 str&amp;lt;&amp;#8221;hello&amp;#8221;)。在使用&amp;gt;,&amp;gt;=,&amp;lt;,&amp;lt;=这些操作符的时候是根据&amp;#8220;当前字符特性&amp;#8221;将字符按字典顺序进行逐一得比较。字典排序靠前的字符小，比较的顺序是从前向后比较，遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时，string(&amp;#8220;aaaa&amp;#8221;) &amp;nbsp; &amp;nbsp;另一个功能强大的比较函数是成员函数compare()。他支持多参数处理，支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果，返回值意义如下：0-相等 〉0-大于 &amp;lt;0-小于。举例如下：&lt;br /&gt;&amp;nbsp; &amp;nbsp;string s(&amp;#8220;abcd&amp;#8221;);&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;s.compare(&amp;#8220;abcd&amp;#8221;); //返回0&lt;br /&gt;&amp;nbsp; &amp;nbsp;s.compare(&amp;#8220;dcba&amp;#8221;); //返回一个小于0的值&lt;br /&gt;&amp;nbsp; &amp;nbsp;s.compare(&amp;#8220;ab&amp;#8221;); //返回大于0的值&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;s.compare(s); //相等&lt;br /&gt;&amp;nbsp; &amp;nbsp;s.compare(0,2,s,2,2); //用&amp;#8221;ab&amp;#8221;和&amp;#8221;cd&amp;#8221;进行比较 小于零&lt;br /&gt;&amp;nbsp; &amp;nbsp;s.compare(1,2,&amp;#8221;bcx&amp;#8221;,2); //用&amp;#8221;bc&amp;#8221;和&amp;#8221;bc&amp;#8221;比较。&lt;br /&gt;怎么样？功能够全的吧！什么？还不能满足你的胃口？好吧，那等着，后面有更个性化的比较算法。先给个提示，使用的是STL的比较算法。什么？对STL一窍不通？靠，你重修吧！&lt;br /&gt;&lt;br /&gt;2．5 更改内容&lt;br /&gt;这在字符串的操作中占了很大一部分。&lt;br /&gt;首先讲赋值，第一个赋值方法当然是使用操作符=，新值可以是string(如：s=ns) 、c_string(如：s=&amp;#8221;gaint&amp;#8221;)甚至单一字符（如：s=&amp;#8217;j&amp;#8217;）。还可以使用成员函数assign()，这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧：&lt;br /&gt;s.assign(str); //不说&lt;br /&gt;s.assign(str,1,3);//如果str是&amp;#8221;iamangel&amp;#8221; 就是把&amp;#8221;ama&amp;#8221;赋给字符串&lt;br /&gt;s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s&lt;br /&gt;s.assign(&amp;#8220;gaint&amp;#8221;); //不说&lt;br /&gt;s.assign(&amp;#8220;nico&amp;#8221;,5);//把&amp;#8217;n&amp;#8217; &amp;#8216;I&amp;#8217; &amp;#8216;c&amp;#8217; &amp;#8216;o&amp;#8217; &amp;#8216;\0&amp;#8217;赋给字符串&lt;br /&gt;s.assign(5,&amp;#8217;x&amp;#8217;);//把五个x赋给字符串&lt;br /&gt;把字符串清空的方法有三个：s=&amp;#8221;&amp;#8221;;s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂！)。&lt;br /&gt;string提供了很多函数用于插入（insert）、删除（erase）、替换（replace）、增加字符。&lt;br /&gt;先说增加字符（这里说的增加是在尾巴上），函数有 +=、append()、push_back()。举例如下：&lt;br /&gt;s+=str;//加个字符串&lt;br /&gt;s+=&amp;#8221;my name is jiayp&amp;#8221;;//加个C字符串&lt;br /&gt;s+=&amp;#8217;a&amp;#8217;;//加个字符&lt;br /&gt;&lt;br /&gt;s.append(str);&lt;br /&gt;s.append(str,1,3);//不解释了 同前面的函数参数assign的解释&lt;br /&gt;s.append(str,2,string::npos)//不解释了&lt;br /&gt;&lt;br /&gt;s.append(&amp;#8220;my name is jiayp&amp;#8221;);&lt;br /&gt;s.append(&amp;#8220;nico&amp;#8221;,5);&lt;br /&gt;s.append(5,&amp;#8217;x&amp;#8217;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 字符串操作是一个不小的主题,在标准C++中,string字符串类成为一个标准,&lt;span id="txtObj_0"&gt;之所以抛弃char*的字符串而选用C++标准程序库中的string类，是因为他和前者比较起来，不必担心内存是否足够、字符串长度等等，而且作为一个类出现，他集成的操作函数足以完成我们大多数情况下的需要.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面我们首先从一些示例开始学习下string类的使用.&lt;br /&gt;1)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s("hehe");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;2)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char chs[] = "hehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s(chs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;3)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char chs[] = "hehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s(chs,1,3);&amp;nbsp;&amp;nbsp;&amp;nbsp; //指定从chs的索引1开始,最后复制3个字节&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;4)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s1("hehe");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s2(s1);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s2&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;5)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s1("hehe",2,3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s2(s1);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s2&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;6)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char chs[] = "hehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s(chs,3);&amp;nbsp;&amp;nbsp;&amp;nbsp; //将chs前3个字符作为初值构造&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;7)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s(10,'k');&amp;nbsp;&amp;nbsp;&amp;nbsp; //分配10个字符,初值都是'k'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;//以上是string类实例的构造手段,都很简单.&lt;br /&gt;&lt;br /&gt;9)&lt;br /&gt;//赋新值&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s(10,'k');&amp;nbsp;&amp;nbsp;&amp;nbsp; //分配10个字符,初值都是'k'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = "hehehehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.assign("kdje");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.assign("fkdhfkdfd",5);&amp;nbsp;&amp;nbsp;&amp;nbsp; //重新分配指定字符串的前5的元素内容&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;10)&lt;br /&gt;//swap方法交换&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s1 = "hehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s2 = "gagaga";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s1 : "&amp;lt;&amp;lt;s1&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s2 : "&amp;lt;&amp;lt;s2&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s1.swap(s2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s1 : "&amp;lt;&amp;lt;s1&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s2 : "&amp;lt;&amp;lt;s2&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;11)&lt;br /&gt;//+=,append(),push_back()在尾部添加字符&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "hehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s += "gaga";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.append("嘿嘿");&amp;nbsp;&amp;nbsp;&amp;nbsp; //append()方法可以添加字符串&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.push_back('k');&amp;nbsp;&amp;nbsp;&amp;nbsp; //push_back()方法只能添加一个字符...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;12)&lt;br /&gt;//insert() 插入字符.其实,insert运用好,与其他的插入操作是一样的.&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "hehe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.insert(0,"头部");&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //在头部插入&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.insert(s.size(),"尾部");&amp;nbsp;&amp;nbsp;&amp;nbsp; //在尾部插入&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.insert(s.size()/2,"中间");//在中间插入&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;13)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.erase(0,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; //从索引0到索引1,即删除掉了'a'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //其实,还可以使用replace方法来执行删除操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.replace(2,3,"");//即将指定范围内的字符替换成"",即变相删除了&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;14)&lt;br /&gt;//clear() 删除全部字符&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.length()&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.length()&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //使用earse方法变相全删除&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = "dkjfd";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.length()&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.erase(0,s.length());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.length()&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;15)&lt;br /&gt;//replace() 替换字符&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.replace(2,3,"!!!!!");//从索引2开始3个字节的字符全替换成"!!!!!"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;16)&lt;br /&gt;//==,!=,&amp;lt;,&amp;lt;=,&amp;gt;,&amp;gt;=,compare()&amp;nbsp; 比较字符串&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s1 = "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s2 = "abcdefg";&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s1==s2)cout&amp;lt;&amp;lt;"s1 == s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else cout&amp;lt;&amp;lt;"s1 != s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s1!=s2)cout&amp;lt;&amp;lt;"s1 != s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else cout&amp;lt;&amp;lt;"s1 == s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s1&amp;gt;s2)cout&amp;lt;&amp;lt;"s1 &amp;gt; s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else cout&amp;lt;&amp;lt;"s1 &amp;lt;= s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s1&amp;lt;=s2)cout&amp;lt;&amp;lt;"s1 &amp;lt;= s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else cout&amp;lt;&amp;lt;"s1 &amp;gt; s2"&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;17)&lt;br /&gt;//size(),length()&amp;nbsp; 返回字符数量&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.size()&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.length()&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;18)&lt;br /&gt;//max_size() 返回字符的可能最大个数&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.max_size()&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;19)&lt;br /&gt;//empty()&amp;nbsp; 判断字符串是否为空&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s.empty())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s 为空."&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s 不为空."&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = s + "abcdefg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s.empty())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s 为空."&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"s 不为空."&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;20)&lt;br /&gt;// [ ], at() 存取单一字符&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg1111";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"use []:"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0; i&amp;lt;s.length(); i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s[i]&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"use at():"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0; i&amp;lt;s.length(); i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;s.at(i)&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;21)&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg1111";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char * chs1 = s.c_str();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char * chs2 = s.data();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"use at():"&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;s.length(); i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"c_str() : "&amp;lt;&amp;lt;chs1[i]&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"data() : "&amp;lt;&amp;lt;chs2[i]&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"c_str() : "&amp;lt;&amp;lt;chs1&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"data() : "&amp;lt;&amp;lt;chs2&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;22)&lt;br /&gt;// substr() 返回某个子字符串&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg1111";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string str = s.substr(5,3);//从索引5开始3个字节&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;str&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;23)&lt;br /&gt;// find 查找函数&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg1111";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string pattern = "fg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string::size_type pos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos = s.find(pattern,0);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //从索引0开始,查找符合字符串"f"的头索引&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pos&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string str = s.substr(pos,pattern.size());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;str&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;24)&lt;br /&gt;// begin() end() 提供类似STL的迭代器支持&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s = "abcdefg1111";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(string::iterator iter = s.begin(); iter!=s.end(); iter++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;*iter&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cin.get();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span id="txtObj_0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 一个C++字符串存在三种大小：a)现有的字符数，函数是size()和length()，他们等效。 Empty()用来检查字符串是否为空。b)max_size() 这个大小是指当前C++字符串最多能包含的字符数，很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他，应该大小足够我们用的。但是不够用的话，会抛出length_error异常c)capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数，这个函数为string重新分配内存。重新分配的大小由其参数决定，默认参数为0，这时候会对string进行非强制性缩减&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a onclick="javascript:tagshow(event, 'string');" href="http://www.cnblogs.com/gaojun/admin/javascript:;" target="_self"&gt;&lt;u&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/a&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;类的构造&lt;/span&gt;&lt;a onclick="javascript:tagshow(event, '%BA%AF%CA%FD');" href="http://www.cnblogs.com/gaojun/admin/javascript:;" target="_self"&gt;&lt;u&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;函数&lt;/span&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/a&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string(const char *s);&amp;nbsp;&amp;nbsp;&amp;nbsp; //用c字符串s初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string(int n,char c);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //用n个字符c初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;此外，string类还支持默认构造函数和复制构造函数，如string s1；string s2="hello"；都是正确的&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;写法。当构造的string太长而无法表达时会抛出length_error异常&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的字符操作：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const char &amp;amp;operator[](int n)const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const char &amp;amp;at(int n)const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;char &amp;amp;operator[](int n);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;char &amp;amp;at(int n);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;operator[]和at()均返回当前字符串中第n个字符的位置，但at函数提供范围检查，当越界时会抛出&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;out_of_range异常，下标运算符[]不提供检查访问。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const char *data()const;//返回一个非null终止的c字符数组&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const char *c_str()const;//返回一个以null终止的c字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;置的字符数组中，返回实际拷贝的数目&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string的特性描述:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int capacity()const;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回当前容量（即string中不必增加内存即可存放的元素个数）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int max_size()const;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回string对象中可存放的最大字符串的长度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int size()const;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回当前字符串的大小&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int length()const;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回当前字符串的长度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;bool empty()const;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //当前字符串是否为空&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;void resize(int len,char c);//把字符串当前大小置为len，并用字符c填充不足的部分&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的输入输出操作:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类重载运算符operator&amp;gt;&amp;gt;&amp;nbsp; //用于输入，同样重载运算符operator&amp;lt;&amp;lt;用于输出操作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;函数getline(istream &amp;amp;in,string &amp;amp;s);//用于从输入流in中读取字符串到s中，以换行符'\n'分开。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string的赋值：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;operator=(const string &amp;amp;s);//把字符串s赋给当前字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;assign(const char *s);//用c类型字符串s赋值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;assign(const char *s,int n);//用c字符串s开始的n个字符赋值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;assign(const string &amp;amp;s);//把字符串s赋给当前字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;assign(int n,char c);//用n个字符c赋值给当前字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;assign(const string &amp;amp;s,int start,int n);//把字符串s中从start开始的n个字符赋给当前字&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;assign(const_iterator first,const_itertor last);//把first和last迭代器之间的部分赋给&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string的连接：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;operator+=(const string &amp;amp;s);//把字符串s连接到当前字符串的结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;append(const char *s);&amp;nbsp;&amp;nbsp;&amp;nbsp;//把c类型字符串s连接到当前字符串结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;append(const string &amp;amp;s);&amp;nbsp;&amp;nbsp;&amp;nbsp; //同operator+=()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;append(const string &amp;amp;s,int pos,int n); //把字符串s中从pos开始的n个字符连接到当前字符&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;串的结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;append(int n,char c);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //在当前字符串结尾添加n个字符c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;append(const_iterator first,const_iterator last);//把迭代器first和last之间的部分连&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;接到当前字符串的结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string的比较：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;bool perator==(const string &amp;amp;s1,const string &amp;amp;s2)const;//比较两个字符串是否相等&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;运算符"&amp;gt;","&amp;lt;","&amp;gt;=","&amp;lt;=","!="均被重载用于字符串的比较；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int compare(const string &amp;amp;s) const;//比较当前字符串和s的大小&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int compare(int pos, int n,const string &amp;amp;s)const;//比较当前字符串从pos开始的n个字符组成的字&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;符串与s的大小&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int compare(int pos, int n,const string &amp;amp;s,int pos2,int n2)const;//比较当前字符串从pos开始&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;的n个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int compare(const char *s) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int compare(int pos, int n,const char *s) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int compare(int pos, int n,const char *s, int pos2) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;compare函数在&amp;gt;时返回1，&amp;lt;时返回-1，==时返回0&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string的子串：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string的交换：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;void swap(string &amp;amp;s2);&amp;nbsp;&amp;nbsp;&amp;nbsp; //交换当前字符串与s2的值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的查找函数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find(const char *s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find(const char *s, int pos, int n) const;//从pos开始查找字符串s中前n个字符在当前串中的&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find(const string &amp;amp;s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;//查找成功时返回所在位置，失败返回string::npos的值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int rfind(char c, int pos = npos) const;//从pos开始从后向前查找字符c在当前串中的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int rfind(const char *s, int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int rfind(const char *s, int pos, int n = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int rfind(const string &amp;amp;s,int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;//从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置，成功返回所在位置，失&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;败时返回string::npos的值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_of(char c, int pos = 0) const;//从pos开始查找字符c第一次出现的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_of(const char *s, int pos = 0) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_of(const char *s, int pos, int n) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_of(const string &amp;amp;s,int pos = 0) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;//从pos开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string::npos&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_not_of(char c, int pos = 0) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_not_of(const char *s, int pos = 0) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_not_of(const char *s, int pos,int n) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_first_not_of(const string &amp;amp;s,int pos = 0) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;//从当前串中查找第一个不在串s中的字符出现的位置，失败返回string::npos&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_of(char c, int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_of(const char *s, int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_of(const char *s, int pos, int n = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_of(const string &amp;amp;s,int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_not_of(char c, int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_not_of(const char *s, int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_not_of(const char *s, int pos,&amp;nbsp; int n) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;int find_last_not_of(const string &amp;amp;s,int pos = npos) const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;//find_last_of和find_last_not_of与find_first_of和find_first_not_of相似，只不过是从后向前查&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;找&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的替换函数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(int p0, int n0,const char *s);//删除从p0开始的n0个字符，然后在p0处插入串s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(int p0, int n0,const char *s, int n);//删除p0开始的n0个字符，然后在p0处插入&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;字符串s的前n个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(int p0, int n0,const string &amp;amp;s);//删除从p0开始的n0个字符，然后在p0处插入串s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(int p0, int n0,const string &amp;amp;s, int pos, int n);//删除p0开始的n0个字符，然&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;后在p0处插入串s中从pos开始的n个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(int p0, int n0,int n, char c);//删除p0开始的n0个字符，然后在p0处插入n个字符&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(iterator first0, iterator last0,const char *s);//把[first0，last0）之间的部&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;分替换为字符串s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(iterator first0, iterator last0,const char *s, int n);//把[first0，last0）&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;之间的部分替换为s的前n个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(iterator first0, iterator last0,const string &amp;amp;s);//把[first0，last0）之间的&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;部分替换为串s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(iterator first0, iterator last0,int n, char c);//把[first0，last0）之间的部&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;分替换为n个字符c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;replace(iterator first0, iterator last0,const_iterator first, const_iterator&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;last);//把[first0，last0）之间的部分替换成[first，last）之间的字符串&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的插入函：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;insert(int p0, const char *s);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;insert(int p0, const char *s, int n);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;insert(int p0,const string &amp;amp;s);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;insert(int p0,const string &amp;amp;s, int pos, int n);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;//前4个函数在p0位置插入字符串s中pos开始的前n个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;insert(int p0, int n, char c);//此函数在p0处插入n个字符c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator insert(iterator it, char c);//在it处插入字符c，返回插入后迭代器的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;void insert(iterator it, const_iterator first, const_iterator last);//在it处插入[first，&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;last）之间的字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;void insert(iterator it, int n, char c);//在it处插入n个字符c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的删除函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator erase(iterator first, iterator last);//删除[first，last）之间的所有字符，返回删除&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;后迭代器的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator erase(iterator it);//删除it指向的字符，返回删除后迭代器的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string &amp;amp;erase(int pos = 0, int n = npos);//删除pos开始的n个字符，返回修改后的字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类的迭代器处理：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string类提供了向前和向后遍历的迭代器iterator，迭代器提供了访问各个字符的语法，类似于指针操&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;作，迭代器不检查范围。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;用string::iterator或string::const_iterator声明迭代器变量，const_iterator不允许改变迭代的内&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;容。常用迭代器函数有：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const_iterator begin()const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator begin();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回string的起始位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const_iterator end()const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator end();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回string的最后一个字符后面的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const_iterator rbegin()const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator rbegin();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回string的最后一个字符的位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;const_iterator rend()const;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;iterator rend();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回string第一个字符位置的前面&lt;/span&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;rbegin和rend用于从后向前的迭代访问，通过设置迭代器&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;string::reverse_iterator,string::const_reverse_iterator实现&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;字符串流处理：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;通过定义ostringstream和istringstream变量实现，&amp;lt;sstream&amp;gt;头文件中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;例如：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string input("hello,this is a test");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; istringstream is(input);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string s1,s2,s3,s4;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; is&amp;gt;&amp;gt;s1&amp;gt;&amp;gt;s2&amp;gt;&amp;gt;s3&amp;gt;&amp;gt;s4;//s1="hello,this",s2="is",s3="a",s4="test"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ostringstream os;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; os&amp;lt;&amp;lt;s1&amp;lt;&amp;lt;s2&amp;lt;&amp;lt;s3&amp;lt;&amp;lt;s4;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000080; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;os.str();&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/1824016.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2010/09/11/1824016.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html</id><title type="text">C++模板学习</title><summary type="text">模板定义：模板就是实现代码重用机制的一种工具，它可以实现类型参数化，即把类型定义为参数， 从而实现了真正的代码可重用性。模版可以分为两类，一个是函数模版，另外一个是类模版。</summary><published>2010-09-10T07:35:00Z</published><updated>2010-09-10T07:35:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt"&gt;1. &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 14pt"&gt;模板的概念。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们已经学过&lt;strong&gt;&lt;span style="color: red"&gt;重载(Overloading)&lt;/span&gt;&lt;/strong&gt;，对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如，为&lt;span style="color: red"&gt;求两个数的最大值&lt;/span&gt;，我们定义MAX()函数需要对不同的数据类型分别定义不同&lt;strong&gt;&lt;span style="color: red"&gt;重载(Overload)&lt;/span&gt;&lt;/strong&gt;版本。&lt;/p&gt;&lt;p&gt;&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;span style="color: green"&gt;函数1.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int max(&lt;span style="color: red"&gt;int x,&lt;span style="color: red"&gt;int&lt;/span&gt; y);&lt;br /&gt;{return(x&amp;gt;y)?x:y ;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;span style="color: green"&gt;函数2.&lt;/span&gt;&lt;br /&gt;float max( &lt;span style="color: red"&gt;float x,&lt;span style="color: red"&gt;float&lt;/span&gt; y){&lt;br /&gt;return (x&amp;gt;y)? x:y ;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;span style="color: green"&gt;函数3.&lt;/span&gt;&lt;br /&gt;double max(&lt;span style="color: red"&gt;double x,&lt;span style="color: red"&gt;double&lt;/span&gt; y)&lt;br /&gt;{return (c&amp;gt;y)? x:y ;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;但如果在主函数中，我们分别定义了 char a,b; 那么在执行max(a,b);时 程序就会出错，因为我们没有定义char类型的重载版本。&lt;/p&gt;&lt;p&gt;现在，我们再重新审视上述的max()函数，它们都具有同样的功能，即求两个数的最大值，能否只写一套代码解决这个问题呢？这样就会避免因重载函数定义不 全面而带来的调用错误。为解决上述问题C++引入模板机制，&lt;strong&gt;&lt;span style="color: red"&gt;模板定义：模板就是实现代码重用机制的一种工具，它可以实现类型参数化，即把类型定义为参数， 从而实现了真正的代码可重用性。模版可以分为两类，一个是函数模版，另外一个是类模版。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 14pt"&gt;函数模板的写法&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;函数模板的一般形式如下：&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: green"&gt;Template &amp;lt;&lt;strong&gt;class&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: green"&gt;或者也可以用&lt;strong&gt;typename&lt;/strong&gt; T&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: green"&gt;返回类型 函数名（形参表）&lt;br /&gt;{//函数定义体 }&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: red"&gt;说明： template是一个声明模板的关键字，表示声明一个模板关键字class不能省略，如果类型形参多余一个 ，每个形参前都要加class &amp;lt;类型 形参表&amp;gt;可以包含基本数据类型可以包含类类型.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;请看以下程序:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;//Test.cpp&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;#include&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: rgb(163,21,21)"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;using&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; std::cout;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;using&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; std::endl;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: green; font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="color: green; font-size: 9pt"&gt;声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小，class也可以被typename代替，&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: green; font-size: 9pt"&gt;//T&lt;/span&gt;&lt;span style="color: green; font-size: 9pt"&gt;可以被任何字母或者数字代替。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;template&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &amp;lt;&lt;span style="color: blue"&gt;class&lt;/span&gt; T&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;T min(T x,T y)&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;{ &lt;span style="color: blue"&gt;return&lt;/span&gt;(x&amp;lt;y)?x:y;}&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;void&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; main( )&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;int&lt;/span&gt; n1=2,n2=10;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;double&lt;/span&gt; d1=1.5,d2=5.6;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt; &lt;span style="color: rgb(163,21,21)"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21); font-size: 9pt"&gt;较小整数:"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;&amp;lt;&amp;lt;min(n1,n2)&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt; &lt;span style="color: rgb(163,21,21)"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21); font-size: 9pt"&gt;较小实数:"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;&amp;lt;&amp;lt;min(d1,d2)&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&lt;span style="color: rgb(163,21,21)"&gt;"PAUSE"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;程序运行结果：&lt;/p&gt;&lt;p align="center"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/函数模板运行结果.jpg" width="472" height="150" /&gt;　 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;程序分析：main()函数中定义了两个整型变量n1 , n2 两个双精度类型变量d1 , d2然后调用min( n1, n2); 即实例化函数模板T min(T x, T y)其中Ｔ为int型，求出n1,n2中的最小值．同理调用min(d1,d2)时，求出d1,d2中的最小值．&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt"&gt;3. &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 14pt"&gt;类模板的写法&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;定义一个类模板：&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: green"&gt;Template &amp;lt;&lt;strong&gt; class&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: green"&gt;或者也可以用&lt;strong&gt;typename&lt;/strong&gt; T &amp;gt;&lt;br /&gt;class类名｛&lt;br /&gt;／／类定义．．．．．．&lt;br /&gt;｝；&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: red"&gt;说明：其中，template是声明各模板的关键字，表示声明一个模板，模板参数可以是一个，也可以是多个。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;例如：定义一个类模板：&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 12pt"&gt;// ClassTemplate.h&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: 9pt"&gt;#ifndef&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; ClassTemplate_HH&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;#define&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; ClassTemplate_HH&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;template&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;&amp;lt;&lt;span style="color: blue"&gt;typename&lt;/span&gt; T1,&lt;span style="color: blue"&gt;typename&lt;/span&gt; T2&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;class&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; myClass{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;private&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T1 I;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T2 J;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myClass(T1 a, T2 b);&lt;span style="color: green"&gt;//Constructor&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;void&lt;/span&gt; show();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: green; font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="color: green; font-size: 9pt"&gt;这是构造函数&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: green; font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="color: green; font-size: 9pt"&gt;注意这些格式&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;template&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &amp;lt;&lt;span style="color: blue"&gt;typename&lt;/span&gt; T1,&lt;span style="color: blue"&gt;typename&lt;/span&gt; T2&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;myClass&amp;lt;T1,T2&amp;gt;::myClass(T1 a,T2 b):I(a),J(b){}&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: green; font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="color: green; font-size: 9pt"&gt;这是void show();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;template&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &amp;lt;&lt;span style="color: blue"&gt;typename&lt;/span&gt; T1,&lt;span style="color: blue"&gt;typename&lt;/span&gt; T2&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;void&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; myClass&amp;lt;T1,T2&amp;gt;::show()&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;&lt;span style="color: rgb(163,21,21)"&gt;"I="&lt;/span&gt;&amp;lt;&amp;lt;I&amp;lt;&amp;lt;&lt;span style="color: rgb(163,21,21)"&gt;", J="&lt;/span&gt;&amp;lt;&amp;lt;J&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;#endif&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 12pt"&gt;// Test.cpp&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;#include&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: rgb(163,21,21)"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;#include&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: rgb(163,21,21)"&gt;"ClassTemplate.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;using&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; std::cout;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;using&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; std::endl;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;void&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; main()&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myClass&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;,&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; class1(3,5);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class1.show();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myClass&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;,&lt;span style="color: blue"&gt;char&lt;/span&gt;&amp;gt; class2(3,&lt;span style="color: rgb(163,21,21)"&gt;'a'&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class2.show();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myClass&amp;lt;&lt;span style="color: blue"&gt;double&lt;/span&gt;,&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; class3(2.9,10);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class3.show();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&lt;span style="color: rgb(163,21,21)"&gt;"PAUSE"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 12pt"&gt;最后结果显示：&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="left"&gt;&lt;strong&gt;4.非类型模版参数&lt;/strong&gt;&lt;br /&gt;&lt;p&gt;一般来说，非类型模板参数可以是常整数（包括枚举）或者指向外部链接对象的指针。&lt;/p&gt;&lt;p&gt;那么就是说，浮点数是不行的，指向内部链接对象的指针是不行的。&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;template&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;&amp;lt;&lt;span style="color: blue"&gt;typename&lt;/span&gt; T, &lt;span style="color: blue"&gt;int&lt;/span&gt; MAXSIZE&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;class&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Stack{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;Private:&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T elems[MAXSIZE];&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;#8230;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;Int main()&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;, 20&amp;gt; int20Stack;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;, 40&amp;gt; int40Stack;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 9pt"&gt;&amp;#8230;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt"&gt;&lt;strong&gt;5.使用模板类型&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt"&gt;有时模板类型是一个容器或类，要使用该类型下的类型可以直接调用，以下是一个可打印STL中顺序和链的容器的模板函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;template &amp;lt;typename T&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;void print(T v)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;T::iterator itor;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;for (itor = v.begin(); itor != v.end(); ++itor)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; *itor &amp;lt;&amp;lt; " ";&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;cout &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;void main(int argc, char **argv){&lt;br /&gt;&amp;nbsp;list&amp;lt;int&amp;gt; l;&lt;br /&gt;&amp;nbsp;l.push_back(1);&lt;br /&gt;&amp;nbsp;l.push_front(2);&lt;br /&gt;&amp;nbsp;if(!l.empty())&lt;br /&gt;&amp;nbsp;&amp;nbsp;print(l);&lt;br /&gt;&amp;nbsp;vector&amp;lt;int&amp;gt; vec;&lt;br /&gt;&amp;nbsp;vec.push_back(1);&lt;br /&gt;&amp;nbsp;vec.push_back(6);&lt;br /&gt;&amp;nbsp;if(!vec.empty())&lt;br /&gt;&amp;nbsp;&amp;nbsp;print(vec);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;打印结果&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/gaojun/使用模板类型结果.jpg" width="360" height="129" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;类型推导的隐式类型转换&lt;br /&gt;在决定模板参数类型前，编译器执行下列隐式类型转换：&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 左值变换&lt;br /&gt;&amp;nbsp; 修饰字转换&lt;br /&gt;&amp;nbsp; 派生类到基类的转换&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 见《C++ Primer》（[注2]，P500）对此主题的完备讨论。&lt;br /&gt;&lt;br /&gt;简而言之，编译器削弱了某些类型属性，例如我们例子中的引用类型的左值属性。举例来说，编译器用值类型实例化函数模板，而不是用相应的引用类型。&lt;br /&gt;&lt;br /&gt;同样地，它用指针类型实例化函数模板，而不是相应的数组类型。&lt;br /&gt;&lt;br /&gt;它去除const修饰，绝不会用const类型实例化函数模板，总是用相应的非 const类型，不过对于指针来说，指针和 const 指针是不同的类型。&lt;br /&gt;&lt;br /&gt;底线是：自动模板参数推导包含类型转换，并且在编译器自动决定模板参数时某些类型属性将丢失。这些类型属性可以在使用显式函数模板参数申明时得以保留。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 18pt"&gt;&lt;strong&gt;6. 模板的特化&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&lt;br /&gt;如果我们打算给模板函数（类）的某个特定类型写一个函数，就需要用到模板的特化，比如我们打算用 long 类型调用 max 的时候，返回小的值（原谅我举了不恰当的例子）：&lt;br /&gt;template&amp;lt;&amp;gt; // 这代表了下面是一个模板函数&lt;br /&gt;long max&amp;lt;long&amp;gt;( long a, long b ) // 对于 vc 来说，这里的 &amp;lt;long&amp;gt; 是可以省略的&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; return a &amp;gt; b ? b : a;&lt;br /&gt;}&lt;br /&gt;实际上，所谓特化，就是代替编译器完成了对指定类型的特化工作，现代的模板库中，大量的使用了这个技巧。&lt;br /&gt;对于偏特化，则只针对模板类型中部分类型进行特化，如&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;template&amp;lt;T1, T2&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;class MyClass;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;template&amp;lt;T1, T2&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt"&gt;class MyCalss&amp;lt;int, T2&amp;gt;//偏特化&lt;br /&gt;7. 仿函数&lt;br /&gt;仿函数这个词经常会出现在模板库里（比如 STL），那么什么是仿函数呢？&lt;br /&gt;顾名思义：仿函数就是能像函数一样工作的东西，请原谅我用东西这样一个代词，下面我会慢慢解释。&lt;br /&gt;void dosome( int i )&lt;br /&gt;这个 dosome 是一个函数，我们可以这样来使用它： dosome(5);&lt;br /&gt;那么，有什么东西可以像这样工作么？&lt;br /&gt;答案1：重载了 () 操作符的对象，因此，这里需要明确两点：&lt;br /&gt;1　仿函数不是函数，它是个类；&lt;br /&gt;2　仿函数重载了()运算符，使得它的对你可以像函数那样子调用(代码的形式好像是在调用比如：&lt;br /&gt;&amp;nbsp; struct DoSome&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; void operator()( int i );&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; DoSome dosome;&lt;br /&gt;这里类(对 C++ 来说，struct 和类是相同的) 重载了 () 操作符，因此它的实例 dosome 可以这样用 dosome(5); 和上面的函数调用一模一样，不是么？所以 dosome 就是一个仿函数了。&lt;br /&gt;&lt;br /&gt;实际上还有答案2：&lt;br /&gt;&amp;nbsp; 函数指针指向的对象。&lt;br /&gt;&amp;nbsp; typedef void( *DoSomePtr )( int );&lt;br /&gt;&amp;nbsp; typedef void( DoSome )( int );&lt;br /&gt;&amp;nbsp; DoSomePtr *ptr=&amp;amp;func;&lt;br /&gt;&amp;nbsp; DoSome&amp;amp; dosome=*ptr;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; dosome(5); // 这里又和函数调用一模一样了。&lt;br /&gt;当然，答案3 成员函数指针指向的成员函数就是意料之中的答案了。&lt;br /&gt;&lt;br /&gt;8. 仿函数的用处&lt;br /&gt;不管是对象还是函数指针等等，它们都是可以被作为参数传递，或者被作为变量保存的。因此我们就可以把一个仿函数传递给一个函数，由这个函数根据需要来调用这个仿函数（有点类似回调）。&lt;br /&gt;STL 模板库中，大量使用了这种技巧，来实现库的&amp;#8220;灵活&amp;#8221;。&lt;br /&gt;比如：&lt;br /&gt;for_each, 它的源代码大致如下：&lt;br /&gt;template&amp;lt; typename Iterator, typename Functor &amp;gt;&lt;br /&gt;void for_each( Iterator begin, Iterator end, Fucntor func )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; for( ; begin!=end; begin++ )&lt;br /&gt;&amp;nbsp; func( *begin );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;这个 for 循环遍历了容器中的每一个元素，对每个元素调用了仿函数 func，这样就实现了 对&amp;#8220;每个元素做同样的事&amp;#8221;这样一种编程的思想。&lt;br /&gt;&lt;br /&gt;特别的，如果仿函数是一个对象，这个对象是可以有成员变量的，这就让 仿函数有了&amp;#8220;状态&amp;#8221;，从而实现了更高的灵活性。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/1823354.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2010/08/15/1800099.html</id><title type="text">孙鑫视频VC++深入详解学习笔记</title><summary type="text">对孙鑫老师的VC视频进行学习和总结,并参考相关的书籍和资源写出下面的学习笔记,对于学习VC++提供很大的帮助,虽然视频是老视频,开发工具比较旧,但对于学习MFC来说,确实是不错的一个选择,下面将自己的总结帖出,供大家参考,也对自己平时需要提供帮助...</summary><published>2010-08-15T08:43:00Z</published><updated>2010-08-15T08:43:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2010/08/15/1800099.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2010/08/15/1800099.html"/><content type="html">&amp;nbsp; &lt;p&gt;&lt;span&gt;&lt;a style="color: #000080" href="http://files.cnblogs.com/gaojun/VC深入详解自学笔记.doc"&gt;VC++&lt;span style="font-family: 宋体"&gt;&lt;span&gt;深入详解学习笔记&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="#_Toc269652882"&gt;Lesson1: Windows&lt;span style="font-family: 宋体"&gt;&lt;span&gt;程序运行原理及程序编写流程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652883"&gt;Lesson2: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;掌握&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;基本语法&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652884"&gt;Lesson3: MFC&lt;span style="font-family: 宋体"&gt;&lt;span&gt;框架程序剖析&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652885"&gt;Lesson4: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;简单绘图&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652886"&gt;Lesson5: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;文本编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652887"&gt;Lesson6: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;菜单编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652888"&gt;Lesson7: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;对话框编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652889"&gt;Lesson9: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;定制应用程序的外观&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652890"&gt;Lesson10: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;绘图控制&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652891"&gt;Lesson11 &lt;span style="font-family: 宋体"&gt;&lt;span&gt;图形的保存和重绘&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652892"&gt;Lesson12 &lt;span style="font-family: 宋体"&gt;&lt;span&gt;文件操作&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652893"&gt;Lesson 13: &lt;span style="font-family: 宋体"&gt;&lt;span&gt;文档串行化&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652894"&gt;Lesson14 &lt;span style="font-family: 宋体"&gt;&lt;span&gt;网络编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652895"&gt;Lesson 15 &lt;span style="font-family: 宋体"&gt;&lt;span&gt;多线程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652896"&gt;Lesson 16 &lt;span style="font-family: 宋体"&gt;&lt;span&gt;线程同步与异步套接字&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652897"&gt;Lesson17&lt;span style="font-family: 宋体"&gt;&lt;span&gt;进程间通信&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652898"&gt;Lesson18 Active&lt;span style="font-family: 宋体"&gt;&lt;span&gt;控件&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652899"&gt;Lesson19 &lt;span style="font-family: 宋体"&gt;&lt;span&gt;动态链接库&lt;/span&gt;DLL&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="#_Toc269652900"&gt;Lesson20 Hook&lt;span style="font-family: 宋体"&gt;&lt;span&gt;与数据编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;VC++&lt;span style="font-family: 宋体"&gt;深入详解学习笔记&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson1: Windows&lt;span style="font-family: 黑体"&gt;程序运行原理及程序编写流程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;窗口产生过程，句柄原理，消息队列，回调函数，窗口关闭与应用程序退出的工作关系，使用&lt;/span&gt;VC++&lt;span style="font-family: 宋体"&gt;的若干小技巧，&lt;/span&gt;stdcall&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;Lessonecl&lt;span style="font-family: 宋体"&gt;调用规范的比较，初学者常犯错误及注意事项。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Windows API&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;Win32 SDK&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;操作系统提供了各种方便开发&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序的编程接口，所的函数都在&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;h&lt;span style="font-family: 宋体"&gt;头文件中声明。&lt;/span&gt;Win32 SDK(Software Development Kit): &lt;span style="font-family: 宋体"&gt;即&lt;/span&gt;Windows 32&lt;span style="font-family: 宋体"&gt;位平台下的软件开发包，包括&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;函数，帮助文档，微软提供的一些辅助开发工具。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;窗口与句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;窗口是是屏幕上一块矩形区域，是&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序与用户进行交互的接口。窗口分为客户区和非客户区。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序中，窗口是通过窗口句柄&lt;/span&gt;(HWND)&lt;span style="font-family: 宋体"&gt;来标识的，要对某个窗口进行操作，首先就要得到这个窗口的句柄。其它各种资源&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;窗口，图标，光标等&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;，系统在创建这些资源时会为它们分配内在，并返回标识这些资源的标识号，即句柄。&lt;/span&gt;--&amp;gt;&lt;span style="font-family: 宋体"&gt;光标句柄&lt;/span&gt;(HCURSOR)&lt;span style="font-family: 宋体"&gt;，图标句柄&lt;/span&gt;(HICON)&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息与消息队列&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Windows&lt;span style="font-family: 宋体"&gt;程序设计是一种基于消息的事件驱动方式的程序设计模式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;中由结构体&lt;/span&gt;MSG&lt;span style="font-family: 宋体"&gt;来表示，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;typedef struct tagMSG{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWND hwnd;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息所属的窗口句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;UINT&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; message;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息本身标识符，由一数值表示，系统对消息定&lt;/span&gt;//&lt;span style="font-family: 宋体"&gt;义为&lt;/span&gt;WM_XXX&lt;span style="font-family: 宋体"&gt;宏&lt;/span&gt;(WM&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;Windows Message&lt;span style="font-family: 宋体"&gt;缩写&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WPARAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wParam;&amp;nbsp;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;随消息的不同附加信息也不同&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPARAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lParam;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息的附加参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD time;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息投递的时间&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POINT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;鼠标当前位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;消息队列&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;每当一个&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序创建后，系统都会为该程序创建一个消息队列，这个消息队列用来存放该程序一的窗口的消息，消息产生后被投递到消息队列中，应用程序通过一个消息循环不断的消息队列中取出消息进行响应。响应过程由系统向应用程序发送消息，实际就是调用应用程序的消息处理函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建一个完整的&lt;/span&gt;Win32&lt;span style="font-family: 宋体"&gt;程序，该程序实现创建一个窗口，其中主要步骤为&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;A.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;WinMain&lt;span style="font-family: 宋体"&gt;函数的定义&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;B.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建一个窗口&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建一个完整的窗口的四个步骤&lt;/span&gt;SDK&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;设计窗口类，&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;注册窗口类，&lt;/span&gt;3&lt;span style="font-family: 宋体"&gt;创建窗口，&lt;/span&gt;4&lt;span style="font-family: 宋体"&gt;显示窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;C.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;进行消息循环&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;D.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;编写窗口过程函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;回调函数的实现机制&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span&gt;(1)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;定义一个回调函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;(2)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;提供函数实现的一方在初始化的时候，将回调函数的函数指针注册给调用者&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;(3)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;当特定的事件或条件发和的时候，调用使用函数指针调用回调函数对事件进行处理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;针对&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;的消息处理机制，窗口过程函数被调用的过程如下&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span&gt;A.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在设计窗口类的时候，将窗口赛程函数的地址赋值给&lt;/span&gt;lpfnWndProc&lt;span style="font-family: 宋体"&gt;成员变量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;B.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;调用&lt;/span&gt;RegisterClass(&amp;amp;wndclass)&lt;span style="font-family: 宋体"&gt;注册窗口类，那么系统就有了我们所编写的窗口过程函数的地址&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;C.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;当应用程序接收到某一窗口的消息，调用&lt;/span&gt;DispatchMessage(&amp;amp;msg)&lt;span style="font-family: 宋体"&gt;将消息加值给系统。系统则利用先前注册窗口类时得到函数指针，调用窗口过程函数对消息进行处理。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;HICON LoadIcon(HINSTANCE hInstance&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt; LPCTSTR lpIconName);&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;加载窗图标，返回系统分配给该图标的句柄，&lt;/span&gt; LPCTSTR&lt;span style="font-family: 宋体"&gt;被定义为&lt;/span&gt;CONST CHAR *(&lt;span style="font-family: 宋体"&gt;指向常量的字符指针&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;，图标的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;是一个常数，要使用&lt;/span&gt;MAKEINTRESOUCE&lt;span style="font-family: 宋体"&gt;宏把资源&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;标识转换为需要的&lt;/span&gt;LPCTSTR&lt;span style="font-family: 宋体"&gt;类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;sprintf&lt;span style="font-family: 宋体"&gt;格式化字符，其头文件为&lt;/span&gt;stdio&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;h&lt;span style="font-family: 宋体"&gt;，在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中格式化字符用&lt;/span&gt;CString&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;Format&lt;/p&gt;&lt;p&gt;&lt;span&gt;6.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;GetDC()&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;ReleaseDC()&lt;span style="font-family: 宋体"&gt;要成对使用，否则会内存泄漏。同样，&lt;/span&gt;BeginPaint()&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;&lt;/p&gt;&lt;p&gt;EndPaint()&lt;span style="font-family: 宋体"&gt;，这两个&lt;/span&gt;Parint&lt;span style="font-family: 宋体"&gt;只能在影响&lt;/span&gt;WM_PAINT&lt;span style="font-family: 宋体"&gt;消息中调用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;7.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;GetStockObject()&lt;span style="font-family: 宋体"&gt;得到画笔、画刷、字体、调色板的句柄，使用时必须用类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;转换。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如&lt;/span&gt;:hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH )//&lt;span style="font-family: 宋体"&gt;创建空画刷&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;8.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;什么时候用&lt;/span&gt;NULL&lt;span style="font-family: 宋体"&gt;，什么时候用&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;。答，对指针赋值时用&lt;/span&gt;NULL&lt;span style="font-family: 宋体"&gt;，对变量赋值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;时用&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;9.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;什么是野指针？答：将指针指向的变量的内存释放后，此指针即变成野指针！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如何避免野指针？答：将此指针指向&lt;/span&gt;NULL&lt;span style="font-family: 宋体"&gt;即可。&lt;/span&gt;p=NULL;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; width: 396pt; border-collapse: collapse;background: #d1dd61; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0" width="528"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 396pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="528"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;windows.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdexcept&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;using namespace std;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;回调函数原型声明&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;返回长整形的结果码&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,CALLBACK&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;是表示&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;stdcall&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;调用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;LRESULT CALLBACK WinProc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWND hwnd,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle to window&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UINT uMsg,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // message identifier&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WPARAM wParam,&amp;nbsp;// first message parameter&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPARAM lParam&amp;nbsp;&amp;nbsp; // second message parameter&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//(1) WinMain&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;程序入口点函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;int WINAPI WinMain(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; HINSTANCE hInstance,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle to current instance&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; HINSTANCE hPrevInstance,&amp;nbsp;// handle to previous instance&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; LPSTR lpCmdLine,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // command line&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; int nCmdShow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // show state&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; ){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //(2)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;一&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;设计一个窗口类&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;类似填空题&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用窗口结构体&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WNDCLASS wnd;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.cbClsExtra = 0; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;类的额外内存&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.cbWndExtra = 0;&amp;nbsp;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;窗口的额外内存&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建一个空画刷填充背景&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;加载游标&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果是加载标准游标&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;则第一个实例标识设置为空&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.hCursor = LoadCursor(NULL, IDC_CROSS);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.hIcon = LoadIcon(NULL, IDI_ERROR);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.hInstance = hInstance;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;实例句柄赋值为程序启动系统分配的句柄值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.lpfnWndProc = WinProc;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息响应函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.lpszClassName = "gaojun";//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;窗口类的名子&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在注册时会使用到&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.lpszMenuName = NULL;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;默认为&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;NULL&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;没有标题栏&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.style = CS_HREDRAW | CS_VREDRAW;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;定义为水平和垂直重画&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;二&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;注册窗口类&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterClass(&amp;amp;wnd);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;三&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;根据定制的窗口类创建窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWND hwnd;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;保存创建窗口后的生成窗口句柄用于显示&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果是多文档程序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;则最后一个参数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;lParam&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;必须指向一个&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;CLIENTCREATESTRUCT&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;结构体&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hwnd = CreateWindow("gaojun", "WIN32&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;应用程序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", WS_OVERLAPPEDWINDOW,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;四&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;显示窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowWindow(hwnd, SW_SHOWDEFAULT);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;五&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;更新窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateWindow(hwnd);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //(3).&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息循环&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSG msg;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息结构体&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果消息出错&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;返回值是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;-1,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;当&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;GetMessage&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;从消息队列中取到是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;WM_QUIT&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息时&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;返回值是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;也可以使用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;PeekMessage&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数从消息队列中取出消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOL bSet;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((bSet = GetMessage(&amp;amp;msg, NULL, 0, 0)) != 0){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (-1 ==&amp;nbsp;bSet)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TranslateMessage(&amp;amp;msg);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DispatchMessage(&amp;amp;msg);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;程序结束&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;返回&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息循环中对不同的消息各类进行不同的响应&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;LRESULT CALLBACK WinProc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;HWND hwnd,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle to window&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;UINT uMsg,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // message identifier&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;WPARAM wParam,&amp;nbsp;// first message parameter&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;LPARAM lParam&amp;nbsp;&amp;nbsp; // second message parameter&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (uMsg)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case WM_CHAR://&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;字符按键消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char szChar[20];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(szChar, "char is %d;", wParam);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;格式化操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,stdio.h&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(hwnd, szChar, "gaojun", 0);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;输出操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;windows.h&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case WM_LBUTTONDOWN://&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;鼠标左键按下消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(hwnd, "this is click event!", "&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;点击&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HDC hdc;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hdc = GetDC(hwnd);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;获取设备上下文句柄&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;用来输出文字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;x=0,y=50(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;像素&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的地方输出文字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextOut(hdc, 0, 50, "&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;响应&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;WM_LBUTTONDONW&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!", &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;strlen("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;响应&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;WM_LBUTTONDONW&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!"));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReleaseDC(hwnd, hdc);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在使用完&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;DC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;后一定要注意释放&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case WM_PAINT://&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;窗口重给时报消息响应&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HDC hDc;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAINTSTRUCT ps;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hDc = BeginPaint(hwnd, &amp;amp;ps);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextOut(hDc, 0, 0, "&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这是一个&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;Paint&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;事件&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!", strlen("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这是一个&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;Paint&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;事件&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!"));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndPaint(hwnd, &amp;amp;ps);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case WM_CLOSE://&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;关闭消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (IDYES == MessageBox(hwnd, "&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;确定要关闭当前窗口&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;?", "&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;提示&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", MB_YESNO))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DestroyWindow(hwnd);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;销毁窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case WM_DESTROY:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PostQuitMessage(0);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在响应消息后&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;投递一个退出的消息使用程序安全退出&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return DefWindowProc(hwnd, uMsg, wParam, lParam);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;调用缺省的消息处理过程函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson2: &lt;span style="font-family: 黑体"&gt;掌握C++&lt;/span&gt;&lt;span style="font-family: 黑体"&gt;基本语法&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;主要特点&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;封装性&lt;/span&gt;&lt;/strong&gt;(Encapsulation):&lt;span style="font-family: 宋体"&gt;把数据与操作数据的函数组织在一起，使程序结构更加紧凑，提高类内部数据的安全性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;继承性&lt;/span&gt;&lt;/strong&gt;(Inheritance):&lt;span style="font-family: 宋体"&gt;增加了软件的可扩充性及代码重用性&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;多态性&lt;/span&gt;&lt;/strong&gt;(Polymorphism):&lt;span style="font-family: 宋体"&gt;使设计人员在设计程序时可以对问题进行更好的抽象，有利于代码的维护和可重用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;中几个特性的实现技术和其它要注意的地方&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;构造函数，析构函数，覆盖，隐藏，重载，继承，多态&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;迟绑定&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;等技术，算法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;类的编写与应用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;以下是部分资料&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;。定义结构体和类时。例如&lt;/span&gt;Class Point{int x;int y;};&lt;span style="font-family: 宋体"&gt;要注意一定加上分号，结构体定义默认成员是&lt;/span&gt;public&lt;span style="font-family: 宋体"&gt;，而&lt;/span&gt;Class&lt;span style="font-family: 宋体"&gt;定义默认为&lt;/span&gt;private&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;#include &amp;lt;xxx&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;h&amp;gt;&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;#include "xxx&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;h"&lt;span style="font-family: 宋体"&gt;的区别：&lt;/span&gt;&amp;lt;&amp;gt;&lt;span style="font-family: 宋体"&gt;不查找运行时目录，&lt;/span&gt;""&lt;span style="font-family: 宋体"&gt;查找运行时目录！&lt;/span&gt;(#include&amp;lt;xxx&amp;gt;&lt;span style="font-family: 宋体"&gt;引入是源文件，要用上&lt;/span&gt;using namespace xxx;)&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;。类的定义中，如果未指明成员类型，则缺省为&lt;/span&gt;private&lt;span style="font-family: 宋体"&gt;。而结构体中则缺省为&lt;/span&gt;public&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;。引用：引用经常用在函数的传参上。另外数值交换函数也经常用引用。例&lt;/span&gt;&lt;/p&gt;&lt;p&gt;change(int &amp;amp;x&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;int &amp;amp;y){int temp;temp=x;x=y;y=x}&lt;span style="font-family: 宋体"&gt;调用时即可以用&lt;/span&gt; int a=3;int b=4;change(a&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;b);&lt;span style="font-family: 宋体"&gt;一般不用指针来作为参数进行数值交换。因为会引起歧义。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5&lt;span style="font-family: 宋体"&gt;。通常将类的定义放。&lt;/span&gt;h&lt;span style="font-family: 宋体"&gt;文件，而将其实现放在&lt;/span&gt;cpp&lt;span style="font-family: 宋体"&gt;文件中，别忘记了在&lt;/span&gt;cpp&lt;span style="font-family: 宋体"&gt;文件中&lt;/span&gt;#include "xxx&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;h"&lt;/p&gt;&lt;p&gt;6&lt;span style="font-family: 宋体"&gt;。如何防止类的重复定义？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;用&lt;/span&gt;#inndef Point_H_H&lt;/p&gt;&lt;p&gt;#define Point_H_H&lt;/p&gt;&lt;p&gt;class Point{};&lt;/p&gt;&lt;p&gt;#endif&lt;span style="font-family: 宋体"&gt;来防止&lt;/span&gt;&lt;/p&gt;&lt;p&gt;7&lt;span style="font-family: 宋体"&gt;。源文件&lt;/span&gt;cpp&lt;span style="font-family: 宋体"&gt;文件单独编译成&lt;/span&gt;obj&lt;span style="font-family: 宋体"&gt;文件。最后由链接器将与将要使用到的&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;标准库类链接成&lt;/span&gt;exe&lt;span style="font-family: 宋体"&gt;文件，头文件不参加编译。所以在&lt;/span&gt;cpp&lt;span style="font-family: 宋体"&gt;文件中别忘记了加入&lt;/span&gt;#include "xxx&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;h"&lt;/p&gt;&lt;p&gt;8&lt;span style="font-family: 宋体"&gt;。函数的覆盖，在子类中重写父类的函数，此时采用早期绑定的方法。如果加入了&lt;/span&gt;virtual&lt;span style="font-family: 宋体"&gt;，则将采用迟绑定的技术，在运行时根据对象的类型确定调用哪一个函数。此迟绑定技术是&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;的类的继承的精髓。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;9&lt;span style="font-family: 宋体"&gt;。强制类型转换。如果&lt;/span&gt;CFish&lt;span style="font-family: 宋体"&gt;从&lt;/span&gt;CAnimal&lt;span style="font-family: 宋体"&gt;派生而来。则可以将鱼的对象转换为&lt;/span&gt;CAnimal&lt;span style="font-family: 宋体"&gt;的对象，而反之则不行。从现实中理解也是正常的，鱼可以是动物，而动物却不是鱼。再如&lt;/span&gt;int&lt;span style="font-family: 宋体"&gt;可以强制转换成&lt;/span&gt;char&lt;span style="font-family: 宋体"&gt;型。而反之则出错。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson3: MFC&lt;span style="font-family: 黑体"&gt;框架程序剖析&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;简介&lt;/span&gt;:MFC(Microsoft Foundation Class,&lt;span style="font-family: 宋体"&gt;微软基础类库&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;是微软为了简化程序员的开发工作所开发的一套&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;类的集合&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;是一套面向对象的函数库&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;以为的方式提供给用户使用&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;利用这些类&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;可以有效发帮助程序员完成&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序的开发&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt"&gt;MFC AppWizard&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;是一个辅助生成源代码的向导工具&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;它可以帮助我们自动生成基于&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;MFC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;框架的源代码&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;在向导的每一个步骤中&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;我们可以根据需要来选择各种特性&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;从而实现定制应用程序&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt"&gt;2.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口对象与窗口关系&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类中定义一个类型为&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;HWND&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;成员变量&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;用来保存与之相关的窗口句柄值&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;可以用一个窗口类的实例即窗口对象来对应一个创建的窗口&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;是一种资源&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;),&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口对象与窗口之间的关系是&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类对象与窗口并不是一回事&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;它们之间唯一的关系是&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类对象内部定义了一个窗口句柄变量&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;保存了与这个&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类对象相关的那个窗口的句柄&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口销毁时&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;与之对应的&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类对象销毁与否&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;要看其生命周期是否结束&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;但&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类对象销毁时&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;与之相关的窗口将销毁&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;因为它们之间的纽带&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;(m_hWnd)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;已经断了&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;因此这时要回收窗口资源&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口销毁时调用&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;DestroyWindow&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;函数&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;窗口类对象销毁即将&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;m_hWnd&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;变量设置为&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;NULL.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt"&gt;VC 6.0&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;一些常用操作快捷方式&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;div align="center"&gt;&lt;table style="width: 402.05pt;background: silver; margin-left: 12.1pt" border="1" cellspacing="0" cellpadding="0" width="536"&gt;&lt;tbody&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 41.8pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="56"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;功能分类&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;快捷键&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;说明&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 41.8pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" rowspan="2" width="56"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;File&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（文件）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+N&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;New&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;新建工程&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+O&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Open &lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;打开文件&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 41.8pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" rowspan="7" width="56"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Find&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（查找）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Alt+F3/Ctrl+F&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;弹出查找对话框&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;查找下一个&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Shift+F3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;查找上一个&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+H&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;替换&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+]/Ctrl+E&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;寻找下一半括弧&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;寻找下一个错误/警告位置&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Shift+F4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;寻找上一个错误/警告位置&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 41.8pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" rowspan="3" width="56"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;格式&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+U&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;将选定区域转换成小写&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+Shift+U&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;将选定区域转换成大写&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Alt+F8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;自动格式重排&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 41.8pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" rowspan="4" width="56"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Build&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（建立）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Build&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（编绎并链接成exe文件）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+F7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Compile&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（编译）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+F5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Execute&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（编译+链接+运行）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+Shift+F5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Restarts the program&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（重新运行程序）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 41.8pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" rowspan="7" width="56"&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Debug&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（调试）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Go&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（顺序执行）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F11&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;step into &lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（顺序执行，进入循环或函数）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F10&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;step over&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（顺序执行，不进入循环或函数）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+F10&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Run to cursor&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（自动执行到用户光标所指的语句前）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Shift+F5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Stop Debugging&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（停止调试）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;F9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Insert/Remove breakpoint&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;（在当前行插入/去掉断点）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 21.25pt"&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 108.25pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="144"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;Ctrl+Shift+F9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-bottom: 0cm; padding-left: 0cm; width: 252pt; padding-right: 0cm; height: 21.25pt; padding-top: 0cm" valign="top" width="336"&gt;&lt;p align="left"&gt;&lt;span style="line-height: 150%; font-family: 宋体; color: #993366; font-size: 9pt"&gt;去掉所有断点&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;main&lt;span style="font-family: 宋体"&gt;或&lt;/span&gt;WinMain&lt;span style="font-family: 宋体"&gt;之前，全局变量已经被分配内存并初始化了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中在&lt;/span&gt;WinMain&lt;span style="font-family: 宋体"&gt;之前有个&lt;/span&gt;theApp&lt;span style="font-family: 宋体"&gt;全局变量先被构造并被初始化，而由于子类构造函数执行前，其父类的构造函数先被执行，所以&lt;/span&gt;CTestApp&lt;span style="font-family: 宋体"&gt;的父类&lt;/span&gt;CWinAPP&lt;span style="font-family: 宋体"&gt;的构造函数先执行。产生了&lt;/span&gt;theApp&lt;span style="font-family: 宋体"&gt;对象后，在&lt;/span&gt;WinMain()&lt;span style="font-family: 宋体"&gt;中的指针&lt;/span&gt;*pThread&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;*pApp&lt;span style="font-family: 宋体"&gt;就有了内容。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3.MFC&lt;span style="font-family: 宋体"&gt;大致流程：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CTestApp theApp;//&lt;span style="font-family: 宋体"&gt;构造全局对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;WinMain()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;AfxWinMain();//&lt;span style="font-family: 宋体"&gt;调用下面的函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;AfxWinMain()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;pThread-&amp;gt;Initinstance();//&lt;span style="font-family: 宋体"&gt;初始化工作和注册窗口类，窗口显示和更新&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pThread-&amp;gt;Run();//&lt;span style="font-family: 宋体"&gt;消息循环&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;而在&lt;/span&gt;BOOL CTestApp::InitInstance()&lt;span style="font-family: 宋体"&gt;中的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CSingleDocTemplate* pDocTemplate;&lt;/p&gt;&lt;p&gt;pDocTemplate = new CSingleDocTemplate(&lt;/p&gt;&lt;p&gt;&amp;nbsp;IDR_MAINFRAME,&lt;/p&gt;&lt;p&gt;&amp;nbsp;RUNTIME_CLASS(CTestDoc),&lt;/p&gt;&lt;p&gt;&amp;nbsp;RUNTIME_CLASS(CMainFrame),&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // main SDI frame window&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;RUNTIME_CLASS(CTestView));&lt;/p&gt;&lt;p&gt;AddDocTemplate(pDocTemplate);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;完成了将这三个类关联起来的工作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;如何在单文档文件中显示一个&lt;/span&gt;CButton&lt;span style="font-family: 宋体"&gt;的对象？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CMainFrame::OnCreate()&lt;span style="font-family: 宋体"&gt;中定义一个&lt;/span&gt;CButton&lt;span style="font-family: 宋体"&gt;的对象&lt;/span&gt;btn;&lt;span style="font-family: 宋体"&gt;然后调用&lt;/span&gt;btn.Create("&lt;span style="font-family: 宋体"&gt;维新&lt;/span&gt;",WS_DISABLED&lt;span&gt;&amp;nbsp;&amp;nbsp; |WS_CHILD | WS_VISIBLE | BS_AUTO3STATE,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;CRect(0,0,300,100),/*GetParent(),*/this,123);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;注意点：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(1).&lt;span style="font-family: 宋体"&gt;此处&lt;/span&gt;btn&lt;span style="font-family: 宋体"&gt;不能是局部变量，否则它的生命周期太短，将不能显示。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(2).&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CBUTTON&lt;span style="font-family: 宋体"&gt;类的&lt;/span&gt;Create&lt;span style="font-family: 宋体"&gt;函数的第二个参数中加入&lt;/span&gt;WS_VISIBLE &lt;span style="font-family: 宋体"&gt;参数才行。否则必须调用&lt;/span&gt;ShowWindow&lt;span style="font-family: 宋体"&gt;也可以在&lt;/span&gt;view&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;OnCreate&lt;span style="font-family: 宋体"&gt;消息响应函数中加入&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(3).CButton&lt;span style="font-family: 宋体"&gt;类的定义头文件在&lt;/span&gt;afxwin.h&lt;span style="font-family: 宋体"&gt;中，而&lt;/span&gt;stdafx.h&lt;span style="font-family: 宋体"&gt;包含了&lt;/span&gt;afxwin.h,&lt;span style="font-family: 宋体"&gt;所以可以直接使用。因为&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中的每一个类中都有&lt;/span&gt;#include "stdafx.h"&lt;span style="font-family: 宋体"&gt;的声明。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson4: &lt;span style="font-family: 黑体"&gt;简单绘图&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在单文档中&lt;/span&gt;view&lt;span style="font-family: 宋体"&gt;挡在&lt;/span&gt;MainFrame&lt;span style="font-family: 宋体"&gt;的前面。此时如果编写针对&lt;/span&gt;MainFrame&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;mouseClick&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;事件，将不会有反应。因为&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;视类窗口是覆盖在框架窗口上的&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因此框架窗口不能感&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;到鼠标消息&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;的消息映射机制&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在每个能接收和处理消息的类中&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;定义一个消息和消息函数对照表&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;即消息映射表&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;在消息映射表中&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;消息与对应的消息处理函数指针成对出现&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;当有消息需要处理时&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;程序只要搜索该消息静态表&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;查看表中是否含有该消息&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;就可知道该类能否处理此消息&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;如果能处理该消息&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;则同样依照静态表很容易找到并调用对应的消息处理函数&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;MFC&lt;span style="font-family: 宋体"&gt;消息映射机制是针对能接受消息和处理消息的类来定义对应的消息映射表&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而不是由父类来定义所有消息对应的虚函数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;由子类来覆盖其函数实现&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因为这样做会使程序背着一个很大的虚拟函数表的包袱运行&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;对内存是一种浪费&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;MFC&lt;span style="font-family: 宋体"&gt;工程中一个消息映射在三处添加代码&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;(1): CDrawView&lt;span style="font-family: 宋体"&gt;视类的头文件&lt;/span&gt;.h&lt;/p&gt;&lt;p&gt;//{{AFX_MSG(CDrawView)&lt;/p&gt;&lt;p&gt;afx_msg void OnLButtonDown(UINT nFlags, CPoint point);&lt;/p&gt;&lt;p&gt;//}}AFX_MSG&lt;/p&gt;&lt;p&gt;DECLARE_MESSAGE_MAP()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;两个&lt;/span&gt;AFX_MSG&lt;span style="font-family: 宋体"&gt;注释宏&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;因为加了注释符&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;之间&lt;/span&gt;,afx_msg&lt;span style="font-family: 宋体"&gt;是限定符&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;也是宏&lt;/span&gt;),&lt;span style="font-family: 宋体"&gt;表明函数是一个消息响应函数的声明&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果是用户自定义的消息函数响应声明则在注释宏下&lt;/span&gt;, DECLARE_MESSAGE_MAP&lt;span style="font-family: 宋体"&gt;之上加写代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(2): CDrawView&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;cpp(&lt;span style="font-family: 宋体"&gt;源文件&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;BEGIN_MESSAGE_MAP&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;END_MESSAGE_MAP&lt;span style="font-family: 宋体"&gt;之间，定义了&lt;/span&gt;CDrawView&lt;span style="font-family: 宋体"&gt;类的消息映射表&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;其中&lt;/span&gt;ON_WM_LBUTTONDOWN&lt;span style="font-family: 宋体"&gt;映射宏就是将鼠标左键按下消息&lt;/span&gt;(WM_LBUTTONDOWN)&lt;span style="font-family: 宋体"&gt;与一个消息响应函数&lt;/span&gt;(OnLButtonDown)&lt;span style="font-family: 宋体"&gt;关联&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;BEGIN_MESSAGE_MAP(CDrawView, CView)&lt;/p&gt;&lt;p&gt;//{{AFX_MSG_MAP(CDrawView)&lt;/p&gt;&lt;p&gt;ON_WM_LBUTTONDOWN()&lt;/p&gt;&lt;p&gt;//}}AFX_MSG_MAP&lt;/p&gt;&lt;p&gt;// Standard printing commands&lt;/p&gt;&lt;p&gt;ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)&lt;/p&gt;&lt;p&gt;ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)&lt;/p&gt;&lt;p&gt;ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)&lt;/p&gt;&lt;p&gt;END_MESSAGE_MAP()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果添加自定义的消息映射&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;使用&lt;/span&gt;ON_MESSAGE(&lt;span style="font-family: 宋体"&gt;用户定义消息&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;消息响应函数名&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;无&lt;/span&gt;&amp;#8221;;&amp;#8221;&lt;span style="font-family: 宋体"&gt;结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(3): &lt;span style="font-family: 宋体"&gt;是&lt;/span&gt;CDrawView&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;cpp(&lt;span style="font-family: 宋体"&gt;源文件&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;中有函数实现。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;// TOD Add your message handler code here and/or call default&lt;/p&gt;&lt;p&gt;m_ptOrigin=m_ptOld=point;&lt;/p&gt;&lt;p&gt;m_bDraw=TRUE;&lt;/p&gt;&lt;p&gt;CView::OnLButtonDown(nFlags, point);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;通过分析&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;消息响应函数在程序中有三处属地省&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;函数原型&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;用来关联消息和消息响应函数的宏和函数实现&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;以下绘图程序&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;参考代码的注释可解决部分绘图问题&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CLesson3View::OnLButtonUp(UINT nFlags, CPoint point) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your message handler code here and/or call default&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;作图&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SDK&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数获取设备上下文句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HDC hdc;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hdc = ::GetDC(m_hWnd);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这个&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;m_hWnd&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;CWnd&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;类中的保护成员&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;, &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;保存窗口句柄&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;而&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;CLesson3View&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;类是从&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;CWnd&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;类继承来的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;所以也有这个成员&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveToEx(hdc, m_ptnOrigin.x, m_ptnOrigin.y, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LineTo(hdc, point.x, point.y);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::ReleaseDC(m_hWnd, hdc); // &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在使用完设备上下文句柄后一定注意释放&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;CDC(MFC)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;关于作图对&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;HDC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;一个封装&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDC *pDc;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDc = GetDC();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDc-&amp;gt;MoveTo(m_ptnOrigin);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDc-&amp;gt;LineTo(point);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReleaseDC(pDc);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用客户区绘图类&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这个是比较常用的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //CClientDC dc(this);//CClientDC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的构造函数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用当前窗口句柄值做为参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //CClientDC dc(GetParent());//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;得到关于父类窗口一个设备上下文&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.MoveTo(m_ptnOrigin);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.LineTo(point);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // CClientDC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;类在构造时调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;GetDC,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;然后在释放时又调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;ReleaseDC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;所以不用手动释放&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;利用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;MFC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;CWindowDC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;绘图&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;/&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;好处是可以访问整个窗口区域&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;包括框架窗口客户区和非客户区&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;桌面等&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWindowDC dc(this);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWindowDC dc(GetParent());&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.MoveTo(m_ptnOrigin);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.LineTo(point);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWindowDC dc(GetDesktopWindow());//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这个可以画到桌面上其它地方&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.MoveTo(m_ptnOrigin);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.LineTo(point);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;以上所画的线条颜色都是黑色的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;因为在设备描述表中使用默认的画笔&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;黑色&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;),&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;要改变线条颜色则需要自己生成一个新的画笔对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将它选到设备描述表中&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;再画就使用新画笔来绘图&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPen m_pen(PS_DASH, 2, RGB(255, 0, 0));//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;生成新的画笔&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CClientDC dc(this);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPen *pOldPen = dc.SelectObject(&amp;amp;m_pen);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;选择进设备描述表中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.MoveTo(m_ptnOrigin);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.LineTo(point);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.SelectObject(pOldPen);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在使用完新的画笔后&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;要将原来的画笔重新选择时设备描述表&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用画刷来填充矩形&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBrush m_brush(RGB(120, 0, 23));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CClientDC dc(this);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.FillRect(CRect(m_ptnOrigin, point), &amp;amp;m_brush);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用位图画刷来填充矩形&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建一个位图对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBitmap m_bitmap;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_bitmap.LoadBitmap(IDB_MyBitmap);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBrush m_Brush(&amp;amp;m_bitmap);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CClientDC dc(this);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.FillRect(CRect(m_ptnOrigin, point), &amp;amp;m_Brush);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;透明画刷&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;首先使用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;Win32&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;API&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;GetStockObject&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;来获取一个&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;NULL_BRUSH&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;画刷&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CClientDC dc(this);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;是静态成员函数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;从句柄获取对象的指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBrush *pOldBrush = dc.SelectObject(pBrush);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.Rectangle(CRect(m_ptnOrigin, point));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.SelectObject(pOldBrush);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bIsMouseDown = FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CView::OnLButtonUp(nFlags, point);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;类的静态成员函数可以由类名直接调用，也可以由对象调用。可以认为静态成员函数并不属于某个对象，它属于类本身。程序运行伊始，即使没有实例化类的对象，静态成员函数和静态成员变量已然有其内存空间。静态成员函数不能访问非静态成员变量！静态成员变量必须在类的外部初始化。当然如果并不打算用到静态成员变量，此时你可以不初始它。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;理解代码区，数据区，堆，栈！&lt;/span&gt;(&lt;a href="http://www.cnblogs.com/gaojun/admin/(http://www.downcode.com/server/j_server/J_1010.Html"&gt;http://www.cnblogs.com/gaojun/admin/(http://www.downcode.com/server/j_server/J_1010.Html&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;对于一个进程的内存空间而言，可以在逻辑上分成&lt;/span&gt;3&lt;span style="font-family: 宋体"&gt;个部份：代码区，静态数据区和动态数据区。动态数据区一般就是&amp;#8220;堆栈&amp;#8221;。&amp;#8220;栈&lt;/span&gt;(stack)&lt;span style="font-family: 宋体"&gt;&amp;#8221;和&amp;#8220;堆&lt;/span&gt;(heap)&lt;span style="font-family: 宋体"&gt;&amp;#8221;是两种不同的动态数据区，栈是一种线性结构，堆是一种链式结构。进程的每个线程都有私有的&amp;#8220;栈&amp;#8221;，所以每个线程虽然代码一样，但本地变量的数据都是互不干扰。一个堆栈可以通过&amp;#8220;基地址&amp;#8221;和&amp;#8220;栈顶&amp;#8221;地址来描述。全局变量和静态变量分配在静态数据区，本地变量分配在动态数据区，即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson5: &lt;span style="font-family: 黑体"&gt;文本编程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1,&lt;span style="font-family: 宋体"&gt;创建插入符：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CreateSolidCaret( int nWidth, int nHeight );//&lt;span style="font-family: 宋体"&gt;创建插入符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CreateCaret( CBitmap* pBitmap );//&lt;span style="font-family: 宋体"&gt;创建位图插入符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void ShowCaret( );//&lt;span style="font-family: 宋体"&gt;显示插入符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void HideCaret( );//&lt;span style="font-family: 宋体"&gt;隐藏插入符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;static void PASCAL SetCaretPos( POINT point );//&lt;span style="font-family: 宋体"&gt;移动插入符号&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）创建插入符要在窗口创建完成之后，&lt;/span&gt;CreateSolidCaret&lt;span style="font-family: 宋体"&gt;函数创建的插入符被初始化为隐藏，所以需要调用&lt;/span&gt;ShowCaret()&lt;span style="font-family: 宋体"&gt;将其显示。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;）使用&lt;/span&gt;CreateCaret&lt;span style="font-family: 宋体"&gt;函数创建位图插入符的时候，不能使用局部的位图对象关联位图资源。（与资源相关联的&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;对象，当它析构的时候会同时把与它相关联的资源销毁。）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;，获取当前字体信息的度量：&lt;/span&gt;CDC::GetTextMetrics&lt;/p&gt;&lt;p&gt;BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;typedef struct tagTEXTMETRIC {&amp;nbsp;/* tm */&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmHeight;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;字体高度。&lt;/span&gt;Specifies the height (ascent + descent) of characters.&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmAscent;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;基线以上的字体高度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmDescent;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;基线以下的字体高度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmInternalLeading;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmExternalLeading;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmAveCharWidth;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;字符平均宽度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmMaxCharWidth;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmWeight;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmItalic;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmUnderlined;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmStruckOut;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmFirstChar;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmLastChar;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmDefaultChar;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmBreakChar;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmPitchAndFamily;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE tmCharSet;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmOverhang;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmDigitizedAspectX;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;tmDigitizedAspectY;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;} TEXTMETRIC;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;创建设备描述表&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CClientDC dc(this);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;定义文本信息结构体变量&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TEXTMETRIC tm;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;获得设备描述表中的文本信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dc.GetTextMetrics(&amp;amp;tm);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;根据字体大小，创建合适的插入符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CreateSolidCaret(tm.tmAveCharWidth / 8, tm.tmHeight);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowCaret();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;OnDraw&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;virtual void OnDraw( CDC* pDC )&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当窗口（从无到有或尺寸大小改变等）要求重绘的时候，会发送&lt;/span&gt;WM_PAIN&lt;span style="font-family: 宋体"&gt;消息，调用&lt;/span&gt;OnDraw&lt;span style="font-family: 宋体"&gt;函数进行重绘。在客户区的绘图如果想保持不变也可以在这个函数中进行编写&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;每次重给的时候会再次执行代码&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;生成绘图&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;4,&lt;span style="font-family: 宋体"&gt;获取某字符串的高度和宽度（区别字符串的长度&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;长度表示字符个数）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CDC::GetTextExtent&lt;/p&gt;&lt;p&gt;CSize GetTextExtent( LPCTSTR lpszString, int nCount ) const;&lt;/p&gt;&lt;p&gt;CSize GetTextExtent( const CString&amp;amp; str ) const;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//The CSize class is similar to the Windows SIZE structure&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;typedef struct tagSIZE {&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int cx;//the x-extent &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int cy;//the y-extent &lt;/span&gt;&lt;/p&gt;&lt;p&gt;} SIZE;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5&lt;span style="font-family: 宋体"&gt;，路径层：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL BeginPath( );//CDC&lt;span style="font-family: 宋体"&gt;中函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;在这作图定义路径层剪切区域&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL EndPath( );&lt;/p&gt;&lt;p&gt;BOOL SelectClipPath( int nMode );//&lt;span style="font-family: 宋体"&gt;调用这个函数来使当前路径层剪切区域与新剪切区域进行互操作。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;在这覆盖作图（包含前定义的路径层区域）定义新的剪切区域&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;SelectClipPath Selects the current path as a clipping region for the device context, combining the new region with any existing clipping region by using the specified mode. The device context identified must contain a closed path.&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;）应用：当作图的时候，如果想要在整幅图形其中的某个部分和其它部分有所区别，我们可以把这部分图形放到路径层当中，然后指定调用指定互操作模式调用&lt;/span&gt;SelectClipPath( int nMode )&lt;span style="font-family: 宋体"&gt;函数来使路径层和覆盖在其上新绘图剪切区域进行互操作，达到特殊效果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;6&lt;span style="font-family: 宋体"&gt;，关于文本字符串一些函数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;COLORREF GetBkColor( ) const;//&lt;span style="font-family: 宋体"&gt;得到背景颜色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;virtual COLORREF SetBkColor( COLORREF crColor );//&lt;span style="font-family: 宋体"&gt;设置背景颜色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL SetTextBkColor( COLORREF cr );//&lt;span style="font-family: 宋体"&gt;设置文本背景颜色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;virtual COLORREF SetTextColor( COLORREF crColor );//&lt;span style="font-family: 宋体"&gt;设置文本颜色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );//&lt;span style="font-family: 宋体"&gt;输出文本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL TextOut( int x, int y, const CString&amp;amp; str );//&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;x,y&lt;span style="font-family: 宋体"&gt;所指定坐标处输出&lt;/span&gt;str&lt;/p&gt;&lt;p&gt;CString Left( int nCount ) const;//&lt;span style="font-family: 宋体"&gt;得到字符串左边&lt;/span&gt;nCount&lt;span style="font-family: 宋体"&gt;个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int GetLength( ) const;//&lt;span style="font-family: 宋体"&gt;得到字符串长度&lt;/span&gt;strlen()&lt;/p&gt;&lt;p&gt;7,&lt;span style="font-family: 宋体"&gt;字体&lt;/span&gt;CFont::CFont &lt;/p&gt;&lt;p&gt;CFont( );//&lt;span style="font-family: 宋体"&gt;构造函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//Constructs a CFont object. The resulting object must be initialized with CreateFont, CreateFontIndirect, CreatePointFont, or CreatePointFontIndirect before it can be used.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;选用字体事例代码组：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CClientDC dc(this);&lt;/p&gt;&lt;p&gt;CFont font;//&lt;span style="font-family: 宋体"&gt;构造字体对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;font.CreatePointFont(300,"&lt;span style="font-family: 宋体"&gt;华文行楷&lt;/span&gt;",NULL);//&lt;span style="font-family: 宋体"&gt;初始化字体对象，与字体资源相关联&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CFont *pOldFont=dc.SelectObject(&amp;amp;font);//&lt;span style="font-family: 宋体"&gt;将新字体选入&lt;/span&gt;DC&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;&lt;p&gt;dc.SelectObject(pOldFont);//&lt;span style="font-family: 宋体"&gt;恢复原字体&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）构造字体对象时候，必须初始化。（初始化是将字体对象与字体资源相关联）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;）初始化对象时候，选用的字体也可以是系统字体，但不一定都有效，据测试选用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;8&lt;span style="font-family: 宋体"&gt;，在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;CEditView &lt;span style="font-family: 宋体"&gt;和&lt;/span&gt; cRichEditView&lt;span style="font-family: 宋体"&gt;类已经完成了初步的文字处理。可以让应用程序的&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类以&lt;/span&gt;CEditView &lt;span style="font-family: 宋体"&gt;和&lt;/span&gt; cRichEditView&lt;span style="font-family: 宋体"&gt;类为基类。在创建工程中的第六步可以选择&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;9&lt;span style="font-family: 宋体"&gt;，平滑变色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CDC::TextOut()&lt;span style="font-family: 宋体"&gt;是一个字母一个字母的输出，达不到平滑效果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CDC::DrawText()&lt;span style="font-family: 宋体"&gt;：将文字的输出局限于一个矩形区域，超出矩形区域的文字都被截断。利用这一特点，可每隔些时间增加矩形大小，从而可实现人眼中的平滑效果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CWnd::SetTimer()&lt;span style="font-family: 宋体"&gt;：设置定时器。按设定的时间定时发送&lt;/span&gt;WM_TIMER&lt;span style="font-family: 宋体"&gt;消息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );&lt;/p&gt;&lt;p&gt;//nIDEvent&lt;span style="font-family: 宋体"&gt;定时器标示，&lt;/span&gt;nElapse&lt;span style="font-family: 宋体"&gt;消息发送间隔时间，&lt;/span&gt;void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)&lt;span style="font-family: 宋体"&gt;设置回调函数，如果设置则由设置的回调函数处理&lt;/span&gt;WM_TIMER&lt;span style="font-family: 宋体"&gt;消息，如果没有设置回调函数设为&lt;/span&gt;NULL&lt;span style="font-family: 宋体"&gt;，这发送的&lt;/span&gt;WM_TIMER&lt;span style="font-family: 宋体"&gt;消息压入消息队列，交由相关联的窗口处理（添加&lt;/span&gt;WM_TIMER&lt;span style="font-family: 宋体"&gt;消息处理函数&lt;/span&gt;OnTimer()&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;afx_msg void OnTimer( UINT nIDEvent );&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;响应&lt;/span&gt;WM_TIMER&lt;span style="font-family: 宋体"&gt;消息，&lt;/span&gt;nIDEvent&lt;span style="font-family: 宋体"&gt;为消息对应定时器标示（可以设置不同的定时器发送&lt;/span&gt;WM_TIMER&lt;span style="font-family: 宋体"&gt;消息）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;问题：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;，在&lt;/span&gt;CCareView&lt;span style="font-family: 宋体"&gt;类中添加&lt;/span&gt;WM_CREATE&lt;span style="font-family: 宋体"&gt;消息响应函数&lt;/span&gt;OnCreate(),WM_CREATE&lt;span style="font-family: 宋体"&gt;消息是在什么时候被检查到而被响应的呢？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;（猜测：添加&lt;/span&gt;WM_CREATE&lt;span style="font-family: 宋体"&gt;消息后，消息被压入消息队列，然后经过消息循环进行分发到具体窗口，从而进行响应）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2,&lt;span style="font-family: 宋体"&gt;现有一文本文件内容已经读入串&lt;/span&gt;STR&lt;span style="font-family: 宋体"&gt;中，要求在视图客户区按原先文本文件中的格式输出。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;问题是，利用&lt;/span&gt;CDC&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;TextOut()&lt;span style="font-family: 宋体"&gt;来在&lt;/span&gt;CView&lt;span style="font-family: 宋体"&gt;类派生类窗口中输出串时，忽略了串中的&lt;/span&gt;TAB&lt;span style="font-family: 宋体"&gt;、回车换行等格式，无论串有多长均在一行上输出。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这其中是&lt;/span&gt;CDC&lt;span style="font-family: 宋体"&gt;类成员函数&lt;/span&gt;TextOut()&lt;span style="font-family: 宋体"&gt;忽略串中格式的，还是&lt;/span&gt;CView&lt;span style="font-family: 宋体"&gt;类派生类窗口设置从中做怪呢？怎么解决&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson6: &lt;span style="font-family: 黑体"&gt;菜单编程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中的顶层菜单默认为弹出菜单（&lt;/span&gt;Pop-up)&lt;span style="font-family: 宋体"&gt;，它是不能用来作命令响应的，当取消&lt;/span&gt;Pop-up&lt;span style="font-family: 宋体"&gt;选项后可接受命令响应。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息的分类：标准消息，命令消息，通告消息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;[&lt;span style="font-family: 宋体"&gt;标准消息&lt;/span&gt;]&lt;span style="font-family: 宋体"&gt;：除&lt;/span&gt;WM_COMMAND&lt;span style="font-family: 宋体"&gt;之外，所有以&lt;/span&gt;WM_&lt;span style="font-family: 宋体"&gt;开头的消息。从&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;类派生的类都可以接收到这一消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;[&lt;span style="font-family: 宋体"&gt;命令消息&lt;/span&gt;]&lt;span style="font-family: 宋体"&gt;：来自菜单、加速键或工具栏按钮的消息。这类消息都以&lt;/span&gt;WM_COMMAND&lt;span style="font-family: 宋体"&gt;呈现。在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中，通过菜单项的标识（&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;）来区分不同的命令消息；在&lt;/span&gt;SDK&lt;span style="font-family: 宋体"&gt;中，通过消息的&lt;/span&gt;wParam&lt;span style="font-family: 宋体"&gt;参数识别。从&lt;/span&gt;CCmdTarget&lt;span style="font-family: 宋体"&gt;（&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;的父类）派生的类都可以接收到这一类消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;[&lt;span style="font-family: 宋体"&gt;通告消息&lt;/span&gt;]&lt;span style="font-family: 宋体"&gt;：由控件产生的消息，例如，按钮的单击，列表框的选择等均产生此类消息，为的是向其父窗口（通常是对话框）通知事件的发生。这类消息也是以&lt;/span&gt;WM_COMMAND&lt;span style="font-family: 宋体"&gt;形式呈现。从&lt;/span&gt;CCmdTarget&lt;span style="font-family: 宋体"&gt;（&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;的父类）派生的类都可以接收到这一类消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;总结：凡是从&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;派生的类，既可以接收标准消息，也要以接收命令消息和通告消息。而对于那些从&lt;/span&gt;CCmdTarget&lt;span style="font-family: 宋体"&gt;派生的类，则只能接收命令消息和通告消息，不能接收标准消息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中菜单项消息如果利用&lt;/span&gt;ClassWizard&lt;span style="font-family: 宋体"&gt;来对菜单项消息分别在上述四个类中进行响应，则菜单消息传递顺序：&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类&lt;/span&gt;--Doc&lt;span style="font-family: 宋体"&gt;类&lt;/span&gt;--CMainFrame&lt;span style="font-family: 宋体"&gt;类&lt;/span&gt;--App&lt;span style="font-family: 宋体"&gt;类。菜单消息一旦在其中一个类中响应则不再在其它类中查找响应函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;菜单消息与前面介绍的标准消息的实现机制是相类似的，都是在消息响应函数原型（头文件），消息映射宏（源文件）和消息函数实现（源文件）中添加代码。注意：文档类与应用程序类都是由&lt;/span&gt;CCmndTarget&lt;span style="font-family: 宋体"&gt;类派生，所以可以接收菜单命令消息，但不能接收标准消息（只能由&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;类派生才可以）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;具体消息路由过程：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当点击一个菜单项的时候，最先接受到菜单项消息的是&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;框架类，&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;框架类将会把菜单项消息交给它的子窗口&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类，由&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类首先进行处理；如果&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类检测到没对该菜单项消息做响应，则&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类把菜单项消息交由文档类&lt;/span&gt;Doc&lt;span style="font-family: 宋体"&gt;类进行处理；如果&lt;/span&gt;Doc&lt;span style="font-family: 宋体"&gt;类检测到&lt;/span&gt;Doc&lt;span style="font-family: 宋体"&gt;类中也没对该菜单项消息做响应，则&lt;/span&gt;Doc&lt;span style="font-family: 宋体"&gt;类又把该菜单项消息交还给&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类，由&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类再交还给&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;类处理。如果&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;类查看到&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;类中也没对该消息做响应，则最终交给&lt;/span&gt;App&lt;span style="font-family: 宋体"&gt;类进行处理。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一个菜单栏可以有若干个子菜单，一个子菜单又可以有若干个菜单项等。对菜单栏的子菜单由左至右建立从&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;开始的索引。对特定子菜单的菜单项由上至下建立了从&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;开始的索引。访问子菜单和菜单项均可以通过其索引或标识（如果有标识的话）进行。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;相关重要函数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CMenu* GetMenu( ) ;//CWnd::GetMenu&lt;span style="font-family: 宋体"&gt;得到窗口菜单栏对象指针。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CMenu* GetSubMenu(&amp;nbsp;) ;//CMenu::GetSubMenu&lt;span style="font-family: 宋体"&gt;获得指向弹出菜单对象指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;UINT CheckMenuItem( );//CMenu::CheckMenuItem &lt;span style="font-family: 宋体"&gt;添加选中标识&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL SetDefaultItem();//CMenu::SetDefaultItem &lt;span style="font-family: 宋体"&gt;为指定菜单设置缺省菜单项&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL SetMenuItemBitmaps( );//CMenu::SetMenuItemBitmaps &lt;span style="font-family: 宋体"&gt;设置位图标题菜单。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;UINT EnableMenuItem();//CMenu::EnableMenuItem&lt;span style="font-family: 宋体"&gt;使菜单项有效，无效，或变灰。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL SetMenu( CMenu* pMenu );//CWnd::SetMenu&lt;span style="font-family: 宋体"&gt;在当前窗口上设置新菜单或移除菜单。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HMENU Detach( );//CMenu::Detach&lt;span style="font-family: 宋体"&gt;；断开一个菜单资源与相关的类对象句柄关联，可以定义局部对象，在使用完后调用&lt;/span&gt;Detach&lt;span style="font-family: 宋体"&gt;函数，则不会因为局部对象影响使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）在计算子菜单菜单项的索引的时候，分隔栏符也算索引的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;int GetSystemMetrics()&lt;span style="font-family: 宋体"&gt;获取系统信息度量。可以用它来获取菜单标题的尺寸（后面还会使用到获取屏目尺寸）从而设置位图标题菜单中位图的大小。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;）在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;为我们提供了一套命令更新机制，所有菜单项的更新都是由这套机制来完成的。所以要想利用&lt;/span&gt;CMenu::EnableMenuItem&lt;span style="font-family: 宋体"&gt;来自己控制菜单使用或不使用变灰等，必须要在&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;的构造函数中将变量&lt;/span&gt;m_bAutoMenuEnable&lt;span style="font-family: 宋体"&gt;设置为&lt;/span&gt;FALSE&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;EXAMPLE&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CMenu menu;//&lt;span style="font-family: 宋体"&gt;定义为局部对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;menu.LoadMenu(IDR_MAINFRAME);&lt;/p&gt;&lt;p&gt;SetMenu(&amp;amp;menu);&lt;/p&gt;&lt;p&gt;menu.Detach();// &lt;span style="font-family: 宋体"&gt;这里&lt;/span&gt;menu&lt;span style="font-family: 宋体"&gt;对象作为一个局部对象。使用&lt;/span&gt;Detach()&lt;span style="font-family: 宋体"&gt;从&lt;/span&gt;menu&lt;span style="font-family: 宋体"&gt;对象中分离窗口菜单句柄，从而当&lt;/span&gt;menu&lt;span style="font-family: 宋体"&gt;对象析构的时候窗口菜单资源不随之销毁。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;命令更新机制：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;菜单项状态的维护是依赖于&lt;/span&gt;CN_UPDATE_COMMAND_UI&lt;span style="font-family: 宋体"&gt;消息，谁捕获&lt;/span&gt;CN_UPDATE_COMMAND_UI&lt;span style="font-family: 宋体"&gt;消息，&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;就在其中创建一个&lt;/span&gt;CCmdUI&lt;span style="font-family: 宋体"&gt;对象。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在后台操作系统发出&lt;/span&gt;WM_INITMENUPOPUP&lt;span style="font-family: 宋体"&gt;消息，然后由&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;的基类如&lt;/span&gt;CFrameWnd&lt;span style="font-family: 宋体"&gt;接管并创建一个&lt;/span&gt;CCmdUI&lt;span style="font-family: 宋体"&gt;对象和第一个菜单项相关联，调用对象成员函数&lt;/span&gt;DoUpdate()&lt;span style="font-family: 宋体"&gt;（注：这个函数在&lt;/span&gt;MSDN&lt;span style="font-family: 宋体"&gt;中没有找到说明）发出&lt;/span&gt;CN_UPDATE_COMMAND_UI&lt;span style="font-family: 宋体"&gt;消息，这条消息带有指向&lt;/span&gt;CCmdUI&lt;span style="font-family: 宋体"&gt;对象的指针。此后同一个&lt;/span&gt;CCmdUI&lt;span style="font-family: 宋体"&gt;对象又设置为与第二个菜单项相关联，这样顺序进行，直到完成所有菜单项。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;更新命令&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;处理程序仅应用于弹出式菜单项上的项目，不能应用于永久显示的顶级菜单项目。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）可以手工或用&lt;/span&gt;ClassWizard&lt;span style="font-family: 宋体"&gt;来给菜单项添加&lt;/span&gt;UPDATE_COMMAND_UI&lt;span style="font-family: 宋体"&gt;消息响应，利用响应函数中传进来的&lt;/span&gt;CCmdUI&lt;span style="font-family: 宋体"&gt;对象指针可完成设置菜单项可使用，不可使用，变灰，设置标记菜单等操作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6&lt;span style="font-family: 宋体"&gt;，如果要想让工具栏上的某个图标与菜单项的某个菜单相关联，只需要将图标的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;设置为该菜单项的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;工具栏图标的索引记数顺序是：从做至右从&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;开始，分隔符也算索引号。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7,&lt;span style="font-family: 宋体"&gt;利用向项目中添加&lt;/span&gt;VC&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;POPMENU&lt;span style="font-family: 宋体"&gt;控件：&lt;/span&gt;Project-&amp;gt;Add to Project-&amp;gt;Components and Controls..&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;系统增加的内容：&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;，一个菜单资源；&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;，在派生&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;类中增加了&lt;/span&gt;OnContextMenu()&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;CWnd::OnContextMenu Called by the framework when the user has clicked the right mouse button (right clicked) in the window. You can process this message by displaying a context menu using the TrackPopupMenu.&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );&lt;/p&gt;&lt;p&gt;//CMenu::TrackPopupMenu Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu. A floating pop-up menu can appear anywhere on the screen.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;8&lt;span style="font-family: 宋体"&gt;，利用调用&lt;/span&gt;TrackPopupMenu&lt;span style="font-family: 宋体"&gt;函数，手工添加弹出菜单：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;）用资源管理器添加一个菜单资源&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;）在鼠标右键消息响应函数中，加载菜单资源，并获得要显示的子菜单指针，并用该指针调用&lt;/span&gt;TrackPopupMenu&lt;span style="font-family: 宋体"&gt;函数便完成任务（但要注意：鼠标响应函数传进来的坐标是客户区坐标，而&lt;/span&gt;TrackPopupMenu&lt;span style="font-family: 宋体"&gt;函数中使用的是屏幕坐标，在调用&lt;/span&gt;TrackPopupMenu&lt;span style="font-family: 宋体"&gt;前要调用&lt;/span&gt;ClientToScreen&lt;span style="font-family: 宋体"&gt;客户区坐标到屏幕坐标的转换）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;事例代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CMenu menu;&lt;/p&gt;&lt;p&gt;menu.LoadMenu(IDR_MENU1);&lt;/p&gt;&lt;p&gt;CMenu *pPopup=menu.GetSubMenu(0);&lt;/p&gt;&lt;p&gt;ClientToScreen(&amp;amp;point);&lt;/p&gt;&lt;p&gt;pPopup-&amp;gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CWnd::ClientToScreen(..);//&lt;span style="font-family: 宋体"&gt;将一个坐标点或一个矩形区域坐标转换成屏幕坐标。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CMenu::TrackPopupMenu(..);//&lt;span style="font-family: 宋体"&gt;在指定位置以指定的方式显示弹出菜单。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CWnd::ScreenToClient(..);&lt;/p&gt;&lt;p&gt;//Converts the screen coordinates of a given point or rectangle on the display to client coordinates. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9,&lt;span style="font-family: 宋体"&gt;当弹出菜单属于框架窗口的时候（可在&lt;/span&gt;TrackPopupMenu&lt;span style="font-family: 宋体"&gt;函数参数中设置），弹出菜单上的消息，在路由的时候，仍然遵循&lt;/span&gt;View-DOC-MainFrame-APP&lt;span style="font-family: 宋体"&gt;的响应顺序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;10&lt;span style="font-family: 宋体"&gt;，动态菜单编程：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;所有的资源对象都有一个数据成员保存了资源的句柄。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CMenu::AppendMenu //Appends a new item to the end of a menu.&lt;/p&gt;&lt;p&gt;CMenu::CreatePopupMenu //Creates an empty pop-up menu and attaches it to a CMenu object.&lt;/p&gt;&lt;p&gt;CMenu::InsertMenu &lt;/p&gt;&lt;p&gt;//Inserts a new menu item at the position specified by nPosition and moves other items down the menu. &lt;/p&gt;&lt;p&gt;CMenu::GetSubMenu //Retrieves a pointer to a pop-up menu.&lt;/p&gt;&lt;p&gt;CWnd::GetMenu //Retrieves a pointer to the menu for this window.&lt;/p&gt;&lt;p&gt;CMenu::DeleteMenu //Deletes an item from the menu. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;11&lt;span style="font-family: 宋体"&gt;，手动给动态菜单项添加响应函数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;Resource.h&lt;span style="font-family: 宋体"&gt;中可以添加资源的&lt;/span&gt;ID&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在头文件中写消息函数原型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在代码文件中添加消息映射和添加消息响应函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;说明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可以先创建一个临时的菜单项，设置它的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;和动态菜单项的一致，然后对它用向导进行消息响应，然后删除临时菜单。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;再在代码文件中把消息映射放到宏外（注意一定要放到宏外面，因为&lt;/span&gt;CLASSWIZARD&lt;span style="font-family: 宋体"&gt;发现菜单删除了，同时要把其宏对里的消息映射也删除掉的）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;12&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CWnd::DrawMenuBar &lt;/p&gt;&lt;p&gt;//Redraws the menu bar. If a menu bar is changed after Windows has created the window, call this function to draw the changed menu bar&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;CWnd::GetParent //get a pointer to a child window&amp;#8217;s parent window (if any). &lt;/p&gt;&lt;p&gt;CWnd::Invalidate //&lt;span style="font-family: 宋体"&gt;注意其参数的作用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;13&lt;span style="font-family: 宋体"&gt;，集合类：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CStringArray&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CStringArray&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CDWordArray&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CPtrArray&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CStringArray&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CUIntArray&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CWordArray&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;其中成员函数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CArray::GetAt &lt;/p&gt;&lt;p&gt;CArray::Add&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;14,&lt;span style="font-family: 宋体"&gt;命令消息是到&lt;/span&gt;OnCommand&lt;span style="font-family: 宋体"&gt;函数的时候完成路由的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;由于&lt;/span&gt;CWnd::OnCommand &lt;span style="font-family: 宋体"&gt;是个虚函数，可以在框架类中重写&lt;/span&gt;OnCommand&lt;span style="font-family: 宋体"&gt;函数，从而可以截获菜单消息使它不再往下（&lt;/span&gt;VIEW&lt;span style="font-family: 宋体"&gt;类）路由。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;例：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;// TODO: Add your specialized code here and/or call the base class&lt;/p&gt;&lt;p&gt;&amp;nbsp;int MenuCmdId=LOWORD(wParam);//&lt;span style="font-family: 宋体"&gt;取命令&lt;/span&gt;ID&lt;/p&gt;&lt;p&gt;&amp;nbsp;CMenu2View *pView=(CMenu2View*)GetActiveView();//&lt;span style="font-family: 宋体"&gt;获取当前&lt;/span&gt;VIEW&lt;span style="font-family: 宋体"&gt;类指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if(MenuCmdId&amp;gt;=IDM_PHONE1 &amp;amp;&amp;amp; MenuCmdId&amp;lt;IDM_PHONE1+pView-&amp;gt;m_strArray.GetSize())//&lt;span style="font-family: 宋体"&gt;消息范围判断&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;CClientDC dc(pView);&lt;/p&gt;&lt;p&gt;&amp;nbsp;dc.TextOut(0,0,pView-&amp;gt;m_strArray.GetAt(MenuCmdId-IDM_PHONE1));&lt;/p&gt;&lt;p&gt;&amp;nbsp;return TRUE; &lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;函数返回，避免调用&lt;/span&gt;CFrameWnd::OnCommand&lt;span style="font-family: 宋体"&gt;函数，在&lt;/span&gt;CFrameWnd::OnCommand&lt;span style="font-family: 宋体"&gt;中截获的消息会交由&lt;/span&gt;VIEW&lt;span style="font-family: 宋体"&gt;类处理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;return CFrameWnd::OnCommand(wParam, lParam);&lt;/p&gt;&lt;p&gt;&amp;nbsp;//&lt;span style="font-family: 宋体"&gt;调用基类&lt;/span&gt;OnCommand&lt;span style="font-family: 宋体"&gt;函数，在&lt;/span&gt;CFrameWnd::OnCommand&lt;span style="font-family: 宋体"&gt;中截获的消息会交由&lt;/span&gt;VIEW&lt;span style="font-family: 宋体"&gt;类处理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;15&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;LOWORD&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;HIWORD&lt;span style="font-family: 宋体"&gt;宏&lt;/span&gt;&lt;/p&gt;&lt;p&gt;WORD LOWORD(&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwValue&amp;nbsp;// value from which low-order word is retrieved&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;WORD HIWORD(&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwValue&amp;nbsp;// value from which high-order word is retrieved&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//The LOWORD macro retrieves the low-order word from the given 32-bit value. &lt;/p&gt;&lt;p&gt;//The HIWORD macro retrieves the high-order word from the given 32-bit value. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;16&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;CFrameWnd::GetActiveView &lt;/p&gt;&lt;p&gt;CView* GetActiveView( ) const;//&lt;span style="font-family: 宋体"&gt;获取当前视窗口指针（单文档框架中）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;源文件是单独参与编译的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson7: &lt;span style="font-family: 黑体"&gt;对话框编程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序工作的基本流程是从用户那里得到数据，经过相应的处理之后，现把处理结果输出到屏幕，打印机或者绵输出设备。这就需要用到&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;应用程序的用户接口对话框。对话框就是一个窗口，它不公可以接收消息，而且还可以被移动和关闭，甚至可以在它的客户区中进行绘图。相当于一个窗口，在它上面能够旋转各种标准控件和扩展控件。都是由&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;类派生来&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对话框的类型：模态（&lt;/span&gt;Model&lt;span style="font-family: 宋体"&gt;）对话框和非模态（&lt;/span&gt;Modeless&lt;span style="font-family: 宋体"&gt;）对话框&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;模态对话框：指当其显示时，程序会暂停执行，直到关闭这个模态对话框后，才能继续执行程序中其它任务。当一个模态对话框打开时，用户只能与该对话框进行交互，而其它用户界面对象接收不到输入信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;非模态对话框：当其显示时，允许执行程序中其它任务，而不用关闭这个对话框。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;中，对资源的操作通常都是通过一个与资源相关的类来完成。对话框资源对应&lt;/span&gt;CDialog&lt;span style="font-family: 宋体"&gt;基类。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在对话框资源界面，选择&lt;/span&gt;[View]-&amp;gt;[ClassWizard]&lt;span style="font-family: 宋体"&gt;菜单命令，（也可以新建的对话框资源上双击鼠标左键），选择一个基类，创建关于它的类。其中一般有两个函数一个是构造函数（可用于初始化成员变量），另外一个是&lt;/span&gt;DoDataExchange&lt;span style="font-family: 宋体"&gt;主要用来完成对话框数据的交换和校验，要想在其它窗口的事件中显示该对话框就涉及到创建对话框的模式（模态与非模态）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;模态对话框的创建：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;创建模态对话框要调用&lt;/span&gt;CDialog&lt;span style="font-family: 宋体"&gt;类的成员函数：&lt;/span&gt;DoModel(),&lt;span style="font-family: 宋体"&gt;创建一个模态对话框，其返回值作为&lt;/span&gt;CDialog&lt;span style="font-family: 宋体"&gt;类的另一个成员函数：&lt;/span&gt;EndDialog&lt;span style="font-family: 宋体"&gt;的参数，后者的功能就是关闭模态对话框。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Void CMyboleView::OnDialog(){&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CTestDlg dlg;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;视类中源文件要包含这个类的头文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dlg.DoModal();//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建一个模态对话框，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;非模态对话框的创建：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;需要利用&lt;/span&gt;CDialog&lt;span style="font-family: 宋体"&gt;类的&lt;/span&gt;Create&lt;span style="font-family: 宋体"&gt;成员函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParaentWnd = NULL);&lt;/p&gt;&lt;p&gt;BOOL Create(UINT nIDTemplate, Cwnd* pParentWnd = NULL);&lt;/p&gt;&lt;p&gt;lpszTemplateName&lt;span style="font-family: 宋体"&gt;对话框模板的名称，&lt;/span&gt;nIDTemplate&lt;span style="font-family: 宋体"&gt;对话框模板的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;pParentWnd&lt;span style="font-family: 宋体"&gt;对话框的父窗口，如果是&lt;/span&gt;NULL&lt;span style="font-family: 宋体"&gt;则父窗口就是主应用程序窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;注意：当创建非模态对话框时，还需要调用&lt;/span&gt;ShowWindow&lt;span style="font-family: 宋体"&gt;函数显示对话框，而模态的不需要&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Void CMyboleView::OnDialog(){&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CTestDlg *pDlg = new CTestDlg;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;定义成指针，在堆上分配内存（或定义为全局变&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;量，在堆上分配的内存如不主动销毁则与程序生命周期一样，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDlg-&amp;gt;Create(IDD_DIALOG1, this);//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建一个非模态对话框，使用对话框&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;父窗口是调用&lt;/span&gt;OnDalog&lt;span style="font-family: 宋体"&gt;函数的窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDlg-&amp;gt;ShowWindow(SW_SHOW);//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;显示窗口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;动态添加&lt;/span&gt;Button&lt;/p&gt;&lt;p&gt;void CDlg::OnBtnAdd() &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!IsCreated/*m_btn.h_Wnd*/)//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;也可使用&lt;/span&gt;m_btn&lt;span style="font-family: 宋体"&gt;对象中的成员变量判断句柄是否有值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_btn.Create("New", BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CRect(0, 0, 100, 100), this, 123);//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在对话框上动态添加一个按钮&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsCreated = TRUE;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;判断是否已经创建了按钮，是的话销毁，现点击可再重新创建&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;else&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_btn.DestroyWindow();//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;销毁窗口，因为按钮也是从&lt;/span&gt;CWnd&lt;span style="font-family: 宋体"&gt;继承来&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsCreated = FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;控件的访问&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;获取对话框上的项目指针：&lt;/span&gt;GetDlgItem()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;获取窗口信息：&lt;/span&gt;GetWindowText()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;更改窗口信息：&lt;/span&gt;SetWindowText()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;直接取得对指定话框上项目的信息：&lt;/span&gt;GetDlgItemText() &lt;span style="font-family: 宋体"&gt;想当于&lt;/span&gt;GetDlgItem()&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;GetWindowText()&lt;span style="font-family: 宋体"&gt;合用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当然，有&lt;/span&gt;SetDlgItemText() &lt;span style="font-family: 宋体"&gt;相当于&lt;/span&gt;GetDlgItem()&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;SetItemText() &lt;span style="font-family: 宋体"&gt;合用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;GetDlgItemInt(),SetDlgItemInt()&lt;span style="font-family: 宋体"&gt;等等&lt;/span&gt;,S/GetDlgItemInt()&lt;span style="font-family: 宋体"&gt;可以处理有符号的整数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;字符到数组的转换：&lt;/span&gt;atoi()&amp;nbsp;&lt;span style="font-family: 宋体"&gt;转换一个类型到指定类型时，用&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;类型的第一个字母&lt;/span&gt; to &lt;span style="font-family: 宋体"&gt;指定类型的一个字母。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;DoExchange&lt;span style="font-family: 宋体"&gt;函数里，放置以&lt;/span&gt;DDX_&lt;span style="font-family: 宋体"&gt;为前缀的函数，来关联一个控件和变量，&lt;/span&gt;DDV_&lt;span style="font-family: 宋体"&gt;为前缀的函数，用来校验一个控件内容。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;DDX_(&lt;span style="font-family: 宋体"&gt;对话框数据交换&lt;/span&gt;)&lt;span&gt;&amp;nbsp;&amp;nbsp; DDV_(&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对话框数据校验&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;注意，在用数据变量关联控件的方式时，千万注意要使用&lt;/span&gt;UpdateData()!&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;也可以用一个控件变量关联一个控件，用它的成员函数，来对控件进行操作，例如：&lt;/span&gt;CEDIT.GetWindowText()&lt;/p&gt;&lt;p&gt;SendMessage()&lt;span style="font-family: 宋体"&gt;的用法，比较好用，注意，发送消息，是控件向系统发送，由系统处理。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SendDlgItemMessage()&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;总结以上：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;GetDlgItem()-&amp;gt;G/SetWindowText()&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2, G/SetDlgItemText()&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3, G/SetDlgItemInt&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4, &lt;span style="font-family: 宋体"&gt;将一个控件和一个整型，字符串或其它类型变量相关联。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5, &lt;span style="font-family: 宋体"&gt;将一个控件和一个控件变量相关联&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;用成员函数&lt;/span&gt;GetWindowText()&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;SetWindowText()&lt;span style="font-family: 宋体"&gt;去访问控件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;6, SendMessage(),Windows&lt;span style="font-family: 宋体"&gt;程序都基于消息的，为了获取或设置窗口的文本，只要知道获取或设置窗口文本的消息，就可以通过&lt;/span&gt;SendMessage&lt;span style="font-family: 宋体"&gt;来发送这条消息，从而获取或设置控件的文本。获取窗口文本的消息是&lt;/span&gt;WM_GETTEXT&lt;span style="font-family: 宋体"&gt;发送该消息后，系统将把指定窗口的文本复制到调用者提供的一个缓存中，在这个消息两个附加参数中，&lt;/span&gt;wParam&lt;span style="font-family: 宋体"&gt;指定将复制的字符数据，&lt;/span&gt;lParm&lt;span style="font-family: 宋体"&gt;就是调用者提供的用来保存窗口文本的缓存地址。&lt;/span&gt;WM_SETTEST&lt;span style="font-family: 宋体"&gt;消息&lt;/span&gt;wParam&lt;span style="font-family: 宋体"&gt;参数没用，值为&lt;/span&gt;0,lParam&lt;span style="font-family: 宋体"&gt;参数指定用来设置文本字符串地址；&lt;/span&gt;SendDlgItemMessage()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;以下是几种控件操作的代码&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CTestDlg::OnBtnAdd() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your control notification handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;点击后创建一个新的按钮&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!m_btn)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_btn.Create("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;新按钮&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 20), this, 123);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!m_btn.m_hWnd)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_btn.Create("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;新按钮&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 20), this, 123);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_btn.DestroyWindow();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1):GetDlgItem()-&amp;gt;G(S)etWidowText()&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ch1[10], ch2[10], ch3[10];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM1)-&amp;gt;GetWindowText(ch1, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM2)-&amp;gt;GetWindowText(ch2, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::itoa(num3, ch3, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM3)-&amp;gt;SetWindowText(ch3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2):G(S)etDlgItemInt()&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = GetDlgItemInt(IDC_NUM1, NULL, TRUE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = GetDlgItemInt(IDC_NUM2, NULL, TRUE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDlgItemInt(IDC_NUM3, num3, TRUE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (3):G(S)etDlgItemText()&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ch1[10], ch2[10], ch3[10];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItemText(IDC_NUM1, ch1, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItemText(IDC_NUM2, ch2, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::itoa(num3, ch3, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDlgItemText(IDC_NUM3, ch3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (4):&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将控件和整型变量相关联&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;然后调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;UpdateData(TRUE)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;初始化或校验数据&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在操作完成后调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;UpdateData(FALSE);&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;实现对话框数据初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;注意&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;该方法有数据校验的功能&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在添加变量时可以指定数据值的范围&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateData(TRUE);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;获取编辑框中的数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_num3 = m_num2 + m_num1;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;数据操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;(+)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateData(FALSE);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;初始化编辑框&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;中的数据&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;即将变量中的数据显示到控件中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (5):&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将控件和控件变量相关联&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;然后调用控件变量的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;G(S)etWindowext&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ch1[10], ch2[10], ch3[10];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_cNum1.GetWindowText(ch1, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_cNum2.GetWindowText(ch2, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::itoa(num3, ch3, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDlgItemText(IDC_NUM3, ch3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (6):SendMessage(),&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;平台&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SDK&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的函数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;发送&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;WM_GETTEXT/WM_SETTEXT&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ch1[10], ch2[10], ch3[10];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::SendMessage(GetDlgItem(IDC_NUM1)-&amp;gt;m_hWnd, WM_GETTEXT, 10, (LPARAM)ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::SendMessage(GetDlgItem(IDC_NUM2)-&amp;gt;m_hWnd, WM_GETTEXT, 10, (LPARAM)ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::itoa(num3, ch3, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::SendMessage(GetDlgItem(IDC_NUM3)-&amp;gt;m_hWnd, WM_SETTEXT, 10, (LPARAM)ch3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM1)-&amp;gt;SendMessage(WM_GETTEXT, 10, (LPARAM)ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;对话框控件访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (8):SendDlgItemMessage()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ch1[10], ch2[10], ch3[10];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendDlgItemMessage(IDC_NUM1, WM_GETTEXT, 10, (LPARAM)ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendDlgItemMessage(IDC_NUM2, WM_GETTEXT, 10, (LPARAM)ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::itoa(num3, ch3, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendDlgItemMessage(IDC_NUM3, WM_SETTEXT, 0, (LPARAM)ch3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendDlgItemMessage(IDC_NUM3, EM_SETSEL, 0, -1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM3)-&amp;gt;SetFocus();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM1)-&amp;gt;GetWindowText(ch1, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM2)-&amp;gt;GetWindowText(ch2, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(ch1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(ch2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; itoa(num3, ch3, 10);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM3)-&amp;gt;SetWindowText(ch3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CString str1, str2, str3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num1, num2, num3;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM1)-&amp;gt;GetWindowText(str1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM2)-&amp;gt;GetWindowText(str2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num1 = ::atoi(str1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num2 = ::atoi(str2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num3 = num1 + num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; str3.Format("%d", num3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItem(IDC_NUM3)-&amp;gt;SetWindowText(str3);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateData();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_num3 = m_num1 + m_num2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateData(FALSE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;itoa&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数：将整型转换成字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;atoi&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数：将字符转换成整型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;SendMessage&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数：要使用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SDK&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数，前面加：：表示全局函数，第一个参数句柄可以先获取控件句柄然后再取出其&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;m_hWnd&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;窗口句柄变量，如果控件绑定变量，使用变量的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SendMessage&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数则不需要句柄值&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9,&lt;span style="font-family: 宋体"&gt;伸缩对话框：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;改变窗口的大小&lt;/span&gt;Wnd::SetWindowPos()&lt;span style="font-family: 宋体"&gt;对话框从父类继承来的函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;判断一个矩形是否为空：&lt;/span&gt;IsRectEmpty(),IsRectNull()&lt;span style="font-family: 宋体"&gt;。前者是判断矩形面积是否为空，后者是判断矩形的四个坐标值是否为&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;，不关心是否能做为一个矩形。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;#183;&amp;#183;&amp;#183;&amp;#183;&amp;#183;&lt;/span&gt;SetWindowPos()&lt;span style="font-family: 宋体"&gt;改变窗口的大小和&lt;/span&gt;Z&lt;span style="font-family: 宋体"&gt;次序的排列。&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;&amp;#183;&amp;#183;&amp;#183;&amp;#183;&amp;#183;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;10,&lt;span style="font-family: 宋体"&gt;焦点的问题（：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SetFocus()&lt;/p&gt;&lt;p&gt;SetWindowLong&lt;/p&gt;&lt;p&gt;::GetNextWindow()&lt;/p&gt;&lt;p&gt;::GetWindow()&lt;/p&gt;&lt;p&gt;::GetNextDlgTabItem()&lt;/p&gt;&lt;p&gt;CWnd::GetWindow()&lt;/p&gt;&lt;p&gt;CWnd::GetNextWindow&lt;/p&gt;&lt;p&gt;CWnd::GetNextDlgTabItem()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;缺省&lt;/span&gt;OK&lt;span style="font-family: 宋体"&gt;按钮的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;IDOK,&lt;/p&gt;&lt;p&gt;VC++&lt;span style="font-family: 宋体"&gt;环境下打开对话框资源编辑器，选择&lt;/span&gt;[Layout]-&amp;gt;[Tab order]&lt;span style="font-family: 宋体"&gt;可以查看和调整对话框上控件的&lt;/span&gt;tab&lt;span style="font-family: 宋体"&gt;顺序；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11,&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在用变量来更新控件值，更新控件数据与获取控件数据都要注意一点：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;无论是获取数据还是更新窗口上的数据都是要进行数据交换，要使用&lt;/span&gt;UpdateData&lt;span style="font-family: 宋体"&gt;函数，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Void CTestDlg::OnBtnAdd(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateData();//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;使控件变量获取控件上的数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_num3 = m_num1 + m_num2;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;三个变量都是绑定控件的，对应控件中的值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateData(FALSE);//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;函数默认参数为&lt;/span&gt;TRUE&lt;span style="font-family: 宋体"&gt;，要更新控件数据设置为&lt;/span&gt;FALSE&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;6.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;夺&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;逃跑按钮的巧妙实现&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;如何改变按纽的字体？在对话框的属性中改变字体的属性即可&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;逃跑按纽的实现&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;1.&lt;span style="font-family: 宋体"&gt;从&lt;/span&gt;CButton&lt;span style="font-family: 宋体"&gt;派生一个类，&lt;/span&gt;CWeixinBtn&lt;/p&gt;&lt;p&gt;&amp;nbsp;2.&lt;span style="font-family: 宋体"&gt;将&lt;/span&gt;IDC_EDIT1&lt;span style="font-family: 宋体"&gt;关联成员变量&lt;/span&gt;m_btn1,&lt;span style="font-family: 宋体"&gt;类型为&lt;/span&gt;CWeixinBtn&lt;span style="font-family: 宋体"&gt;，注意要包含头文件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;3.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CWeixinBtn&lt;span style="font-family: 宋体"&gt;中加一个指针成员变量&lt;/span&gt;CWeixinBtn *pWeixinBtn,&lt;span style="font-family: 宋体"&gt;然后将其地址初始化。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;4.&lt;span style="font-family: 宋体"&gt;在新类中增加鼠标移动的消息处理。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;属性表单&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;1.&lt;span style="font-family: 宋体"&gt;插入属性页资源。&lt;/span&gt;Insert-&amp;gt;new Resource-&amp;gt;Dialog&lt;/p&gt;&lt;p&gt;&amp;nbsp;2.&lt;span style="font-family: 宋体"&gt;当选择&lt;/span&gt;Classwizard&lt;span style="font-family: 宋体"&gt;菜单时，系统提示是否为创建新的类，我们将其从&lt;/span&gt;CPropertyPage&lt;span style="font-family: 宋体"&gt;派生！这样可以为方便为其增加消息响应函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;3.&lt;span style="font-family: 宋体"&gt;插入新的从&lt;/span&gt;CPropertySheet&lt;span style="font-family: 宋体"&gt;派生的类，在类中增加&lt;/span&gt;3&lt;span style="font-family: 宋体"&gt;个&lt;/span&gt;CPropertyPage&lt;span style="font-family: 宋体"&gt;的实例。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;4.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;view&lt;span style="font-family: 宋体"&gt;中增加菜单项，当点击时显示属性表单，出现中文乱码，修改&lt;/span&gt;CPropertyPage&lt;span style="font-family: 宋体"&gt;属性为中文，另外将其字体设为宋体。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;5.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CPropertyPage&lt;span style="font-family: 宋体"&gt;中设置&lt;/span&gt;SetWizardButtons&lt;span style="font-family: 宋体"&gt;可将其属性改为上一步、完成！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;6.&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;IDC_RADIO1&lt;span style="font-family: 宋体"&gt;关联成员变量，需要先设置&lt;/span&gt;Group&lt;span style="font-family: 宋体"&gt;属性才行。另外别忘记调用&lt;/span&gt;UpdateData().&lt;/p&gt;&lt;p&gt;&amp;nbsp;7.&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;CPropertyPage&lt;span style="font-family: 宋体"&gt;增加虚函数，&lt;/span&gt;OnWizardNext,&lt;span style="font-family: 宋体"&gt;如果用户点击下一步时，不想让他进入下一步，刚返回&lt;/span&gt;-1&lt;span style="font-family: 宋体"&gt;！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;8.&lt;span style="font-family: 宋体"&gt;将用户的选择输出到屏幕上，此时可以在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中增加几个成员变量，用来接收用户选择的数据。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;注意：&lt;/span&gt; memset()&lt;span style="font-family: 宋体"&gt;的用法！&lt;/span&gt; memset(m_bLike,0,sizeof(m_bLike));&lt;span style="font-family: 宋体"&gt;将所指定长度设置为&lt;/span&gt;0&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; ZeroMemory(m_bLike, sizeof(m_bLike));&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;同上效果&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson9: &lt;span style="font-family: 黑体"&gt;定制应用程序的外观&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1,&lt;span style="font-family: 宋体"&gt;修改外观和图标可以在&lt;/span&gt;MainFrm&lt;span style="font-family: 宋体"&gt;中进行，而修改背景和光标只能在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中进行。为什么？因为&lt;/span&gt;view&lt;span style="font-family: 宋体"&gt;的显示挡在了&lt;/span&gt;MainFrame&lt;span style="font-family: 宋体"&gt;的前面。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;a.&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;MainFrame&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;PreCreateWindow()&lt;span style="font-family: 宋体"&gt;中，在窗口创建之前，用重新注册窗口类的方法，比较麻烦。在&lt;/span&gt;PreCreateWindow()&lt;span style="font-family: 宋体"&gt;中修改也可以用简单的方法，用全局函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,0,&lt;/p&gt;&lt;p&gt;// LoadIcon(NULL,IDI_WARNING));&lt;span style="font-family: 宋体"&gt;在窗口创建之后，在&lt;/span&gt;OnCreate&lt;span style="font-family: 宋体"&gt;（）中修改&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);&lt;/p&gt;&lt;p&gt;//SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) &amp;amp; ~WS_MAXIMIZEBOX);&lt;/p&gt;&lt;p&gt;// SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR));&lt;/p&gt;&lt;p&gt;&lt;strong&gt;b.&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;View&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PreCreateWindow()&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,&lt;/p&gt;&lt;p&gt;// LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),NULL);&lt;/p&gt;&lt;p&gt;cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnCreate()&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH));&lt;/p&gt;&lt;p&gt;SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP));&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;创建一个不断变化的图标。用定时器和&lt;/span&gt;SetClassLong&lt;span style="font-family: 宋体"&gt;完成&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;准备三个图标文件，放在&lt;/span&gt;RES&lt;span style="font-family: 宋体"&gt;文件夹，&lt;/span&gt;Insert-&amp;gt;Resource-&lt;span style="font-family: 宋体"&gt;三个图标，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CMainFrame&lt;span style="font-family: 宋体"&gt;中增加图标句柄数组，&lt;/span&gt;m_hIcons[3]&lt;/p&gt;&lt;p&gt;m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));//MAKEINTRESOURCE&lt;span style="font-family: 宋体"&gt;是一个宏，它将整数转化为&lt;/span&gt;Win32&lt;span style="font-family: 宋体"&gt;的资源类型，简单的说它是一个类型转换&lt;/span&gt; &lt;/p&gt;&lt;p&gt;#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))&lt;/p&gt;&lt;p&gt;m_hIcons[1]=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));//&lt;span style="font-family: 宋体"&gt;此处需要用到&lt;/span&gt;theAPP&lt;span style="font-family: 宋体"&gt;对象，故要在文件中声明&lt;/span&gt;extern CStyleApp theApp;&lt;/p&gt;&lt;p&gt;m_hIcons[2]=LoadIcon(AfxGetApp()-&amp;gt;m_hInstance,MAKEINTRESOURCE(IDI_ICON3));&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;然后将其初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;c.&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;然后在定时器中实现&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;工具栏的编程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;加入分隔符的方法，向右拖动即可；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;删除按纽的方法，拖出即可。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;创建一个新的工具栏的方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;插入一个工具栏，画出其图形。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;在头文件中，定义&lt;/span&gt;CToolBar m_newToolBar&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;MainFrm.cpp&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;OnCreate()&lt;span style="font-family: 宋体"&gt;中调用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT&lt;/p&gt;&lt;p&gt;&amp;nbsp;| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||&lt;/p&gt;&lt;p&gt;&amp;nbsp;!m_newToolBar.LoadToolBar(IDR_TOOLBAR1))&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;TRACE0("Failed to create toolbar\n");&lt;/p&gt;&lt;p&gt;&amp;nbsp;return -1;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // fail to create&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;d.&lt;span style="font-family: 宋体"&gt;点击&amp;#8220;新的工具栏&amp;#8221;菜单时，隐藏工具栏。两种方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;第一种&lt;/span&gt;/*if(m_newToolBar.IsWindowVisible())&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;m_newToolBar.ShowWindow(SW_HIDE);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;else&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;m_newToolBar.ShowWindow(SW_SHOW);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;RecalcLayout();&lt;/p&gt;&lt;p&gt;DockControlBar(&amp;amp;m_newToolBar);*/&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;第二种&lt;/span&gt;ShowControlBar(&amp;amp;m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);&lt;/p&gt;&lt;p&gt;&amp;nbsp;e.&lt;span style="font-family: 宋体"&gt;将菜单增加复选标记。在&lt;/span&gt;OnUpdateUI&lt;span style="font-family: 宋体"&gt;中加入代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCmdUI-&amp;gt;SetCheck(m_newToolBar.IsWindowVisible());&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5.&lt;span style="font-family: 宋体"&gt;状态栏编程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.Indicator[]&lt;span style="font-family: 宋体"&gt;数组中有状态栏的信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;如果要增加，可以在&lt;/span&gt;String Table&lt;span style="font-family: 宋体"&gt;中加入一个&lt;/span&gt;IDS_Timer,&lt;span style="font-family: 宋体"&gt;然后将其加入到&lt;/span&gt;[]&lt;span style="font-family: 宋体"&gt;中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;在时间栏显示时间，代码略，比较简单&lt;/span&gt;&lt;/p&gt;&lt;p&gt;6.&lt;span style="font-family: 宋体"&gt;进度栏&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;增加成员变量，&lt;/span&gt;CProgressCtrl m_progress&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.OnCreate&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt; m_progress.Create(WS_CHILD | WS_VISIBLE,// | PBS_VERTICAL,&lt;/p&gt;&lt;p&gt;&amp;nbsp;rect,&amp;amp;m_wndStatusBar,123);&lt;/p&gt;&lt;p&gt;m_progress.SetPos(50);*/&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;将其创建到状态栏的方法！如果在&lt;/span&gt;OnCreate()&lt;span style="font-family: 宋体"&gt;中创建，则不成立，因为获取矩形大小时失败。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;解决办法，用自定义消息：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;MainFrm.h&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;#define UM_PROGRESS&amp;nbsp;WM_USER+1//WM_USER&lt;span style="font-family: 宋体"&gt;是一个界限&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;消息函数原型声明：&lt;/span&gt;afx_msg void OnProgress()&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;MainFrm.cpp&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;ON_MESSAGE(UM_PROGRESS,OnProgress)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;然后实现这个函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CMainFrame::OnProgress()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;CRect rect;&lt;/p&gt;&lt;p&gt;m_wndStatusBar.GetItemRect(2,&amp;amp;rect);&lt;/p&gt;&lt;p&gt;m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH,&lt;/p&gt;&lt;p&gt;&amp;nbsp;rect,&amp;amp;m_wndStatusBar,123);&lt;/p&gt;&lt;p&gt;m_progress.SetPos(50);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;最后在&lt;/span&gt;OnCreate&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;中调用&lt;/span&gt; PostMessage(UM_PROGRESS);//&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;不能用&lt;/span&gt;SendMessage()&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; d.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;解决重绘时进度栏改变的问题。在&lt;/span&gt;OnPain()&lt;span style="font-family: 宋体"&gt;中重写代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CRect rect;&lt;/p&gt;&lt;p&gt;m_wndStatusBar.GetItemRect(2,&amp;amp;rect);&lt;/p&gt;&lt;p&gt;m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH,&lt;/p&gt;&lt;p&gt;&amp;nbsp;rect,&amp;amp;m_wndStatusBar,123);&lt;/p&gt;&lt;p&gt;m_progress.SetPos(50);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;然后在定时器消息处理函数中加入&lt;/span&gt;&lt;/p&gt;&lt;p&gt;m_progress.StepIt();&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; e.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;显示鼠标位置。在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中增加&lt;/span&gt;OnMouseMove()&lt;span style="font-family: 宋体"&gt;处理函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CString str;&lt;/p&gt;&lt;p&gt;str.Format("x=%d,y=%d",point.x,point.y);&lt;/p&gt;&lt;p&gt;//((CMainFrame*)GetParent())-&amp;gt;m_wndStatusBar.SetWindowText(str);&lt;/p&gt;&lt;p&gt;//((CMainFrame*)GetParent())-&amp;gt;SetMessageText(str);&lt;/p&gt;&lt;p&gt;//((CMainFrame*)GetParent())-&amp;gt;GetMessageBar()-&amp;gt;SetWindowText(str);&lt;/p&gt;&lt;p&gt;GetParent()-&amp;gt;GetDescendantWindow(AFX_IDW_STATUS_BAR)-&amp;gt;SetWindowText(str);&lt;/p&gt;&lt;p&gt;7.&lt;span style="font-family: 宋体"&gt;加入启动画面&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Project-Component and -&amp;gt;Visual C++ Components-&amp;gt;SplashScreen-&amp;gt;&lt;span style="font-family: 宋体"&gt;插入&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson10: &lt;span style="font-family: 黑体"&gt;绘图控制&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;画图：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; a.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建四个菜单，为其添加消息响应；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; b.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中添加&lt;/span&gt;m_DrawType,&lt;span style="font-family: 宋体"&gt;保存绘画类型；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; c.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;增加成员变量，&lt;/span&gt;m_PtOrigin&lt;span style="font-family: 宋体"&gt;，当按下鼠标左键时，保存此点；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; d.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnLButtonUp&lt;span style="font-family: 宋体"&gt;中画点，线，矩形，椭圆，别忘记设置成透明画刷&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;为其添加一个设置对话框（线型和线宽）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; a.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建对话框，为其创建一个新类关联它；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; b.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;为其中的线宽关联成员变量；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; c.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中增加一个菜单，响应新的对话框；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;d.&lt;span style="font-family: 宋体"&gt;添加线型选项设置，将其&lt;/span&gt;Group&lt;span style="font-family: 宋体"&gt;属性选中，并为单选按纽关联成员变量。在&lt;/span&gt;view&lt;span style="font-family: 宋体"&gt;中增加一个线型变量&lt;/span&gt;m_nLineStyle&lt;/p&gt;&lt;p&gt;3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;添加一个颜色对话框&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;实例化一个&lt;/span&gt;CColorDialog&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;b.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;调用&lt;/span&gt;DoModal&lt;span style="font-family: 宋体"&gt;方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;添加字体对话框，将选择的字体在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中显示出来。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;实例化一个对象；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;b.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;添加一个字体成员变量，得到用户选择的字体。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;c.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;调用&lt;/span&gt;Invadate()&lt;span style="font-family: 宋体"&gt;发出重绘消息；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;d.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;再次注意一个对象只能创建一次，故要再次创建，必须将原告的删除！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;为设置对话框增加示例功能。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;a.&lt;span style="font-family: 宋体"&gt;当控件内容改变时，发出&lt;/span&gt;En_change&lt;span style="font-family: 宋体"&gt;消息。而&lt;/span&gt;Radio&lt;span style="font-family: 宋体"&gt;按纽则为&lt;/span&gt;Clicked&lt;span style="font-family: 宋体"&gt;。需先&lt;/span&gt;UpdateData()&lt;span style="font-family: 宋体"&gt;。另外还需要&lt;/span&gt;ScreenToClient(&amp;amp;rect)&lt;/p&gt;&lt;p&gt;6.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;改变对话框的背景色和控件颜色。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;每个控件被绘制时都发出&lt;/span&gt;WM_CTlColor&lt;span style="font-family: 宋体"&gt;消息，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;7.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;如何改变&lt;/span&gt;OK&lt;span style="font-family: 宋体"&gt;按纽的字体和背景？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;OK&lt;span style="font-family: 宋体"&gt;按纽&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;创建一个新类，&lt;/span&gt;CTestBtn,&lt;span style="font-family: 宋体"&gt;基类为&lt;/span&gt;CButton&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;在类中增加虚函数，&lt;/span&gt;DrawItem&lt;span style="font-family: 宋体"&gt;，添加代码。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;将&lt;/span&gt;OK&lt;span style="font-family: 宋体"&gt;按纽关联成员变量。类型为&lt;/span&gt;CTestBtn&lt;span style="font-family: 宋体"&gt;，注意将&lt;/span&gt;OK&lt;span style="font-family: 宋体"&gt;按纽的&lt;/span&gt;OwnerDraw&lt;span style="font-family: 宋体"&gt;特性选中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Cancel&lt;span style="font-family: 宋体"&gt;按纽&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;用新类来改变。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;加入新文件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;Cancel&lt;span style="font-family: 宋体"&gt;关联一个成员变量，类型为&lt;/span&gt;CSXBtn;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;调用&lt;/span&gt;CSXBtn&lt;span style="font-family: 宋体"&gt;的方法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Cancel2&lt;span style="font-family: 宋体"&gt;按纽&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;方法同上。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;8.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在窗口中贴图&lt;/span&gt;,4&lt;span style="font-family: 宋体"&gt;个步骤&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、创建位图&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CBitmap bitmap;&lt;/p&gt;&lt;p&gt;bitmap.LoadBitmap(IDB_BITMAP1);&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;创建兼容&lt;/span&gt;DC&lt;/p&gt;&lt;p&gt;CDC dcCompatible;&lt;/p&gt;&lt;p&gt;dcCompatible.CreateCompatibleDC(pDC);&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;将位图选到兼容&lt;/span&gt;DC&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dcCompatible.SelectObject(&amp;amp;bitmap);&lt;/p&gt;&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;将兼容&lt;/span&gt;DC&lt;span style="font-family: 宋体"&gt;中的位图贴到当前&lt;/span&gt;DC&lt;span style="font-family: 宋体"&gt;中。在&lt;/span&gt;WM_EraseBkgnd()&lt;span style="font-family: 宋体"&gt;中调用，但不能再调用基类的擦除背景函数。也可以在&lt;/span&gt;OnDraw&lt;span style="font-family: 宋体"&gt;函数中完成，但效率低，图像会闪烁，因为它先擦除背景，慢。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pDC-&amp;gt;BitBlt(rect.left,rect.top,rect.Width(),&lt;/p&gt;&lt;p&gt;rect.Height(),&amp;amp;dcCompatible,0,0,SRCCOPY);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson11 &lt;span style="font-family: 黑体"&gt;图形的保存和重绘&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建&lt;/span&gt;4&lt;span style="font-family: 宋体"&gt;个菜单，为其添加消息响应，用成员变量保存绘画类型。添加&lt;/span&gt;LButtonDown&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Up&lt;span style="font-family: 宋体"&gt;消息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;当窗口重绘时，如果想再显示原先画的数据，则需要保存数据。为此创建一个新类来记录绘画类型和两个点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;class CGraph&amp;nbsp;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;public:&lt;/p&gt;&lt;p&gt;CPoint m_ptOrigin;//&lt;span style="font-family: 宋体"&gt;起点&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CPoint m_ptEnd;//&lt;span style="font-family: 宋体"&gt;终点&lt;/span&gt;&lt;/p&gt;&lt;p&gt;UINT m_nDrawType;//&lt;span style="font-family: 宋体"&gt;绘画类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CGraph();&lt;/p&gt;&lt;p&gt;CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);//&lt;span style="font-family: 宋体"&gt;此为构造函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;virtual ~CGraph(); &lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;然后在&lt;/span&gt;void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)&lt;span style="font-family: 宋体"&gt;中加入如下代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//CGraph graph(m_nDrawType,m_ptOrigin,point);//&lt;span style="font-family: 宋体"&gt;不能用局部变量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//m_ptrArray.Add(&amp;amp;graph);//&lt;span style="font-family: 宋体"&gt;加入这种指针数组中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;/* OnPrepareDC(&amp;amp;dc);//&lt;span style="font-family: 宋体"&gt;这个函数中可以重新设置窗口原点，对于滚动条中，保存数据前要调用此函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dc.DPtoLP(&amp;amp;m_ptOrigin);//&lt;span style="font-family: 宋体"&gt;将设备坐标转换为逻辑坐标&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dc.DPtoLP(&amp;amp;point);//&lt;/p&gt;&lt;p&gt;CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);//&lt;span style="font-family: 宋体"&gt;在堆中创建新的对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;m_ptrArray.Add(pGraph);*///&lt;span style="font-family: 宋体"&gt;加入到指针数组中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;GraphicView.h&lt;span style="font-family: 宋体"&gt;中有如下代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CPtrArray m_ptrArray;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnDraw&lt;span style="font-family: 宋体"&gt;中重画时调出数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;for(int i=0;i&amp;lt;m_ptrArray.GetSize();i++)&lt;/p&gt;&lt;p&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CView::OnPaint()&lt;span style="font-family: 宋体"&gt;调用了&lt;/span&gt;OnDraw(),&lt;span style="font-family: 宋体"&gt;但在&lt;/span&gt;void CGraphicView::OnPaint()&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;Wizard&lt;span style="font-family: 宋体"&gt;没有调用&lt;/span&gt;OnDraw(),&lt;span style="font-family: 宋体"&gt;要注意这个区别。如果你此时想调用，必须手动添加代码。&lt;/span&gt; OnDraw(&amp;amp;dc);&lt;/p&gt;&lt;p&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;让窗口具有滚动条的功能。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;第&lt;/span&gt;1.&lt;span style="font-family: 宋体"&gt;将&lt;/span&gt;CGraphicView&lt;span style="font-family: 宋体"&gt;的头文件中的&lt;/span&gt;CView&lt;span style="font-family: 宋体"&gt;全部替换成&lt;/span&gt;CSrollView&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;第&lt;/span&gt;2.&lt;span style="font-family: 宋体"&gt;添加如下的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CGraphicView::OnInitialUpdate() &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;CScrollView::OnInitialUpdate();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// TOD Add your specialized code here and/or call the base class&lt;/p&gt;&lt;p&gt;SetScrollSizes(MM_TEXT,CSize(800,600));//&lt;span style="font-family: 宋体"&gt;设置映射模式，设定窗口大小。&lt;/span&gt;OK&lt;span style="font-family: 宋体"&gt;！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;5.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;坐标系的转换，此处不再详细介绍，需要时请查阅相关资料。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;6.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;解决重绘时线跑到上面的问题。为什么会错位？因为逻辑坐标和设备坐标没有对应起来。解决方法：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnLButtonDown&lt;span style="font-family: 宋体"&gt;画完图后，保存之前。调用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;/* OnPrepareDC(&amp;amp;dc);//&lt;span style="font-family: 宋体"&gt;重新设置逻辑坐标的原点！！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dc.DPtoLP(&amp;amp;m_ptOrigin);//&lt;span style="font-family: 宋体"&gt;设备坐标转化为逻辑坐标&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dc.DPtoLP(&amp;amp;point);&lt;/p&gt;&lt;p&gt;CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);&lt;/p&gt;&lt;p&gt;m_ptrArray.Add(pGraph);*/&lt;/p&gt;&lt;p&gt;7.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;另外两种方法来保存数据。一种是用&lt;/span&gt;CMetaFileDC&lt;span style="font-family: 宋体"&gt;，另一种是利用兼容&lt;/span&gt;DC&lt;span style="font-family: 宋体"&gt;，重绘时利用&lt;/span&gt; pDC-&amp;gt;BitBlt(0,0,rect.Width(),rect.Height(),&amp;amp;m_dcCompatible,0,0,SRCCOPY);&lt;span style="font-family: 宋体"&gt;将兼容&lt;/span&gt;DC&lt;span style="font-family: 宋体"&gt;的图拷贝到屏幕&lt;/span&gt;DC&lt;span style="font-family: 宋体"&gt;上去。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson12 &lt;span style="font-family: 黑体"&gt;文件操作&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;常量指针与指针常量的区分&lt;/span&gt;&lt;br /&gt;&amp;nbsp;char ch[5]="lisi";&lt;br /&gt;&amp;nbsp;const char *pStr=ch;//const&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;*&lt;span style="font-family: 宋体"&gt;之前，表明指针指向的内容为常量，即为常量指针，但指针可指向其它变量。&lt;/span&gt;&lt;br /&gt;&amp;nbsp;char * const pStr=ch;//const&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;*&lt;span style="font-family: 宋体"&gt;之后，表明指针的地址不能改变，即为指针常量，但指针所指向的内容是可以改变的；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;const char * const pStr = ch;&lt;span style="font-family: 宋体"&gt;指向常量的常量指针，指针的地址与指向的内容都不可以改变。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对文件读写的三种方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;1&amp;gt;.C&lt;span style="font-family: 宋体"&gt;语言&lt;/span&gt;&lt;/p&gt;&lt;p&gt;FILE *pFile=fopen("1.txt","w");//&lt;span style="font-family: 宋体"&gt;参数&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;文件路径&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;只写文件则在本工程中&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;参数&lt;/span&gt;2:&lt;span style="font-family: 宋体"&gt;打开模式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile);//&lt;span style="font-family: 宋体"&gt;写文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;原型&lt;/span&gt;:size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在写完文件后要使用&lt;/span&gt;fflush(pFile);&lt;span style="font-family: 宋体"&gt;或&lt;/span&gt;fclose(pFile)&lt;span style="font-family: 宋体"&gt;使数据写入到文件中&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因为&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;语言对文&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;件的操作使用了缓冲文件系统&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;一般如果不手工刷新缓冲区的话&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;直到缓冲区满后才将数据写入到文件中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int fseek(FILE *stream, long offset, int origin);&lt;/p&gt;&lt;p&gt;stream&amp;nbsp;&lt;span style="font-family: 宋体"&gt;指向&lt;/span&gt;FILE&lt;span style="font-family: 宋体"&gt;结构体的指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;offset&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;设定偏移量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;origin&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;指定文件指针的起始位置&lt;/span&gt;.( SEEK_SET&lt;span style="font-family: 宋体"&gt;开始处&lt;/span&gt;, SEEK_CUR&lt;span style="font-family: 宋体"&gt;文件当前位置处&lt;/span&gt;, SEEK_END&lt;span style="font-family: 宋体"&gt;文件的结尾处&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;//fseek(pFile,0,SEEK_SET);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;对于&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;语言文件操作来说&lt;/span&gt; ,&lt;span style="font-family: 宋体"&gt;它有一个文件指针&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;该指针会随时根据我们对文件的操作来移动地&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;始终指向文件下一个写入的位置&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;当执行定稿操作之后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;文件指针就指向了所写数据占据位置的下一个位置&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;如果希望在写入数据后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;返回到文件的开始位置处再写入数据&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;就需要将这个文件指针移动到文件开始校园&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;这可以利用&lt;/span&gt; fseek&lt;span style="font-family: 宋体"&gt;函数实现&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//fwrite("ftp:",1,strlen("ftp:"),pFile);&lt;/p&gt;&lt;p&gt;//fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile);&lt;/p&gt;&lt;p&gt;char ch[100];&lt;span style="font-family: 宋体"&gt;接收文件中数据字符数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;memset(ch, 0, strlen(ch));&lt;/p&gt;&lt;p&gt;fread(ch, 1, 100, pFile);&lt;/p&gt;&lt;p&gt;fclose(pFile);*/&lt;span style="font-family: 宋体"&gt;关闭文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//fflush(pFile);&lt;span style="font-family: 宋体"&gt;刷新缓冲区&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;2&amp;gt;.C++&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要包括头文件&lt;/span&gt; "fstream.h"&lt;/p&gt;&lt;p&gt;/* ofstream ofs("4.txt");&lt;/p&gt;&lt;p&gt;ofs.write("http://www.sunxin.org",strlen("http://www.sunxin.org"));&lt;/p&gt;&lt;p&gt;ofs.close();*/&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要注意的是&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;在读取文件时候&lt;/span&gt;ROF&lt;span style="font-family: 宋体"&gt;表示文件结尾&lt;/span&gt;,,readnext&lt;span style="font-family: 宋体"&gt;会将文件指针指向文件中下一个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;3&amp;lt;.MFC&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;用&lt;/span&gt;CFile&lt;span style="font-family: 宋体"&gt;类&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CFileDialog fileDlg(FALSE);&lt;/p&gt;&lt;p&gt;fileDlg.m_ofn.lpstrTitle="&lt;span style="font-family: 宋体"&gt;我的文件保存对话框&lt;/span&gt;";&lt;/p&gt;&lt;p&gt;fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";&lt;/p&gt;&lt;p&gt;fileDlg.m_ofn.lpstrDefExt="txt";&lt;/p&gt;&lt;p&gt;if(IDOK==fileDlg.DoModal())&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);&lt;/p&gt;&lt;p&gt;&amp;nbsp;file.Write("http://www.sunxin.org",strlen("http://www.sunxin.org"));&lt;/p&gt;&lt;p&gt;&amp;nbsp;file.Close();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;二进制文件和文本文件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;实际上它们都是以二进制数据的方式存储的&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;文件只是计算机内在中以二进制表示的数据在外部存储介质上的另一种存放形式&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;对于文本文件来&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它只是一种特殊形式的文件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它所存放的第一个字节都可以转换为一个可读的字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;注意&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;写入和读取文件操作的方式要一致&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;文本方式写入就用文本方式读取&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;二进制方式写入就用二进制方式读取&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;面试题&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;给你一个整数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如&lt;/span&gt;:98341,&lt;span style="font-family: 宋体"&gt;将这个整数保存到文件中&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;要求在以记事本程序打开该文件时&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;显示是&lt;/span&gt;:98341,&amp;lt;&lt;span style="font-family: 宋体"&gt;要注意字符与整型是通用的&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;在文件中字符也是以&lt;/span&gt;ASCII&lt;span style="font-family: 宋体"&gt;保存的&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;FILE *pFile = fopen(&amp;#8220;3.txt&amp;#8221;, &amp;#8220;w&amp;#8221;);&lt;/p&gt;&lt;p&gt;char ch[5];&lt;/p&gt;&lt;p&gt;ch[0] = 9 + 48;&lt;/p&gt;&lt;p&gt;ch[1] = 8 + 48;&lt;/p&gt;&lt;p&gt;ch[2] = 3 + 48;&lt;/p&gt;&lt;p&gt;ch[3] = 4 + 48;&lt;/p&gt;&lt;p&gt;ch[4] = 1 + 48;//0&lt;span style="font-family: 宋体"&gt;对应的&lt;/span&gt;ASCII&lt;span style="font-family: 宋体"&gt;是&lt;/span&gt;48,&lt;/p&gt;&lt;p&gt;fwrite(ch, 1, 5, pFile);//&lt;span style="font-family: 宋体"&gt;以这种方式写入&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;在记事本打开时就是&lt;/span&gt;98341&lt;/p&gt;&lt;p&gt;fclose(pFile);&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;利用&lt;/span&gt;win32 API&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt; CreateFile(),&lt;span style="font-family: 宋体"&gt;及&lt;/span&gt;WriteFile()&lt;/p&gt;&lt;p&gt;CreateFile&lt;span style="font-family: 宋体"&gt;函数将创建或打开下列对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;并返回一个用于读取该对象的句柄&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;文件&lt;/span&gt;, &lt;span style="font-family: 宋体"&gt;管道&lt;/span&gt;, &lt;span style="font-family: 宋体"&gt;邮槽&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;在线程通信时会用到&lt;/span&gt;), &lt;span style="font-family: 宋体"&gt;通信资源&lt;/span&gt;, &lt;span style="font-family: 宋体"&gt;磁盘设备&lt;/span&gt;, &lt;span style="font-family: 宋体"&gt;控件台&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;目录&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;仅适用于打开操作&lt;/span&gt;)&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;Example:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CLesson12View::OnFileWrite() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*FILE *pFile = fopen("1.txt", "w");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite("C&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;语言文件操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", 1, strlen("C&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;语言文件操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;"), pFile);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pFile);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*CFile file;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file.Open("2.txt", CFile::modeCreate | CFile::modeWrite);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file.Write("MFC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;文件操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;", strlen("MFC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;文件操作&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;"));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file.Close();*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*CFileDialog m_fileDlg(FALSE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_fileDlg.m_ofn.lpstrDefExt = "txt";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_fileDlg.m_ofn.lpstrTitle ="&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;保存我的文件&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_fileDlg.m_ofn.lpstrFilter = "Text File(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(IDOK == m_fileDlg.DoModal())&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CFile mFile;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mFile.Open(m_fileDlg.GetPathName(), CFile::modeCreate | CFile::modeWrite);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mFile.Write("test file write!", strlen("test file write!"));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mFile.Close();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;定义一个句柄变量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hFile;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = CreateFile("5.txt", GENERIC_WRITE, 0, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;接收实际写入的字节数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwWrites;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteFile(hFile, "example", strlen("example"), &amp;amp;dwWrites, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;关闭文件句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(hFile);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;注册表读写&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;1.&lt;span style="font-family: 宋体"&gt;对&lt;/span&gt;win.ini&lt;span style="font-family: 宋体"&gt;的读写&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//::WriteProfileString("http://www.sunxin.org","admin","zhangsan");&lt;/p&gt;&lt;p&gt;/* CString str;&lt;/p&gt;&lt;p&gt;::GetProfileString("http://www.sunxin.org","admin","lisi",&lt;/p&gt;&lt;p&gt;&amp;nbsp;str.GetBuffer(100),100);&lt;/p&gt;&lt;p&gt;AfxMessageBox(str);*/&lt;/p&gt;&lt;p&gt;&amp;nbsp;2.&lt;span style="font-family: 宋体"&gt;注册表的读写&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HKEY hKey;&lt;/p&gt;&lt;p&gt;DWORD dwAge=30;&lt;/p&gt;&lt;p&gt;RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\http://www.sunxin.org\\admin",&amp;amp;hKey);&lt;/p&gt;&lt;p&gt;RegSetValue(hKey,NULL,REG_SZ,"zhangsan",strlen("zhangsan"));&lt;/p&gt;&lt;p&gt;RegSetValueEx(hKey,"age",0,REG_DWORD,(CONST BYTE*)&amp;amp;dwAge,4);&lt;/p&gt;&lt;p&gt;RegCloseKey(hKey);&lt;span style="font-family: 宋体"&gt;以上是写入&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;Example:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CLesson12View::OnRegWrite() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;注册表操作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //RegCreateKey()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //RegCloseKey()&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果不需要以上找到注册表项&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HKEY mKey;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dAge = 30;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\www.sunxin.org\\admin", &amp;amp;mKey);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::RegSetValue(mKey, NULL, REG_SZ, "zhangsan", strlen("zhangsan"));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::RegSetValueEx(mKey, "age", 0, REG_DWORD, (CONST BYTE*)&amp;amp;dAge, 4);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::RegCloseKey(mKey);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在不使用的时候要调用这个函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CLesson12View::OnRegRead() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*LONG lValue;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegQueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\www.sunxin.org\\admin", NULL, &amp;amp;lValue);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *ch = new char[lValue];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegQueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\www.sunxin.org\\admin", ch, &amp;amp;lValue);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(ch);*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HKEY hKey;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\www.sunxin.org\\admin", &amp;amp;hKey);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwType;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwValue;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwAge;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::RegQueryValueEx(hKey, "age", 0, &amp;amp;dwType, (LPBYTE)&amp;amp;dwAge, &amp;amp;dwValue);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CString str;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; str.Format("Age = %d", dwAge);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(str);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson 13: &lt;span style="font-family: 黑体"&gt;文档串行化&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CArchive&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在菜单打开保存时的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);&lt;/p&gt;&lt;p&gt;CArchive ar(&amp;amp;file,CArchive::store);&lt;/p&gt;&lt;p&gt;int i=4;&lt;/p&gt;&lt;p&gt;char ch='a';&lt;/p&gt;&lt;p&gt;float f=1.3f;&lt;/p&gt;&lt;p&gt;CString str("http://www.sunxin.org");&lt;/p&gt;&lt;p&gt;ar&amp;lt;&amp;lt;i&amp;lt;&amp;lt;ch&amp;lt;&amp;lt;f&amp;lt;&amp;lt;str;&lt;span style="font-family: 宋体"&gt;以上是保存，打开略&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;文档&lt;/span&gt;-&lt;span style="font-family: 宋体"&gt;视类结构简介&lt;/span&gt;&lt;/p&gt;&lt;p&gt;OnNewDocument&lt;span style="font-family: 宋体"&gt;在程序启动时被调用，此时可设置文档标题，也可以在&lt;/span&gt;String Table&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;IDR_MAINFRAME&lt;span style="font-family: 宋体"&gt;的第二个&lt;/span&gt;"\"&lt;span style="font-family: 宋体"&gt;后改变文档的标题。须了解的&lt;/span&gt;7&lt;span style="font-family: 宋体"&gt;个字符串的用途，见&lt;/span&gt;PPT&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;WinAPP&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;InitInstance&lt;span style="font-family: 宋体"&gt;（）中完成&lt;/span&gt;DOC,View,MainFrame&lt;span style="font-family: 宋体"&gt;的归一。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当点击系统的打开和新建菜单时，有一系列的步骤，孙鑫老师给我们跟踪了代码的调用过程，此段跟踪我们略过。但我们要牢记住：&lt;/span&gt;CWinAPP&lt;span style="font-family: 宋体"&gt;负责管理文档管理器，文档管理器有一个指针链表，且来保存文档模板的指针，文档模板指针管理三个类&lt;/span&gt;DOC&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;VIEW&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;MAINFRAME&lt;span style="font-family: 宋体"&gt;，使其为某文件对象服务。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;利用&lt;/span&gt;CArchive&lt;span style="font-family: 宋体"&gt;来保存一个类的对象，此类必须支持串行化，需要&lt;/span&gt;5&lt;span style="font-family: 宋体"&gt;个步骤。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;让类从&lt;/span&gt;CObject&lt;span style="font-family: 宋体"&gt;派生；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;覆盖&lt;/span&gt;Serialize()&lt;span style="font-family: 宋体"&gt;函数，在其中完成保存和读取功能；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;.h&lt;span style="font-family: 宋体"&gt;中加入&lt;/span&gt; DECLARE_SERIAL(CGraph)&lt;span style="font-family: 宋体"&gt;；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在。&lt;/span&gt;cpp&lt;span style="font-family: 宋体"&gt;中加入&lt;/span&gt;IMPLEMENT_SERIAL(CGraph, CObject, 1 )&lt;span style="font-family: 宋体"&gt;；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;e.&lt;span style="font-family: 宋体"&gt;定义一个不带参数的构造函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;保存绘画数据到文件的简单过程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CGraph&lt;span style="font-family: 宋体"&gt;中增加一个画图的成员函数，其实不增加也行。可以在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中完成相应功能。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;增加四个画图菜单，菜单可以从&lt;/span&gt;11&lt;span style="font-family: 宋体"&gt;课的代码中拷贝。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中增加&lt;/span&gt;LButtonDown&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;UP&lt;span style="font-family: 宋体"&gt;的响应，在&lt;/span&gt;UP&lt;span style="font-family: 宋体"&gt;中画图，在&lt;/span&gt;DOWN&lt;span style="font-family: 宋体"&gt;中保存点&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;d.&lt;span style="font-family: 宋体"&gt;利用&lt;/span&gt;CObArray&lt;span style="font-family: 宋体"&gt;集合类来保存绘画数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;e.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CGraphicDOC::Serialize()&lt;span style="font-family: 宋体"&gt;中保存和读取数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;f.&lt;span style="font-family: 宋体"&gt;然后在&lt;/span&gt;OnDraw&lt;span style="font-family: 宋体"&gt;中重绘。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;新建和打开文档时，要注意销毁原来的数据。在&lt;/span&gt;DOC&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;DeleteContents&lt;span style="font-family: 宋体"&gt;虚函数中是好时机。代码如下&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;Example:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int nCount;&lt;/p&gt;&lt;p&gt;nCount=m_obArray.GetSize();&lt;/p&gt;&lt;p&gt;/*for(int i=0;i&amp;lt;nCount;i++)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;delete m_obArray.GetAt(i);//&lt;span style="font-family: 宋体"&gt;释放指针指向的内存空间&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;//m_obArray.RemoveAt(i);//&lt;span style="font-family: 宋体"&gt;移除链表中的元素。但在此处不能这样用，会导致非法操作。要用下面的方法沙&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;m_obArray.RemoveAll();*/&lt;/p&gt;&lt;p&gt;while(nCount--)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;delete m_obArray.GetAt(nCount);&lt;/p&gt;&lt;p&gt;&amp;nbsp;m_obArray.RemoveAt(nCount);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson14 &lt;span style="font-family: 黑体"&gt;网络编程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;sockets&lt;span style="font-family: 宋体"&gt;（套接字）编程有三种，流式套接字（&lt;/span&gt;SOCK_STREAM&lt;span style="font-family: 宋体"&gt;），数据报套接字（&lt;/span&gt;SOCK_DGRAM&lt;span style="font-family: 宋体"&gt;），原始套接字（&lt;/span&gt;SOCK_RAW&lt;span style="font-family: 宋体"&gt;）；基于&lt;/span&gt;TCP&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;socket&lt;span style="font-family: 宋体"&gt;编程是采用的流式套接字&lt;/span&gt;(SOCK_STREAM)&lt;span style="font-family: 宋体"&gt;。基于&lt;/span&gt;UDP&lt;span style="font-family: 宋体"&gt;采用的数据报套接字&lt;/span&gt;(SOCK_DGRAM).&lt;/p&gt;&lt;p&gt;1.TCP&lt;span style="font-family: 宋体"&gt;流式套接字的编程步骤&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在使用之前须链接库函数：工程&lt;/span&gt;-&amp;gt;&lt;span style="font-family: 宋体"&gt;设置&lt;/span&gt;-&amp;gt;Link-&amp;gt;&lt;span style="font-family: 宋体"&gt;输入&lt;/span&gt;ws2_32.lib&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;OK&lt;span style="font-family: 宋体"&gt;！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;服务器端程序：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;、加载套接字库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、创建套接字（&lt;/span&gt;socket&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、将套接字绑定到一个本地地址和端口上（&lt;/span&gt;bind&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;、将套接字设为监听模式，准备接收客户请求（&lt;/span&gt;listen&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5&lt;span style="font-family: 宋体"&gt;、等待客户请求到来；当请求到来后，接受连接请求，返回一个新的对应于此次连接的套接字（&lt;/span&gt;accept&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;6&lt;span style="font-family: 宋体"&gt;、用返回的套接字和客户端进行通信（&lt;/span&gt;send/recv&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;7&lt;span style="font-family: 宋体"&gt;、返回，等待另一客户请求。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;8&lt;span style="font-family: 宋体"&gt;、关闭套接字。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;客户端程序：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;、加载套接字库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、创建套接字（&lt;/span&gt;socket&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、向服务器发出连接请求（&lt;/span&gt;connect&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;、和服务器端进行通信（&lt;/span&gt;send/recv&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5&lt;span style="font-family: 宋体"&gt;、关闭套接字。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(TCP)&lt;span style="font-family: 宋体"&gt;服务器端代码如下：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;winsock2.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;版本号&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD(1, 1);//1.1&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;版本的套接字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup(wVersionRequested, &amp;amp;wsaData);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (err != 0)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;加载套接字库&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果失败返回&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LOBYTE(wsaData.wVersion) != 1 || &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HIBYTE(wsaData.wVersion) != 1)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;判断高低字节是不是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果不是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1.1&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的版本则退出&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建流式套接字&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;基于&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;TCP(SOCK_STREAM)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Socket&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;地址结构体的创建&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSrv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;转换&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;Unsigned long&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;型为网络字节序格式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_family = AF_INET;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;指定地址簇&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;指定端口号&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;除&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;sin_family&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;参数外&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;其它参数都是网络字节序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;因此需要转换&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将套接字绑定到一个端口号和本地地址上&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bind(socSrv, (SOCKADDR*)&amp;amp;addrSrv, sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listen(socSrv, 5);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrClient;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;字义用来接收客户端&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;Socket&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的结构体&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = sizeof(SOCKADDR);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;初始化参数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这个参数必须进行初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;循环等待接受客户端发送请求&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;等待客户请求到来；当请求到来后，接受连接请求，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;返回一个新的对应于此次连接的套接字（&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;accept&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;此时程序在此发生阻塞&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sockConn = accept(socSrv, (SOCKADDR*)&amp;amp;addrClient, &amp;amp;len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char sendBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(sendBuf, "Welcome %s to http://sunxin.org", &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inet_ntoa(addrClient.sin_addr));//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;格式化输出&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;用返回的套接字和客户端进行通信&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;多发送一个字节&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;接收数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recv(sockConn, recvBuf, 100, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(sockConn);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(TCP)&lt;span style="font-family: 宋体"&gt;客户端代码如下：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;winsock2.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;版本号&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD(1, 1);//1.1&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;版本的套接字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup(wVersionRequested, &amp;amp;wsaData);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (err != 0)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;加载套接字库&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果失败返回&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LOBYTE(wsaData.wVersion) != 1 || &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HIBYTE(wsaData.wVersion) != 1)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;判断高低字节是不是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果不是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1.1&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的版本则退出&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建流式套接字&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;基于&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;TCP(SOCK_STREAM)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Socket&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;地址结构体的创建&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSrv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;转换字符型为网络字节序格式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_family = AF_INET;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;指定地址簇&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;指定端口号&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;除&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;sin_family&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;参数外&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;其它参数都是网络字节序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;因此需要转换&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connect(sockClient, (SOCKADDR*)&amp;amp;addrSrv, sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[100];//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;和服务器端进行通信（&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;send/recv&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recv(sockClient,recvBuf,100,0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n",recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send(sockClient,"This is lisi",strlen("This is lisi")+1,0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(sockClient);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;关闭套接字。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup();//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;必须调用这个函数清除参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.UDP&lt;span style="font-family: 宋体"&gt;型套接字。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;服务器端（接收端）程序：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;、创建套接字（&lt;/span&gt;socket&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、将套接字绑定到一个本地地址和端口上（&lt;/span&gt;bind&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、等待接收数据（&lt;/span&gt;recvfrom&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;、关闭套接字。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;客户端（发送端）程序：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;、创建套接字（&lt;/span&gt;socket&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、向服务器发送数据（&lt;/span&gt;sendto&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、关闭套接字。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(UDP)&lt;span style="font-family: 宋体"&gt;服务器端代码：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;winsock2.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;基于&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;UDP&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;开支套接字服务器程序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD( 1, 1 );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup( wVersionRequested, &amp;amp;wsaData );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( err != 0 ) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( LOBYTE( wsaData.wVersion ) != 1 ||&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HIBYTE( wsaData.wVersion ) != 1 ) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup( );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建套字&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;(socket)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addSrv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addSrv.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addSrv.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bind(sockSrv, (SOCKADDR*)&amp;amp;addSrv, sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrClient;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = sizeof(SOCKADDR);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recvfrom(sockSrv, recvBuf, 100, 0, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SOCKADDR*)&amp;amp;addrClient, &amp;amp;len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(sockSrv);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;(UDP)&lt;span style="font-family: 宋体"&gt;客户端代码：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;winsock2.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD( 1, 1 );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup( wVersionRequested, &amp;amp;wsaData );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( err != 0 ) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( LOBYTE( wsaData.wVersion ) != 1 ||&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HIBYTE( wsaData.wVersion ) != 1 ) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup( );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSrv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendto(sockClient, "Hello Server!", sizeof("Hello Server!") + 1,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, (SOCKADDR*)&amp;amp;addrSrv, sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(sockClient);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;===========&lt;span style="font-family: 宋体"&gt;下面是字符界面下的一个简单&lt;/span&gt;UDP&lt;span style="font-family: 宋体"&gt;聊天程序&lt;/span&gt;=====&lt;/p&gt;&lt;p&gt;UDP&lt;span style="font-family: 宋体"&gt;聊天程序服务器端：&lt;/span&gt;==============================&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;winsock2.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//=========&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;基于&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;UDP&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;聊天程序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;=====&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;服务器端&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD( 1, 1 );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup( wVersionRequested, &amp;amp;wsaData );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( err != 0 )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( LOBYTE( wsaData.wVersion ) != 1 ||&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HIBYTE( wsaData.wVersion ) != 1 )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup( );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSrv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bind(sockSrv, (SOCKADDR*)&amp;amp;addrSrv, sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char sendBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char tempBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = sizeof(SOCKADDR);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrClient;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recvfrom(sockSrv, tempBuf, sizeof(tempBuf), 0, (SOCKADDR*)&amp;amp;addrClient, &amp;amp;len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ('q' != tempBuf[0])&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(recvBuf, "%s say: %s", inet_ntoa(addrClient.sin_addr), tempBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("please input your data:");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gets(sendBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendto(sockSrv, sendBuf, strlen(sendBuf) + 1,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, (SOCKADDR*)&amp;amp;addrClient, len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s request to quit the chat platform", inet_ntoa(addrClient.sin_addr));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendto(sockSrv, "q", strlen("q") + 1, 0, (SOCKADDR*)&amp;amp;addrClient, len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(sockSrv);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;UDP&lt;span style="font-family: 宋体"&gt;聊天程序客户端&lt;/span&gt;:===============================&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;WINSOCK2.H&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD( 1, 1 );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup( wVersionRequested, &amp;amp;wsaData );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( err != 0 )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( LOBYTE( wsaData.wVersion ) != 1 ||&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HIBYTE( wsaData.wVersion ) != 1 )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup( );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSrv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSrv.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char sendBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char tempBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = sizeof(SOCKADDR);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("please input your data:\n");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gets(sendBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendto(sockClient, sendBuf, sizeof(sendBuf) + 1,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, (SOCKADDR*)&amp;amp;addrSrv, len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recvfrom(sockClient, tempBuf, 100, 0, (SOCKADDR*)&amp;amp;addrSrv, &amp;amp;len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ('q' != tempBuf[0])&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(recvBuf, "%s say: %s", inet_ntoa(addrSrv.sin_addr), tempBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("the server has been closed!\n");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendto(sockClient, "q", strlen("q") + 1,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, (SOCKADDR*)&amp;amp;addrSrv, len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(sockClient);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson 15 &lt;span style="font-family: 黑体"&gt;多线程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;程序&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;进程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;线程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;A: &lt;span style="font-family: 宋体"&gt;程序是计算机指令的集合&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它以文件的形式存储在磁盘上&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而进程通常被定义为一个正在运行的程序的实例&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;是一个程序在其自身的地址空间中的一次执行活动&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;一个程序可以对应多个进程&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;进程是资源申请&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;高度和独立运行的单位&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因此&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它使用系统中的运行资源&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而程序不能申请系统资源&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不能被系统高度也不能作为独立运行的单位&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因此它不占系统运行资源&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;进程组成&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&amp;lt;1&amp;gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;操作系统用来管理进行的内核对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;内核对象也是系统用来存放关于进程的统计信息的地方&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;内核对象是操作系统内部分配的一个内在块&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;该内存块是一种数据结构&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;其成员负责维护该对象的各种信息&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&amp;lt;2&amp;gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;地址空间&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;它包含所有可执行模块或&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;模块的代码和数据&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;另外&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它也包含动态内存分配的空间&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;例如线程的栈和堆分配空间&lt;/span&gt;&lt;/p&gt;&lt;p&gt;B: &lt;span style="font-family: 宋体"&gt;进程从来不执行任何东西&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它只是纯种的容器&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;若要使进行完成某项操作&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它必须拥有一个在它的环境中运行的纯种&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;此线程负责执行包含在进程的地址空间的中的代码&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;也就是&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;真正完成代码执行的是线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而进行只是纯种的容器&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;或者说是线程的执行环境&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;单个进程可能包含若干个纯种&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;这些线程都&lt;/span&gt;&amp;#8221;&lt;span style="font-family: 宋体"&gt;同时&lt;/span&gt;&amp;#8221;&lt;span style="font-family: 宋体"&gt;执行进行地址空间的中代码&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;每个线程至少拥有一个纯种&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;来执行进行的地址空间中的代码&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;当创建一个进程时&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;操作系统会自动创建这个进程的第一个线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;称为主纯种&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;也就是执行&lt;/span&gt;main&lt;span style="font-family: 宋体"&gt;函数或&lt;/span&gt;WinMain&lt;span style="font-family: 宋体"&gt;函数的线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;可以把&lt;/span&gt;main&lt;span style="font-family: 宋体"&gt;函数或&lt;/span&gt;WinMain&lt;span style="font-family: 宋体"&gt;函数看作是主线程的入口点函数&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;此后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;主线程可以创建其它的线程&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;C: &lt;span style="font-family: 宋体"&gt;线程也由两部分组成&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&amp;lt;1&amp;gt; &lt;span style="font-family: 宋体"&gt;线程内核对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;操作系统用它来对线程实施管理&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;内核对象也是系统用来存放线程统计信息的地地方&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;2&amp;gt;&lt;span style="font-family: 宋体"&gt;线程栈&lt;/span&gt;stack:&lt;span style="font-family: 宋体"&gt;它用于维护线程在执行代码时需要的所有函数参数和局部变量&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;线程总是在某个进程环境中创建&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;系统从进程的地址空间中分配内存&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;供线程的栈使用&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;线程运行&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;操作系统为每一个运行线程安排一定的&lt;/span&gt;CPU&lt;span style="font-family: 宋体"&gt;时间&lt;/span&gt;&amp;#8212;&lt;span style="font-family: 宋体"&gt;时间片&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;系统通过一种循环的方式为线程提供时间片&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;线程在自己的时间内运行&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因时间片相当短&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因此给用户的感觉就是好像多个线程是同时运行一样&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建线程的&lt;/span&gt;SDK&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HANDLE CreateThread (&lt;/p&gt;&lt;p&gt;&amp;nbsp;SEC_ATTRS SecurityAttributes,//&lt;span style="font-family: 宋体"&gt;安全结构全指针&lt;/span&gt;,NULL&lt;span style="font-family: 宋体"&gt;为默认安全性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;ULONG StackSize,//&lt;span style="font-family: 宋体"&gt;线程初始栈的大小&lt;/span&gt; ,&lt;span style="font-family: 宋体"&gt;以字节为单位&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果为&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;或小于&lt;/span&gt;0,&lt;span style="font-family: 宋体"&gt;默认将使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;与调用该线程相同的栈空间大小&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;SEC_THREAD_START StartFunction,//&lt;span style="font-family: 宋体"&gt;线程处理函数地址&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;可用函数名&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;PVOID ThreadParameter,//&lt;span style="font-family: 宋体"&gt;可以为数据或其它信息的指针&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;表示给新线程传送参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;ULONG CreationFlags,//&lt;span style="font-family: 宋体"&gt;线程创建的标记&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;可以为&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;或&lt;/span&gt;CREATE_SUSPENDED,&lt;span style="font-family: 宋体"&gt;如果&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//CREATE_SUSPENDED&lt;span style="font-family: 宋体"&gt;线程创建后暂停状态&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;直到程序调用&lt;/span&gt;//ResumeThread,&lt;span style="font-family: 宋体"&gt;如果为&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;立即运行&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;PULONG ThreadId //[out]&lt;span style="font-family: 宋体"&gt;返回值&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;系统分配新的线程&lt;/span&gt;ID&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一个简单的多线程程序&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;模拟售票系统&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;windows.h&amp;gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;必要的头文件&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;Windows API&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;iostream.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;int index = 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;int tickets = 100;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;票数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;HANDLE hMutex; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用全局的互斥对象来保证对同一资源的互斥访问与操作这里是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;tickets&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;线程处理函数原型&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;形式可从&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;MSDN&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;中拷贝&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;线程&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1 &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;的入口函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Fun1Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Fun2Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hThread1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD thread1ID;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建线程&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, &amp;amp;thread1ID);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hThread2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD thread2ID;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建线程&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, &amp;amp;thread2ID);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(hThread1);&lt;/span&gt; //&lt;span style="font-family: 宋体; font-size: 9pt"&gt;关闭线程的句柄，为什么要关闭？它将线程的使用计数减&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CloseHandle(hThread2);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这样当线程结束时，线程内核对象被释放，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;否则只有当进程结束，才释放线程的内核对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;hThread1&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;与&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;hThread2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建一个互斥对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果成功返回互斥对象的句柄&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;否则返回&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hMutex = CreateMutex(NULL, FALSE, "tickets");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hMutex)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(ERROR_ALREADY_EXISTS == GetLastError())&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "only one instance can run!" &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(index++ &amp;lt; 100)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "main Thread is running!" &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep(4000);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;主线程睡眠&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;秒钟&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;给其它线程运行的时间&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;因为一旦主线程退出则进行退出&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;其它线程也将退出&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Fun1Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(index++ &amp;lt; 100)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "Thread1 is running!" + index &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(TRUE){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WaitForSingleObject(hMutex, INFINITE);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果全局互斥对象是有信号状态&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;则获得该对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;直到调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;ReleaseMutex&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;之前&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;互斥对象是无信号状态&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;其它线程不能对互斥对象进行访问&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(tickets &amp;gt; 0)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep(1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "Thread1 sell tickets : " &amp;lt;&amp;lt; tickets-- &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReleaseMutex(hMutex);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将互斥对象设置为有信号状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Fun2Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(TRUE){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WaitForSingleObject(hMutex, INFINITE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (tickets &amp;gt; 0)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep(1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "Thread2 sell tickets : " &amp;lt;&amp;lt; tickets-- &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReleaseMutex(hMutex);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;多线程聊天程序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;(1)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;加载套接字库在&lt;/span&gt;InitInstance()&lt;span style="font-family: 宋体"&gt;中，调用&lt;/span&gt;AfxSocketInit(),&lt;span style="font-family: 宋体"&gt;此时可以不加载库文件，但要加入&lt;/span&gt;Afxsock.h"&lt;span style="font-family: 宋体"&gt;头文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;if (!AfxSocketInit())&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;加载套接字库失败&lt;/span&gt;!");&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;(2)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg.h&lt;span style="font-family: 宋体"&gt;中类的声明外&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;创建一个全局的结构体&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;包含套接字和窗口的句柄值&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;主要是在投送消息时可以将两个需要传送的消息同时发送&lt;/span&gt;&lt;/p&gt;&lt;p&gt;struct RECVPARAM{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET socket;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWND hWnd;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;&lt;span&gt;(3)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg&lt;span style="font-family: 宋体"&gt;中创建成员变量&lt;/span&gt;m_socket,&lt;span style="font-family: 宋体"&gt;然后增加一个成员函数，&lt;/span&gt;IniSocket(),&lt;span style="font-family: 宋体"&gt;在其中完成&lt;/span&gt;m_socket&lt;span style="font-family: 宋体"&gt;的初始化和绑定。&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;BOOL CChatDlg::InitSocket()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_socket = socket(AF_INET, SOCK_DGRAM, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (INVALID_SOCKET == m_socket)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建套接字失败&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSock;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSock.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSock.sin_port = htons(6010);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int bindRst;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindRst = bind(m_socket, (SOCKADDR*)&amp;amp;addrSock, sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SOCKET_ERROR == bindRst)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(m_socket);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;绑定失败&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return TRUE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;(4)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;创建一个线程，&lt;/span&gt;CreateThread(),&lt;span style="font-family: 宋体"&gt;须将线程函数&lt;/span&gt;RecvProc&lt;span style="font-family: 宋体"&gt;定义为静态的或者全局函数。因为对于运行的代码来说&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它不知道要产生哪一个对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;即运行时根本不知道如何去产生一个&lt;/span&gt;CChatDialog&lt;span style="font-family: 宋体"&gt;类的对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;对于运行时代码来说&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果要调用纯种函数来启动某个纯种的话&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;应该不需要产生某个对象就可以调用这个纯种函数&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;因此要定义为类的静态成员或全局函数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;即这个代码是所以对象共有的&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不需要定义对象才能使用&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;static DWORD WINAPI RecvProc(LPVOID lpParameter);&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;根据线程函数参数获取发送端套接字和要设置包含文本控件的窗口句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET socket = ((RECVPARAM*)lpParameter)-&amp;gt;socket;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWND hWnd = ((RECVPARAM*)lpParameter)-&amp;gt;hWnd;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;窗口句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrRecv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = sizeof(SOCKADDR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char tempBuf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int recvRst;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CString recvStr;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(TRUE)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;接收数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recvRst = recvfrom(socket, recvBuf, 100, 0, (SOCKADDR*)&amp;amp;addrRecv, &amp;amp;len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SOCKET_ERROR == recvRst)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(tempBuf, "%s&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;说&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;:%s\r\n", inet_ntoa(addrRecv.sin_addr), recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recvStr += tempBuf;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;这种方式更加简单不用使用消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::SetDlgItemText(hWnd, IDC_EDIT_RECV, recvStr);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用自定义消息的方式来对控件填充内容&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::PostMessage(hWnd, WM_RECVDATA, 0, (LPARAM)tempBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnInitDialog&lt;span style="font-family: 宋体"&gt;中调用&lt;/span&gt;InitSocket&lt;span style="font-family: 宋体"&gt;完成初始化工作。&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;InitSocket();//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;初始化套接字库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RECVPARAM *pRecvParm = new RECVPARAM();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pRecvParm-&amp;gt;socket = m_socket;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pRecvParm-&amp;gt;hWnd = m_hWnd;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hThreadRecv = CreateThread(NULL, 0, RecvProc, (LPVOID)pRecvParm, 0, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(hThreadRecv);&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;(5)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;::PostMessage()&lt;span style="font-family: 宋体"&gt;完成将收到的数据发送给对话框。用自定义的消息参考下面的代码。注意要将&lt;/span&gt;EDitBox&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;MultiLine&lt;span style="font-family: 宋体"&gt;属性选上。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&amp;lt;1&amp;gt;:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;ChatDlg.h&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;#define WM_RECVDATA&amp;nbsp;WM_USER+1&lt;/p&gt;&lt;p&gt;&amp;lt;2&amp;gt;:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;3&amp;gt;:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;ChatDlg.cpp&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;ON_MESSAGE(WM_RECVDATA,OnRecvData)&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CString str=(char*)lParam;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CString strTemp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;GetDlgItemText(IDC_EDIT_RECV,strTemp);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;str+="\r\n";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;str+=strTemp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;SetDlgItemText(IDC_EDIT_RECV,str);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;(6)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;最后在&lt;/span&gt;DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;中调用&lt;/span&gt; ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;不能用&lt;/span&gt;SendMessage()&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;对发送按纽的响应代码：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChatDlg::OnBtnSend() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your control notification handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwIP;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))-&amp;gt;GetAddress(dwIP);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;SOCKADDR_IN addrTo;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;addrTo.sin_family=AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;addrTo.sin_port=htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;addrTo.sin_addr.S_un.S_addr=htonl(dwIP);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CString strSend;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;GetDlgItemText(IDC_EDIT_SEND,strSend);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sendto(m_socket,strSend,strSend.GetLength()+1,0,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;(SOCKADDR*)&amp;amp;addrTo,sizeof(SOCKADDR));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;SetDlgItemText(IDC_EDIT_SEND,"");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson 16 &lt;span style="font-family: 黑体"&gt;线程同步与异步套接字&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;事件对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;事件对象同上一课中的互斥对象一样属于内核对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它包含三个成员&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;使用读数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;用于指明该事件是一个自动重置的还是人工重置的事件的布尔值&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;用于指明该事件处于已通知状态还是未通知状态的布尔值&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当人工重置的事件对象得到通知时&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;等待该事件对象的所有纯种无变为可高度线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而一个自动重置的事件对象得到通知时&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;等待该事件对象的线程中人有一个变为可高度线程&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;所以一般使用线程同步时使用自动重置&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;创建事件对象&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;HANDLE CreateEvent(&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPSECURITY_ATTRIBUTES lpEventAttributes, // &lt;span style="font-family: 宋体"&gt;安全选项&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;默认为&lt;/span&gt;NULL&lt;/p&gt;&lt;p&gt;&amp;nbsp;BOOL bManualReset,&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reset type,TRUE(&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;人工&lt;/span&gt;),FALSE(&lt;span style="font-family: 宋体"&gt;自动&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;BOOL bInitialState,&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initial state,TRUE(&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;有信号状态&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPCTSTR lpName&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // object name.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;事件对象名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;BOOL SetEvent(HANDLE hEvent);&lt;span style="font-family: 宋体"&gt;把指定的事件对象设置为有信号状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL ReSetEvent(HANDLE hEvent);&lt;span style="font-family: 宋体"&gt;把指定的事件对象设置为无信号状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL CloseHandle(&amp;nbsp;HANDLE hObject );&amp;nbsp;// handle to object&lt;span style="font-family: 宋体"&gt;关闭事件对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;DWORD WaitForSingleObject(//&lt;span style="font-family: 宋体"&gt;请求内核对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;一旦得到事件对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;就进入代码中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;HANDLE hHandle,&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle to object&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwMilliseconds &lt;span&gt;&amp;nbsp;&amp;nbsp;// time-out interval&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;以下是一个模拟火车站售票的多线程程序&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;使用事件对象实现线程同步&lt;/span&gt;)&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;windows.h&amp;gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;加入头文件&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,Window API&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;#include &amp;lt;iostream.h&amp;gt;//C++&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;标准输入输出库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;int tickets = 100;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;共享的资源&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;火车票&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;HANDLE g_hEvent;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;全局的事件对象句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;线程处理函数原型声明&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Thread1Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Thread2Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void main(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建一个人工重置的匿名事件对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;当调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SetEvent&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;时所有的线程都可以执行&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;不能实现同步&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEvent(g_hEvent);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将事件对象设置为有信号状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_hEvent = CreateEvent(NULL, FALSE, FALSE, "tickets");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建一个自动重置的有名事件对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;当调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SetEvent&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;时只有一个线程可以执行&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEvent(g_hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;可以通过创建有名的事件对象来实现只有一个程序实例运行&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (g_hEvent)//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;有值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ERROR_ALREADY_EXISTS == GetLastError())//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;以事件对象存在为条件实现只有一个实例运行限制&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;因为事件对象是内核对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;由操作系统管理&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;因此可以在多个线程间访问&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "only one instance can run!" &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hThread1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hThread2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hThread1 = CreateThread(NULL, 0, Thread1Proc, NULL, 0, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hThread2 = CreateThread(NULL, 0, Thread2Proc, NULL, 0, NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(hThread1);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;释放线程句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(hThread2);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep(4000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(g_hEvent);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;注意最后释放事件对象句柄&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;在&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;MFC&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;中在类的析构函数中完成&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Thread1Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;其中的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SetEvent&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;函数应该在两个判断中都调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;以防止因条件不满足而造成对象不能被设置为有信息状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(TRUE){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WaitForSingleObject(g_hEvent, INFINITE);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;无限期等待事件对象为有信号状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (tickets &amp;gt; 0)//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;进入保护代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "Thread1 is selling tickets : " &amp;lt;&amp;lt; tickets-- &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEvent(g_hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果票已经售完&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;退出循环&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEvent(g_hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD WINAPI Thread2Proc(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID lpParameter&amp;nbsp;&amp;nbsp; // thread data&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(TRUE){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WaitForSingleObject(g_hEvent, INFINITE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;等待事件对象&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如果对象为有信号状态&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;可以请求该对象资源&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;并将其设置为无信息状态&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (tickets &amp;gt; 0)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "Thread2 is selling tickets : " &amp;lt;&amp;lt; tickets-- &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEvent(g_hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEvent(g_hEvent);//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;设置事件对象为有信号状态&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;综上&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;为实现线程间的同步&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不应该使用人工重置的事件对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而应该使用自动重置的事件对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;关键代码段&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;临界区&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;工作在用户方式下&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它是指一个小代码段&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;在代码能够执行前&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它必须独占对某些资源的访问权&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;通常把多线程访问同一种资源的那部分代码当作关键代码段&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;VOID InitializeCriticalSection(//&lt;span style="font-family: 宋体"&gt;初始化代码段&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPCRITICAL_SECTION lpCriticalSection&amp;nbsp;//[out] critical section,&lt;span style="font-family: 宋体"&gt;使用之前要构造&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;VOID EnterCriticalSection(//&lt;span style="font-family: 宋体"&gt;进入关键代码段&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;临界区&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPCRITICAL_SECTION lpCriticalSection&amp;nbsp;// critical section&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;VOID LeaveCriticalSection(//&lt;span style="font-family: 宋体"&gt;离开关键代码段&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;临界区&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPCRITICAL_SECTION lpCriticalSection&lt;span&gt;&amp;nbsp;&amp;nbsp; // critical section&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;VOID DeleteCriticalSection(//&lt;span style="font-family: 宋体"&gt;删除关键代码段&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;临界区&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPCRITICAL_SECTION lpCriticalSection&lt;span&gt;&amp;nbsp;&amp;nbsp; // critical section&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;种方法比较简单！但缺点是如果使用了多少关键代码码，容易赞成线程的死锁&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;使用两个或以上的临界区对象或互斥对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;造成线程&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;拥有了临界区对象&lt;/span&gt;A,&lt;span style="font-family: 宋体"&gt;等待临界区对象&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;的拥有权&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;线程&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;拥有了临界区对象&lt;/span&gt;B,&lt;span style="font-family: 宋体"&gt;等待临界区对象&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;的拥有权&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;形成死锁&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;程序无法执行下去&lt;/span&gt;!&lt;/p&gt;&lt;p&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;互斥对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;事件对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;关键代码段的比较&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;互斥对象和事件对象都属于内核对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;利用内核对象进行线程同步时&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;较慢&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;但利用互斥对象和事件对象这俗人内核对象&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;可以在多个进程中的各个纯种间进行同步&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;关键代码段工作在用户方式下&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;同步速度快&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;但很容易进入死锁状态&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因为在等待进入关键代码段时无法设定超时值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;基于消息的异步套接字编程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Windows&lt;span style="font-family: 宋体"&gt;套接字在两种模式下执行&lt;/span&gt;I/O&lt;span style="font-family: 宋体"&gt;操作&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;阻塞模式和非阻塞模式&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在阻塞模式下&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;I/O&lt;span style="font-family: 宋体"&gt;操作完成前&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;执行操作的&lt;/span&gt;Winsock&lt;span style="font-family: 宋体"&gt;函数会一直等待下去&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不会立即返回&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;也就是不地将控制权交还给程序&lt;/span&gt;),&lt;span style="font-family: 宋体"&gt;例如&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;程序中调用了&lt;/span&gt;recvfrom&lt;span style="font-family: 宋体"&gt;函数后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果这时网络上没有数据传送过来&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;该函数就会阻塞程序的执行&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;从而导致调用线程暂停运行&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;但不会阻塞主线程运行&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在非阻塞模式下&lt;/span&gt;,Winsock&lt;span style="font-family: 宋体"&gt;函数无论如何都会立即返回&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;在该函数执行的操作完成之后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;系统会采用某种方式将操作结果通知给调用线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;后者根据通知信息可以判断该操作是否正常完成&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;Windows Sockets&lt;span style="font-family: 宋体"&gt;采用了基于消息的异步存取策略以支持&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;的消息驱动机制&lt;/span&gt;,Windows Sockets&lt;span style="font-family: 宋体"&gt;的异步选择函数&lt;/span&gt;WSAAsyncSelect&lt;span style="font-family: 宋体"&gt;提供了消息机制的网络事件选择&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;当使用它登录的网络事件发生时&lt;/span&gt;,Windows&lt;span style="font-family: 宋体"&gt;应用程序相应的窗口函数将收到一个消息&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;指示发生的网络事件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;以及与该事件相关的一些信息&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;因此可针对不同的网络事件进行登录&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;一旦有数据到来&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;就会触发这个事件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;操作系统就会通过一个消息来通知调用线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;后者就可以在相应的消息响应函数中接收这个数据&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;因为是在该数据到来之后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;操作系统发出的通知&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;所以这时肯定能够接收这个数据&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;异步套接字能够有效的提高应用程序的性能&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#224;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一些主要函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;1&amp;gt;//&lt;span style="font-family: 宋体"&gt;为指定的套接字请求基于&lt;/span&gt;Windows&lt;span style="font-family: 宋体"&gt;消息的网络事件通知&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;自动设置为非阻塞模式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int WSAAsyncSelect(&lt;/p&gt;&lt;p&gt;&amp;nbsp;SOCKET s,&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;标识请求网络事件通知的套接字描述符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;HWND hWnd,&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;标识一个网络事件发生时接收消息的窗口的句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;unsigned int wMsg,&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;指定网络事件发生时窗口将接收到的消息&lt;/span&gt;,(&lt;span style="font-family: 宋体"&gt;自定义消息&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;long lEvent&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;指定网络事件类型&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;可以位或操作组合使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;lt;2&amp;gt; &lt;span style="font-family: 宋体"&gt;获得系统中安装的网络协议的相关信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int WSAEnumProtocols(&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPINT lpiProtocols,//[in]&lt;span style="font-family: 宋体"&gt;以&lt;/span&gt;NULL&lt;span style="font-family: 宋体"&gt;结尾的协议标识号数组&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;如果为&lt;/span&gt;NULL,&lt;span style="font-family: 宋体"&gt;返回可用信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSAPROTOCOL_INFO lpProtocolBuffer,//[out]&lt;span style="font-family: 宋体"&gt;存放指定的完整信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;ILPDWORD lpdwBufferLength//[in,out]&lt;span style="font-family: 宋体"&gt;输入时传递缓冲区长度&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;输出最小缓冲区长度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;lt;3&amp;gt;&lt;span style="font-family: 宋体"&gt;初始化进程使用的&lt;/span&gt;WS2_32.DLL&lt;/p&gt;&lt;p&gt;int WSAStartup(&lt;/p&gt;&lt;p&gt;&amp;nbsp;WORD wVersionRequested,//&lt;span style="font-family: 宋体"&gt;高位字节指定&lt;/span&gt;Winsock&lt;span style="font-family: 宋体"&gt;库的副版本&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;低位字节是主版本号&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSADATA lpWSAData//[out]&lt;span style="font-family: 宋体"&gt;用来接收&lt;/span&gt;Windows Sockets&lt;span style="font-family: 宋体"&gt;实现细节&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;lt;4&amp;gt; &lt;span style="font-family: 宋体"&gt;终止对套字库&lt;/span&gt;WS2_32.DLL&lt;span style="font-family: 宋体"&gt;的使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int&amp;nbsp;WSACleanup (void);&lt;/p&gt;&lt;p&gt;&amp;lt;5&amp;gt; Winsock&lt;span style="font-family: 宋体"&gt;库中的扩展函数&lt;/span&gt;WSASocket&lt;span style="font-family: 宋体"&gt;将创建套接字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SOCKET WSASocket(&lt;/p&gt;&lt;p&gt;&amp;nbsp;int af,//&lt;span style="font-family: 宋体"&gt;地址簇标识&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;int type,//socket&lt;span style="font-family: 宋体"&gt;类型&lt;/span&gt;SOCK_DGRAM&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;UDP&lt;/p&gt;&lt;p&gt;&amp;nbsp;int protocol,//&lt;span style="font-family: 宋体"&gt;协议簇&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSAPROTOCOL_INFO lpProtocolInfo,//&lt;span style="font-family: 宋体"&gt;定义创建套接字的特性&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果为&lt;/span&gt;NULL,&lt;span style="font-family: 宋体"&gt;则&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //WinSock2.Dll&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;使用前三个参数决定使用哪个服务提供者&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;GROUP g,//&lt;span style="font-family: 宋体"&gt;保留&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwFlags//&lt;span style="font-family: 宋体"&gt;指定套接字属性的描述&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果为&lt;/span&gt;WSA_FAG_OVERLAPPED&lt;span style="font-family: 宋体"&gt;则为一个重叠套接字&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;与文件中相似&lt;/span&gt;,&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;然后在套接字上调用&lt;/span&gt;WSASend, WSARecv,WSASendTo,WSARecvFrom,SWAIoctl&lt;span style="font-family: 宋体"&gt;这些函数都会立即返回&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;这些操作完成后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;操作系统会通过某种方式来通知调用线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;后者就可以根据通知信息判断操作是否完成&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;6&amp;gt; WSARecvFrom&lt;span style="font-family: 宋体"&gt;接收数据报类型的数据&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;并保存数据发送方的地址&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int WSARecvFrom(&lt;/p&gt;&lt;p&gt;&amp;nbsp;SOCKET s,//&lt;span style="font-family: 宋体"&gt;套接字描述符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSABUF lpBuffers,//&lt;span style="font-family: 宋体"&gt;指向&lt;/span&gt;WSABUF&lt;span style="font-family: 宋体"&gt;数据指针&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;一个成员缓冲区指针&lt;/span&gt;buf,&lt;span style="font-family: 宋体"&gt;另个长度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwBufferCount,//lpBuffers&lt;span style="font-family: 宋体"&gt;数组中&lt;/span&gt;WSABUF&lt;span style="font-family: 宋体"&gt;结构体的数上&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;一般为&lt;/span&gt;1&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPDWORD lpNumberOfBytesRecvd,//[out]&lt;span style="font-family: 宋体"&gt;接收完成后数据字节数指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPDWORD lpFlags,//[in/out]&lt;span style="font-family: 宋体"&gt;标志会影响函数行为&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;设置为&lt;/span&gt;0&lt;span style="font-family: 宋体"&gt;即可&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;struct sockaddr FAR *lpFrom,//[out]&lt;span style="font-family: 宋体"&gt;可选&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;指向重叠操作完成后存放源地址的缓冲区&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPINT lpFromlen,//[in/out]&lt;span style="font-family: 宋体"&gt;指定&lt;/span&gt;lpFrom&lt;span style="font-family: 宋体"&gt;缓冲区大小的指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSAOVERLAPPED lpOverlapped,//&lt;span style="font-family: 宋体"&gt;指向重叠套接字指针&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;非重叠忽略&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine//&lt;span style="font-family: 宋体"&gt;一个指定接收完成时调用的完成全程指针&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;非重叠套接字的忽略&lt;/span&gt;0&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果创建是重叠套接字&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;最后两个参数值要设置&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因为这时将会采用重叠&lt;/span&gt;I/O,&lt;span style="font-family: 宋体"&gt;函数会返回&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;当接收数据这一操作完成后&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;操作系统会调用&lt;/span&gt;lpCompletionRoutine&lt;span style="font-family: 宋体"&gt;参数指定的例程来通知调用线程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;这个例程就是一个回调函数&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&amp;lt;7&amp;gt;WSASendTo&lt;span style="font-family: 宋体"&gt;发送数据报类型的数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int WSASendTo(&lt;/p&gt;&lt;p&gt;&amp;nbsp;SOCKET s,//&lt;span style="font-family: 宋体"&gt;套接字描述符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSABUF lpBuffers,&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwBufferCount,&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPDWORD lpNumberOfBytesSent,&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD dwFlags,//0&lt;span style="font-family: 宋体"&gt;即可&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;const struct sockaddr FAR *lpTo,//&lt;span style="font-family: 宋体"&gt;可选指针&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;指向目标套接字的地址&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;int iToLen,//lpTo&lt;span style="font-family: 宋体"&gt;中地址长度&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSAOVERLAPPED lpOverlapped,&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一个网络聊天室程序的实现&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;新建工程基于对话框&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;工程名为&lt;/span&gt;Chat,&lt;span style="font-family: 宋体"&gt;并添加一些控件主要两个编辑&lt;/span&gt;,IP&lt;span style="font-family: 宋体"&gt;控件和发送按钮&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[1]&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;加载套接字库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;需要加载套接字库并进行版本协商&lt;/span&gt;,AfxSocketInit&lt;span style="font-family: 宋体"&gt;只能加载&lt;/span&gt;1.1&lt;span style="font-family: 宋体"&gt;版本的套接字库&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;本例使用&lt;/span&gt;WSAStartup&lt;span style="font-family: 宋体"&gt;加载系统安装可用版本&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatApp&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;initInstance&lt;span style="font-family: 宋体"&gt;函数加入&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;加载套接字库和进行版本的协商&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORD wVersionRequested;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSADATA wsaData;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int err;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wVersionRequested = MAKEWORD( 2, 2 );//2.2&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;版本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = WSAStartup( wVersionRequested, &amp;amp;wsaData );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( err != 0 ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup( );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;并在&lt;/span&gt;stdafx.h&lt;span style="font-family: 宋体"&gt;文件中加入头文件&lt;/span&gt;#include &amp;lt;winsock2.h&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[2]&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;创建并初始化套接字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg&lt;span style="font-family: 宋体"&gt;类增加一个&lt;/span&gt;SOCKET&lt;span style="font-family: 宋体"&gt;类型的成员变量&lt;/span&gt;,m_socket,&lt;span style="font-family: 宋体"&gt;高为私有&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;再添加一个&lt;/span&gt;BOOL&lt;span style="font-family: 宋体"&gt;类型的成员函数&lt;/span&gt;:InitSocket,&lt;span style="font-family: 宋体"&gt;初始化该类的套接字成员&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;BOOL CChatDlg::InitSocket()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用扩展函数创建套接字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_socket = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, NULL, 0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (INVALID_SOCKET == m_socket)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建套接字失败&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;要绑定套按字的本地址和协议簇&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;端口号&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrSock;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSock.sin_addr.S_un.S_addr = htonl(ADDR_ANY);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSock.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrSock.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;绑定套接字到本地套按地址上&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SOCKET_ERROR == bind(m_socket, (SOCKADDR*)&amp;amp;addrSock, sizeof(SOCKADDR))){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;绑定失败&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;调用&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;为网络事件定义消息！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;此时如果发生&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;FD_READ&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;网络事件，系统会发送&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;UM_SOCK(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;自定义&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息给应用程序！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;使用相应的消息响应函数来处理&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;程序并不会阻塞在这儿了！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SOCKET_ERROR == WSAAsyncSelect(m_socket, m_hWnd, UM_SOCK, FD_READ))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建网络事件消息处理失败&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;剩下的就是在相应的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;UM_SOCK&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;消息中进行处理了&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;注意的是&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;:&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;定义的消息要带参数&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,LPARAM&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;中的低字节是保存网络事件&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;如&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;FD_READ),&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;高字节保存错误信息&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;,WPARAM&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;保存是发生网络事件的&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;SOCKET&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;标识&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return TRUE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CChatDlg&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;类的&lt;/span&gt;OnInitDialog&lt;span style="font-family: 宋体"&gt;函数中调用这个函数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;完成套接字的初始化工作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[3]&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;实现接收端的功能&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg&lt;span style="font-family: 宋体"&gt;头文件中定义自定义的消息&lt;/span&gt;:UM_SOCK&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue"&gt;#define UM_SOCK WM_USER + 1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg&lt;span style="font-family: 宋体"&gt;头文件中添加&lt;/span&gt;UM_SOCK&lt;span style="font-family: 宋体"&gt;响应函数原型声明&lt;/span&gt;&lt;/p&gt;&lt;p&gt;protected:&lt;/p&gt;&lt;p&gt;HICON m_hIcon;&lt;/p&gt;&lt;p&gt;// Generated message map functions&lt;/p&gt;&lt;p&gt;//{{AFX_MSG(CChatDlg)&lt;/p&gt;&lt;p&gt;virtual BOOL OnInitDialog();&lt;/p&gt;&lt;p&gt;afx_msg void OnSysCommand(UINT nID, LPARAM lParam);&lt;/p&gt;&lt;p&gt;afx_msg void OnPaint();&lt;/p&gt;&lt;p&gt;afx_msg HCURSOR OnQueryDragIcon();&lt;/p&gt;&lt;p&gt;afx_msg void OnBtnSend();&lt;/p&gt;&lt;p&gt;//}}AFX_MSG&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;定义的消息要带参数&lt;/span&gt;&lt;span style="color: blue"&gt;,LPARAM&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;中的低字节是保存网络事件&lt;/span&gt;&lt;span style="color: blue"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;如&lt;/span&gt;&lt;span style="color: blue"&gt;FD_READ),&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;高字节保存错误信息&lt;/span&gt;&lt;span style="color: blue"&gt;,WPARAM&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;保存是发生网络事件的&lt;/span&gt;&lt;span style="color: blue"&gt;SOCKET&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;标识&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue"&gt;afx_msg void OnSock(WPARAM, LPARAM);//&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;自定义消息的响应函数原型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;DECLARE_MESSAGE_MAP()&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg&lt;span style="font-family: 宋体"&gt;类的源文件中添加&lt;/span&gt;UM_SOCK&lt;span style="font-family: 宋体"&gt;消息映射&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BEGIN_MESSAGE_MAP(CChatDlg, CDialog)&lt;/p&gt;&lt;p&gt;//{{AFX_MSG_MAP(CChatDlg)&lt;/p&gt;&lt;p&gt;ON_WM_SYSCOMMAND()&lt;/p&gt;&lt;p&gt;ON_WM_PAINT()&lt;/p&gt;&lt;p&gt;ON_WM_QUERYDRAGICON()&lt;/p&gt;&lt;p&gt;ON_BN_CLICKED(IDC_BTN_SEND, OnBtnSend)&lt;/p&gt;&lt;p&gt;//}}AFX_MSG_MAP&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue"&gt;ON_MESSAGE(UM_SOCK, OnSock)//&lt;/span&gt;&lt;span style="font-family: 宋体; color: blue"&gt;消息与其响应函数的映射&lt;/span&gt;&lt;/p&gt;&lt;p&gt;END_MESSAGE_MAP()&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消息响应函数的实现&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因为同时可以请求多个网络事件如&lt;/span&gt;FD_READ&lt;span style="font-family: 宋体"&gt;或&lt;/span&gt;RDWRITE&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;最好对所接受的消息进行判断后处理&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;本例中只有&lt;/span&gt;FD_READ,&lt;span style="font-family: 宋体"&gt;但仍判断处理&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;要注意是消息接收两个参数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;低字节是保存网络事件&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;如&lt;/span&gt;FD_READ),&lt;span style="font-family: 宋体"&gt;高字节保存错误信息&lt;/span&gt;,WPARAM&lt;span style="font-family: 宋体"&gt;保存是发生网络事件的&lt;/span&gt;SOCKET&lt;span style="font-family: 宋体"&gt;标识&lt;/span&gt;.&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;自定义消息响应函数的定义&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChatDlg::OnSock(WPARAM wParam, LPARAM lParam){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (LOBYTE(lParam))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case FD_READ://&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;发生是网络读取事件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSABUF wsaBuf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char recvBuf[200];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wsaBuf.buf = recvBuf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wsaBuf.len = 200;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwFlag = 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrFrom;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = sizeof(SOCKADDR);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SOCKET_ERROR == WSARecvFrom(m_socket, &amp;amp;wsaBuf, 1, &amp;amp;dwRead, &amp;amp;dwFlag, (SOCKADDR*)&amp;amp;addrFrom, &amp;amp;len, NULL, NULL)){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;接收网络数据失败&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;!");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CString strRecv;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CString strTemp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strRecv.Format("%s &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;说&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;: %s", inet_ntoa(addrFrom.sin_addr), recvBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItemText(IDC_EDIT_RECV, strTemp);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strRecv += "\r\n";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strRecv += strTemp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDlgItemText(IDC_EDIT_RECV, str);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[4]&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;发送端按钮的实现&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChatDlg::OnBtnSend() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your control notification handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD ip;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSABUF wsaBuf;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKADDR_IN addrTo;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CString strSend;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwSend;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))-&amp;gt;GetAddress(ip);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrTo.sin_addr.S_un.S_addr = htonl(ip);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrTo.sin_family = AF_INET;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrTo.sin_port = htons(6000);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDlgItemText(IDC_EDIT_SEND, strSend); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strSend.GetLength();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wsaBuf.buf = strSend.GetBuffer(len);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wsaBuf.len = len + 1;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDlgItemText(IDC_EDIT_SEND, "");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;发送数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SOCKET_ERROR==WSASendTo(m_socket,&amp;amp;wsaBuf,1,&amp;amp;dwSend,0,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SOCKADDR*)&amp;amp;addrTo,sizeof(SOCKADDR),NULL,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;发送数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[5]&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;终止套接字库的使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;为&lt;/span&gt;CChatApp&lt;span style="font-family: 宋体"&gt;类增加一个析构函数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;主要是在此函数中调用&lt;/span&gt;WSACleanup&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;终止对套接字库的使用&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CChatApp::~CChatApp()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSACleanup();//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;释放套接字&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[6]&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CChatDlg&lt;span style="font-family: 宋体"&gt;类中关闭套接字&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;添加一个析构函数&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;首先判断是否该套接字库有值&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如果有的话关闭套接字&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CChatDlg::~CChatDlg(){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closesocket(m_socket);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;利用主机名实现网络访问&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct hostent FAR *gethostbyname(&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char FAR *name&amp;nbsp;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;从主机名中获取&lt;/span&gt;IP&lt;span style="font-family: 宋体"&gt;地址&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;Hostent&lt;span style="font-family: 宋体"&gt;结构体&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;struct hostent {&lt;/p&gt;&lt;p&gt;&amp;nbsp;char FAR *&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h_name;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;char FAR * FAR * h_aliases;&lt;/p&gt;&lt;p&gt;&amp;nbsp;short&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h_addrtype;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;short&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h_length;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;char FAR * FAR * h_addr_list;//&lt;span style="font-family: 宋体"&gt;空中止的&lt;/span&gt;IP&lt;span style="font-family: 宋体"&gt;地址列表&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;是一个&lt;/span&gt;char*&lt;span style="font-family: 宋体"&gt;字符数组&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;因为一个&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;主机可能有多个&lt;/span&gt;IP,&lt;span style="font-family: 宋体"&gt;选择第一个即可&lt;/span&gt;&lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;由主机&lt;/span&gt;IP&lt;span style="font-family: 宋体"&gt;转换成主机名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;struct HOSTENT FAR * gethostbyaddr(&lt;/p&gt;&lt;p&gt;&amp;nbsp;const char FAR *addr,//&lt;span style="font-family: 宋体"&gt;指向网络字节序表示的&lt;/span&gt;IP&lt;span style="font-family: 宋体"&gt;地址指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;int len,//&lt;span style="font-family: 宋体"&gt;地址长度&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;对于&lt;/span&gt;AF_INET&lt;span style="font-family: 宋体"&gt;必须为&lt;/span&gt;4&lt;/p&gt;&lt;p&gt;&amp;nbsp;int type//&lt;span style="font-family: 宋体"&gt;类型&lt;/span&gt;AF_INET&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接收方部分代码可改为&lt;/span&gt;;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;HOSTENT *pHost;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;pHost = gethostbyadd((char*)&amp;amp;addrFrom.sin_addr.S_un.S_addr, 4, AF_INET);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;str.Format(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;%s&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;说&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;:%s&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;, pHost-&amp;gt;h_name, wsabuf.buf);&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson17&lt;span style="font-family: 黑体"&gt;进程间通信&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;有四种方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;剪贴板&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;创建个&lt;/span&gt;ClipBoard&lt;span style="font-family: 宋体"&gt;的对话框应用程序，加两&lt;/span&gt;EditBox&lt;span style="font-family: 宋体"&gt;和两个&lt;/span&gt;Button&lt;span style="font-family: 宋体"&gt;发送接收。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;具体代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;发送端代码：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(OpenClipboard())&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CString str;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;HANDLE hClip;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;char *pBuf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;EmptyClipboard();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;GetDlgItemText(IDC_EDIT_SEND,str);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;pBuf=(char*)GlobalLock(hClip);&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将句柄转换为指针！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;strcpy(pBuf,str);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;GlobalUnlock(hClip);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;SetClipboardData(CF_TEXT,hClip);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseClipboard();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;接收端代码：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(OpenClipboard())&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;if(IsClipboardFormatAvailable(CF_TEXT))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; HANDLE hClip;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; char *pBuf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; hClip=GetClipboardData(CF_TEXT);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; pBuf=(char*)GlobalLock(hClip);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; GlobalUnlock(hClip);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; SetDlgItemText(IDC_EDIT_RECV,pBuf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; CloseClipboard();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;匿名管道：只能在父子进程之间进行通信&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;先建一个&lt;/span&gt;Parent&lt;span style="font-family: 宋体"&gt;的单文档应用程序，增加&amp;#8220;创建管道&amp;#8221;&amp;#8220;读取数据&amp;#8221;&amp;#8220;写入数据&amp;#8221;三个菜单&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;增加成员变量&lt;/span&gt;HANDLE&lt;span style="font-family: 宋体"&gt;类型的&lt;/span&gt;hRead,hWrite&lt;span style="font-family: 宋体"&gt;，初始化变量，并在析构函数中释放句柄&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;响应菜单代码：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CParentView::OnPipeCreate() &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;菜单&amp;#8220;创建管道&amp;#8221;代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;SECURITY_ATTRIBUTES sa;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sa.bInheritHandle=TRUE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sa.lpSecurityDescriptor=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sa.nLength=sizeof(SECURITY_ATTRIBUTES);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!CreatePipe(&amp;amp;hRead,&amp;amp;hWrite,&amp;amp;sa,0))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建匿名管道失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;STARTUPINFO sui;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;PROCESS_INFORMATION pi;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;ZeroMemory(&amp;amp;sui,sizeof(STARTUPINFO));&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;将数据清&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sui.cb=sizeof(STARTUPINFO);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sui.dwFlags=STARTF_USESTDHANDLES;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sui.hStdInput=hRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sui.hStdOutput=hWrite;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!CreateProcess("..\\Child\\Debug\\Child.exe",NULL,NULL,NULL,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; TRUE,0,NULL,NULL,&amp;amp;sui,&amp;amp;pi))&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建子进程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hRead);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hWrite);&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;关闭句柄，将内核对象的使用计数减少&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;，这样当操作系统发现内核对象的使用计数为&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;时，将清除内核对象。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hRead=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hWrite=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建子进程失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;else&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(pi.hProcess);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(pi.hThread);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;菜单&amp;#8220;读取数据&amp;#8221;代码&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CParentView::OnPipeRead()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!ReadFile(hRead,buf,100,&amp;amp;dwRead,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;读取数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;MessageBox(buf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CParentView::OnPipeWrite() &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;菜单&amp;#8220;写入数据&amp;#8221;代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[]="http://www.sunxin.org";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwWrite;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!WriteFile(hWrite,buf,strlen(buf)+1,&amp;amp;dwWrite,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;再建一个&lt;/span&gt;Child&lt;span style="font-family: 宋体"&gt;的单文档，在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中增加两个成员&lt;/span&gt;hRead&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;hWrite.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnInitialUpdate()&lt;span style="font-family: 宋体"&gt;中得到句柄的值。&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChildView::OnInitialUpdate() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CView::OnInitialUpdate();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your specialized code here and/or call the base class&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hRead=GetStdHandle(STD_INPUT_HANDLE);&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;注意这句代码！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hWrite=GetStdHandle(STD_OUTPUT_HANDLE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;加菜单&amp;#8220;读取数据&amp;#8221;&amp;#8220;写入数据&amp;#8221;其代码如下：&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChildView::OnPipeRead() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!ReadFile(hRead,buf,100,&amp;amp;dwRead,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;读取数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;MessageBox(buf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CChildView::OnPipeWrite() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[]="&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;匿名管道测试程序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwWrite;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!WriteFile(hWrite,buf,strlen(buf)+1,&amp;amp;dwWrite,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;命名管道：还可以跨网络通信，服务器只能在&lt;/span&gt;win2000&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;NT&lt;span style="font-family: 宋体"&gt;下运行！而客户端可以在&lt;/span&gt;95&lt;span style="font-family: 宋体"&gt;下运行。关键函数&lt;/span&gt;CreateNamedPipe&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;先建一个&lt;/span&gt;NamedPipeSRV&lt;span style="font-family: 宋体"&gt;单文档应用程序，加菜单&amp;#8220;创建管道&amp;#8221;&amp;#8220;读取数据&amp;#8221;&amp;#8220;写入数据&amp;#8221;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;中增加&lt;/span&gt;Handle&lt;span style="font-family: 宋体"&gt;变量&lt;/span&gt;hPipe&lt;span style="font-family: 宋体"&gt;，注意在析构函数中释放它！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;c.&lt;span style="font-family: 宋体"&gt;响应菜单，创建命名管道&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CNamedPipeSrvView::OnPipeCreate() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hPipe=CreateNamedPipe("\\\\.\\pipe\\MyPipe",&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;0,1,1024,1024,0,NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(INVALID_HANDLE_VALUE==hPipe)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建命名管道失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hPipe=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;HANDLE hEvent;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!hEvent)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建事件对象失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hPipe);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hPipe=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;OVERLAPPED ovlap;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;ZeroMemory(&amp;amp;ovlap,sizeof(OVERLAPPED));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;ovlap.hEvent=hEvent;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!ConnectNamedPipe(hPipe,&amp;amp;ovlap))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;if(ERROR_IO_PENDING!=GetLastError())&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;等待客户端连接失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; CloseHandle(hPipe);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; CloseHandle(hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; hPipe=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(WAIT_FAILED==WaitForSingleObject(hEvent,INFINITE))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;等待对象失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hPipe);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hPipe=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CloseHandle(hEvent);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CNamedPipeSrvView::OnPipeRead() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!ReadFile(hPipe,buf,100,&amp;amp;dwRead,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;读取数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;MessageBox(buf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CNamedPipeSrvView::OnPipeWrite() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[]="http://www.sunxin.org";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwWrite;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!WriteFile(hPipe,buf,strlen(buf)+1,&amp;amp;dwWrite,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;再建一个&lt;/span&gt;NamedPipeCLT&lt;span style="font-family: 宋体"&gt;单文档工程，加菜单&amp;#8220;连接管道&amp;#8221;&amp;#8220;读取数据&amp;#8221;&amp;#8220;写入数据&amp;#8221;，当然别忘记成员变量&lt;/span&gt;hPipe&lt;span style="font-family: 宋体"&gt;的定义和初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;响应菜单代码&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CNamedPipeCltView::OnPipeConnect() &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;连接管道&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!WaitNamedPipe("\\\\.\\pipe\\MyPipe",NMPWAIT_WAIT_FOREVER))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;当前没有可利用的命名管道实例！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hPipe=CreateFile("\\\\.\\pipe\\MyPipe",GENERIC_READ | GENERIC_WRITE,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(INVALID_HANDLE_VALUE==hPipe)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;打开命名管道失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;hPipe=NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CNamedPipeCltView::OnPipeRead() &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;读取数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!ReadFile(hPipe,buf,100,&amp;amp;dwRead,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;读取数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;MessageBox(buf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CNamedPipeCltView::OnPipeWrite() &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[]="&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;命名管道测试程序&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwWrite;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!WriteFile(hPipe,buf,strlen(buf)+1,&amp;amp;dwWrite,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;邮槽，使用时应将消息长度限制在&lt;/span&gt;424&lt;span style="font-family: 宋体"&gt;字节以下，关键函数&lt;/span&gt;CreateMailSlot()&lt;/p&gt;&lt;p&gt;&amp;nbsp;a.&lt;span style="font-family: 宋体"&gt;先建一个&lt;/span&gt;MailSlotSRV&lt;span style="font-family: 宋体"&gt;工程，加菜单&amp;#8220;接收数据&amp;#8221;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;b.&lt;span style="font-family: 宋体"&gt;消息响应代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;菜单&amp;#8220;接收数据&amp;#8221;的代码&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CMailslotSrvView::OnMailslotRecv()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;HANDLE hMailslot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hMailslot=CreateMailslot("\\\\.\\mailslot\\MyMailslot",0,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MAILSLOT_WAIT_FOREVER,NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(INVALID_HANDLE_VALUE==hMailslot)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;创建油槽失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[100];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwRead;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!ReadFile(hMailslot,buf,100,&amp;amp;dwRead,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;读取数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hMailslot);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;MessageBox(buf);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CloseHandle(hMailslot);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;加工程&lt;/span&gt;MailSlotCLT,&lt;span style="font-family: 宋体"&gt;加菜单&amp;#8220;发送数据&amp;#8221;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;d.&lt;span style="font-family: 宋体"&gt;加消息响应，添加代码，客户端也比较简单。&lt;/span&gt;&lt;/p&gt;&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse;background: #cace32; margin-left: 23.4pt; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 402.7pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="537"&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;void CMailslotCltView::OnMailslotSend() &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;菜单&amp;#8220;发送数据&amp;#8221;的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;// TOD Add your command handler code here&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;HANDLE hMailslot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;hMailslot=CreateFile("\\\\.\\mailslot\\MyMailslot",GENERIC_WRITE,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(INVALID_HANDLE_VALUE==hMailslot)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;打开油槽失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;char buf[]="http://www.sunxin.org";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;DWORD dwWrite;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;if(!WriteFile(hMailslot,buf,strlen(buf)+1,&amp;amp;dwWrite,NULL))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;MessageBox("&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9pt"&gt;写入数据失败！&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;CloseHandle(hMailslot);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;CloseHandle(hMailslot);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5.&lt;span style="font-family: 宋体"&gt;以上&lt;/span&gt;4&lt;span style="font-family: 宋体"&gt;种方法各有优缺点：剪贴板比较简单。邮槽是基于广播的，可以一对多发送。但只能一个发送，一个接收，要想同时发送接收，须写两次代码。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;命名管道和邮槽可以进行网络通信。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson18 Active&lt;span style="font-family: 黑体"&gt;控件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;容器和服务器程序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;容器应用程序时可以嵌入或链接对象的应用程序。&lt;/span&gt;Word&lt;span style="font-family: 宋体"&gt;就是容器应用程序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;服务器应用程序是创建对象并且当对象被双击时，可以被启动的应用程序。&lt;/span&gt;Excel&lt;span style="font-family: 宋体"&gt;就是服务器应用程序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;ActiveX&lt;span style="font-family: 宋体"&gt;控件不能独立运行，它必须被嵌入容器应用程序中，和容器应用程序一起运行。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Dispatch maps&lt;span style="font-family: 宋体"&gt;调度映射，主要是&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;提供让外部应用程序可以访问控件的属性和方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Event maps&lt;span style="font-family: 宋体"&gt;事件映射，控件向包含它的容器发送事件通知&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接口是外部程序和控件进行通信的协议，可以把接口看作是函数的集合，外部程序通过借口提供的方法，去访问控件的属性和方法。接口中所定义的所有函数都是纯虚函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;regsvr32 ...&lt;span style="font-family: 宋体"&gt;注册控件&lt;/span&gt;&amp;nbsp;regsvr32 /u....&lt;span style="font-family: 宋体"&gt;卸载控件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;STDAPI DllRegisterServer(void)&lt;span style="font-family: 宋体"&gt;将控件信息写入注册表中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;STDAPI DllUnregisterServer(void)&lt;span style="font-family: 宋体"&gt;卸载注册信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;制作一个时间控件，在&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CClockCtrl::OnDraw(CDC* pdc, const CRect&amp;amp; rcBounds,&lt;/p&gt;&lt;p&gt;&amp;nbsp;const CRect&amp;amp; rcInvalid)&lt;span style="font-family: 宋体"&gt;中添加以下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;CBrush brush(TranslateColor(GetBackColor()));&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;FillRect(rcBounds,&amp;amp;brush);&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;SetBkMode(TRANSPARENT);&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;SetTextColor(TranslateColor(GetForeColor()));&lt;/p&gt;&lt;p&gt;&amp;nbsp;//&lt;span style="font-family: 宋体"&gt;为控件设置属性，必须在&lt;/span&gt;MFC ClassWizared&lt;span style="font-family: 宋体"&gt;中为控件添加属性，上面几&lt;/span&gt; //&lt;span style="font-family: 宋体"&gt;行代码才有用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;CTime time=CTime::GetCurrentTime();&lt;/p&gt;&lt;p&gt;&amp;nbsp;CString str=time.Format("%H : %M : %S");&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;TextOut(0,0,str);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这样就能做出一个静态的时间控件，如果我们想使控件实时显示时间，需要添加两个消息响应函数&lt;/span&gt;&amp;nbsp;WM_CREATE,WM_TIMER.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int CClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;if (COleControl::OnCreate(lpCreateStruct) == -1)&lt;/p&gt;&lt;p&gt;&amp;nbsp;return -1;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;// TODO:&amp;nbsp;&lt;span style="font-family: 宋体"&gt;在此添加您专用的创建代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;SetTimer(1,1000,NULL); &lt;/p&gt;&lt;p&gt;&amp;nbsp;return 0;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void CClockCtrl::OnTimer(UINT nIDEvent)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;// TODO: &lt;span style="font-family: 宋体"&gt;在此添加消息处理程序代码和&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;或调用默认值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Invalidate();&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;立即引起窗口重绘&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;也可以使用&lt;/span&gt;InvalidateControl();&amp;nbsp;//&lt;span style="font-family: 宋体"&gt;强制窗口重绘，效果相同&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;COleControl::OnTimer(nIDEvent);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要修改控件的背景色前景色和字体颜色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnDraw&lt;span style="font-family: 宋体"&gt;中添加&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;CBrush brush(TranslateColor(GetBackColor()));&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;FillRect(rcBounds,&amp;amp;brush);&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;SetBkMode(TRANSPARENT);&lt;/p&gt;&lt;p&gt;&amp;nbsp;pdc-&amp;gt;SetTextColor(TranslateColor(GetForeColor()));&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ActiveX&lt;span style="font-family: 宋体"&gt;控件的四种属性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Stock&lt;span style="font-family: 宋体"&gt;：为每个控件提供的标准属性，如字体或颜色。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Ambient&lt;span style="font-family: 宋体"&gt;：围绕控件的环境属性&amp;#8212;&amp;#8212;已被置入容器的属性。这些属性不能被修改，但控件可以使用它们调整自己的属性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Extended&lt;span style="font-family: 宋体"&gt;：这些是由容器处理的属性，一般包括大小和在屏幕上的位置。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Custom&lt;span style="font-family: 宋体"&gt;：由控件开发者添加的属性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;使控件具有多于一个属性页&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;首先在&lt;/span&gt;**ctl.cpp&lt;span style="font-family: 宋体"&gt;中找到&lt;/span&gt;Property Pages&lt;span style="font-family: 宋体"&gt;，代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BEGIN_PROPPAGEIDS(CClockCtrl, 2)&lt;/p&gt;&lt;p&gt;&amp;nbsp;PROPPAGEID(CClockPropPage::guid)&lt;/p&gt;&lt;p&gt;&amp;nbsp;PROPPAGEID(CLSID_CColorPropPage)&lt;/p&gt;&lt;p&gt;END_PROPPAGEIDS(CClockCtrl)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;需要注意的是要显示几个属性页&lt;/span&gt;BEGIN_PROPPAGEIDS(CClockCtrl, 2)&lt;span style="font-family: 宋体"&gt;中的代码为几，如果没有修改或修改错误，会产生不可预料错误。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要增加标准属性，在&lt;/span&gt;_DClock&lt;span style="font-family: 宋体"&gt;上点击右键，选择增加属性，选中&lt;/span&gt;Stock&lt;span style="font-family: 宋体"&gt;，例如选择背景色和前景色&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来会在&lt;/span&gt;Clock.odl&lt;span style="font-family: 宋体"&gt;下生成以下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;dispinterface _DClock&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;properties:&lt;/p&gt;&lt;p&gt;&amp;nbsp;[id(DISPID_BACKCOLOR), helpstring("&lt;span style="font-family: 宋体"&gt;属性&lt;/span&gt; BackColor")] OLE_COLOR BackColor;&lt;/p&gt;&lt;p&gt;&amp;nbsp;[id(DISPID_FORECOLOR), helpstring("&lt;span style="font-family: 宋体"&gt;属性&lt;/span&gt; ForeColor")] OLE_COLOR ForeColor;&lt;/p&gt;&lt;p&gt;methods:&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; [id(DISPID_ABOUTBOX)] void AboutBox();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;};&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来新增自定义属性，方法同上，只是需选中&amp;#8220;成员变量&amp;#8221;或&amp;#8220;&lt;/span&gt;get/put&lt;span style="font-family: 宋体"&gt;&amp;#8221;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;会自动生成成员变量：&lt;/span&gt;m_Interval&lt;span style="font-family: 宋体"&gt;，和成员函数&lt;/span&gt;OnIntervalChanged&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来添加代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CClockCtrl::OnIntervalChanged(void)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;AFX_MANAGE_STATE(AfxGetStaticModuleState());&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;// TODO: &lt;span style="font-family: 宋体"&gt;在此添加属性处理程序代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if(m_Interval&amp;lt;0 || m_Interval&amp;gt;6000)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;m_Interval=2000;&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;KillTimer(1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;SetTimer(1,m_Interval/1000*1000,NULL);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;SetModifiedFlag();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;测试：运行&lt;/span&gt;ActiveX&lt;span style="font-family: 宋体"&gt;测试器，选择&lt;/span&gt;control---&lt;span style="font-family: 宋体"&gt;〉&lt;/span&gt;Invoke Methods&lt;span style="font-family: 宋体"&gt;对&lt;/span&gt;m_Interval&lt;span style="font-family: 宋体"&gt;进行修改。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;为编辑框增加成员变量&lt;/span&gt;MFC ClassWizard--&amp;gt;Member Variables--&amp;gt;Add Member Variable--&amp;gt;&lt;/p&gt;&lt;p&gt;Optional&amp;nbsp;property&amp;nbsp;name:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;选择自定义属性的外部名，这样我们不需要增加代码就能把控件和自定义属性相关联。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;void CClockPropPage::DoDataExchange(CDataExchange* pDX)&lt;span style="font-family: 宋体"&gt;中会生成下面代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DDP_Text(pDX, ID_EDIT_INTERVAL, m_updateInterval, _T("Interval") );&lt;/p&gt;&lt;p&gt;&amp;nbsp;DDX_Text(pDX, ID_EDIT_INTERVAL, m_updateInterval);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;.NET2003&lt;span style="font-family: 宋体"&gt;下我始终找不到&amp;#8220;&lt;/span&gt;Optional&amp;nbsp;property&amp;nbsp;name:&lt;span style="font-family: 宋体"&gt;&amp;#8221;在哪，所以在我属性页上的编辑框无效，我只能选择&lt;/span&gt;control---&lt;span style="font-family: 宋体"&gt;〉&lt;/span&gt;Invoke Methods&lt;span style="font-family: 宋体"&gt;进行修改。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;为控件增加函数，&lt;/span&gt;MFC ClassWizard--&amp;gt;Member Variables--&amp;gt;Add Method&lt;/p&gt;&lt;p&gt;Class Name&lt;span style="font-family: 宋体"&gt;要选择&lt;/span&gt;CClockCtrl&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;输入函数名，之后就可以在&lt;/span&gt;CClockCtrl&lt;span style="font-family: 宋体"&gt;类中找到了&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;我们选择&lt;/span&gt;MFC ClassWizard--&amp;gt;ActiveX Events---&amp;gt;Add Event&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;之后会在&lt;/span&gt;DClockEvents&lt;span style="font-family: 宋体"&gt;中增加一个事件，&lt;/span&gt;DClockEvents&lt;span style="font-family: 宋体"&gt;接口是源接口，控件将用这个接口发送通知事件，它不是控件本身实现的接口，这个接口是通过容器来实现的&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果要将自定义的控件属性保存下来，需要在&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CClockCtrl::DoPropExchange(CPropExchange* pPX)&lt;span style="font-family: 宋体"&gt;加入如下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;PX_Short(pPX,"Interval",m_interval,1000);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;之后再在程序中修改代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;PX_Short(pPX,"Interval",m_interval,1000);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果想使自定义控件属性实时地显示在容器属性列表中，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;void CClockCtrl::OnIntervalChanged() &lt;span style="font-family: 宋体"&gt;中加入如下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;BoundPropertyChanged(0x1);&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;调度代码为&lt;/span&gt;1&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果希望用户在设计模式时时钟控件停止运行，而在用户模式下运行，可以&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;void CClockCtrl::OnTimer(UINT nIDEvent)&lt;span style="font-family: 宋体"&gt;下修改代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if(AmbientUserMode())&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;查询环境属性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;InvalidateControl();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson19 &lt;span style="font-family: 黑体"&gt;动态链接库DLL&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Windows API&lt;span style="font-family: 宋体"&gt;中的所有函数都包含在&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;中。其中有三个最重要的&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;Kernel32.dll,&lt;span style="font-family: 宋体"&gt;它包含用于管理内存、进程和线程的各个函数；&lt;/span&gt;User32.dll&lt;span style="font-family: 宋体"&gt;，它包含用于执行用户界面任务（如窗口的创建和消息的传送）的各个函数；&lt;/span&gt;GDI32.dll&lt;span style="font-family: 宋体"&gt;，它包含用于画图和显示文本的各个函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;静态库和动态库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;静态库：函数和数据被编译进一个二进制文件（通常扩展名为&lt;/span&gt;.LIB&lt;span style="font-family: 宋体"&gt;）。在使用静态库的情况下，在编译链接可执行文件时，链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件（&lt;/span&gt;.EXE&lt;span style="font-family: 宋体"&gt;文件）；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在使用动态库的时候，往往提供两个文件：一个因入库和一个&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;。因入库包含被&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;导出的函数和变量的符号名，&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;包含实际的函数和数据。在编译链接可执行文件时，只需要链接引入库，&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;中的函数代码和数据并不复制到可执行文件中，在运行时候，再去加载&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;，访问&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;中导出的函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;使用动态链接库的好处&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可以采用多种编程语言来编写。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;增强产品的功能。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;提供二次开发的平台。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;简化项目管理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可以节省磁盘空间和内存。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;有助于资源的共享。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;有助于实现应用程序的本地化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;建立&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;文件代码如下&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;_declspec(dllexport) int Add(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;return x+y;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;_declspec(dllexport) int Subtract(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;return x-y;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;必须带&lt;/span&gt;_declspec(dllexport)&lt;span style="font-family: 宋体"&gt;文件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;以生成&lt;/span&gt;*.lib&lt;span style="font-family: 宋体"&gt;文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果要查找&lt;/span&gt;*dll&lt;span style="font-family: 宋体"&gt;中包含信息，可在命令行下进入&lt;/span&gt;Debug&lt;span style="font-family: 宋体"&gt;所在目录，输入以下命令&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dumpbin -exports dll.dll&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;有些时候由于某种安装原因，&lt;/span&gt;dumpbin&lt;span style="font-family: 宋体"&gt;被认为是无效命令，接下来在&lt;/span&gt;&lt;/p&gt;&lt;p&gt;C:\Program Files\Microsoft Visual Studio\VC98\Bin\&lt;span style="font-family: 宋体"&gt;下找到&lt;/span&gt;VCVARS32.bat&lt;span style="font-family: 宋体"&gt;并在命令行运行，之后就能执行&lt;/span&gt;dumpbin&lt;span style="font-family: 宋体"&gt;命令了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;新建&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;程序，新建两个按钮，代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void CDllTestDlg::OnBtnAdd()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;// TODO: Add your control notification handler code here&lt;/p&gt;&lt;p&gt;&amp;nbsp;CString str;&lt;/p&gt;&lt;p&gt;&amp;nbsp;str.Format("3+5=&amp;amp;d",Add(3,5));&lt;/p&gt;&lt;p&gt;&amp;nbsp;MessageBox(str);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void CDllTestDlg::OnBtnSubtract()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;// TODO: Add your control notification handler code here&lt;/p&gt;&lt;p&gt;&amp;nbsp;CString str;&lt;/p&gt;&lt;p&gt;&amp;nbsp;str.Format("5-3=%d",Subtract(5,3));&lt;/p&gt;&lt;p&gt;&amp;nbsp;MessageBox(str);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;为使编译器认识&lt;/span&gt;Add&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;Subtract&lt;span style="font-family: 宋体"&gt;，必须在之前使用两个声明：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;extern int Add(int x,int y);&lt;/p&gt;&lt;p&gt;extern int Subtract(int x,int y);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可以使用标示符表示这两个函数是从动态链接库的&lt;/span&gt;.lib&lt;span style="font-family: 宋体"&gt;文件引用的，以生成效率更高的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;_declspec(dllimport) int Add(int x,int y);&lt;/p&gt;&lt;p&gt;_declspec(dllimport) int Subtract(int x,int y);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这两段代码我们也可以在&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;中新建一个头文件放进去，并在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;程序中添加头文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如&lt;/span&gt;#include "..\Dll\Dll.h"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;从原先&lt;/span&gt;Dll&lt;span style="font-family: 宋体"&gt;文件下&lt;/span&gt;Debug&lt;span style="font-family: 宋体"&gt;目录中复制&lt;/span&gt;*.lib&lt;span style="font-family: 宋体"&gt;到&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;程序文件夹下，并添加库函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;project---&amp;gt;setting---&amp;gt;link---&amp;gt;Object/Library Modules&lt;span style="font-family: 宋体"&gt;写下所复制的文件名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果要查看&lt;/span&gt;DllTest.exe&lt;span style="font-family: 宋体"&gt;文件信息，使用命令行&lt;/span&gt;dumpbin -imports dlltest.exe&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;修改动态链接库&lt;/span&gt;Dll.h&lt;/p&gt;&lt;p&gt;#ifdef DLL_API&lt;/p&gt;&lt;p&gt;#else&lt;/p&gt;&lt;p&gt;#define DLL_API _declspec(dllimport)&lt;/p&gt;&lt;p&gt;#endif&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;DLL_API int Add(int x,int y);&lt;/p&gt;&lt;p&gt;DLL_API int Subtract(int x,int y);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;修改&lt;/span&gt;Dll.cpp&lt;span style="font-family: 宋体"&gt;文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;#define DLL_API _declspec(dllexport)&lt;/p&gt;&lt;p&gt;#include "Dll.h"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;int Add(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;return x+y;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;int Subtract(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;return x-y;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这样做是为了方便外部程序调用同时方便内部程序使用，因为动态链接库中只有导出的函数才可以被使用，没有导出的函数在外部是看不到的，是不能被访问的&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来导出整个类，代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;class DLL_API point&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;public:&lt;/p&gt;&lt;p&gt;&amp;nbsp;void output(int x,int y);&amp;nbsp;//&lt;span style="font-family: 宋体"&gt;如果只想导出一个函数，可把上边的&lt;/span&gt;DLL_API&lt;span style="font-family: 宋体"&gt;剪切&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;然后放到&lt;/span&gt;void output(int x,int y);&lt;span style="font-family: 宋体"&gt;前边，虽然累没有被&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;导出，但访问仍没有区别&lt;/span&gt;&lt;/p&gt;&lt;p&gt;};&lt;span style="font-family: 宋体"&gt;仍然受制于访问权限&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;实现：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;void Point::output(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;HWND hwnd=GetForegroundWindow();&lt;/p&gt;&lt;p&gt;&amp;nbsp;HDC hdc=GetDC(hwnd);&lt;/p&gt;&lt;p&gt;&amp;nbsp;char buf[20];&lt;/p&gt;&lt;p&gt;&amp;nbsp;memset(buf,0,20);&lt;/p&gt;&lt;p&gt;&amp;nbsp;sprintf(buf,"x=%d,y=%d",x,y);&lt;/p&gt;&lt;p&gt;&amp;nbsp;TextOut(hdc,x,y,buf,strlen(buf));&lt;/p&gt;&lt;p&gt;&amp;nbsp;ReleaseDC(hwnd,hdc);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;程序新建一个按钮，调用动态链接库函数，代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Point pt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;pt.output(100,200); &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;因为&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;导出或导入动态链接库会发生名字的改编，如果不想发生名字改编，我们可以使用如下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;#define DLL_API&amp;nbsp;extern "c" _declspec(dllexport)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这样编译器就不会进行名字改编，一个用&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;语言编写的客户端程序就可以调用这个用&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;编写的动态链接库。其缺点是，不能导入类中的函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果函数使用标准调用约定&lt;/span&gt;_stdcall,&lt;span style="font-family: 宋体"&gt;即使使用了&lt;/span&gt;extern "c"&lt;span style="font-family: 宋体"&gt;，此函数仍会发生改编&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来新建一个动态链接库文件，文件名为&lt;/span&gt;Dll2&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;cpp&lt;span style="font-family: 宋体"&gt;文件代码为：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int Add(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;return x+y;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;int Subtract(int x,int y)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;return x-y;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;为了最终解决问题，我们可以新建一个模块文件&lt;/span&gt;Dll.def&lt;span style="font-family: 宋体"&gt;，以使得其他语言编制的程序也能使用我们的动态链接库。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;添加代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;LIBRARY Dll2&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;EXPORTS&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;即使调用&lt;/span&gt;_stdcall&lt;span style="font-family: 宋体"&gt;约定，也不会发生改编，而只会调用这里显示的&lt;/span&gt;Add&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;字符串&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Subtract&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;EXPORTS &lt;span style="font-family: 宋体"&gt;语句引入了一个由一个或多个&lt;/span&gt; definitions&lt;span style="font-family: 宋体"&gt;（导出的函数或数据）组成的节。每个定义必须在单独一行上。&lt;/span&gt;EXPORTS &lt;span style="font-family: 宋体"&gt;关键字可以在第一个定义所在的同一行上或在前一行上。&lt;/span&gt;.def &lt;span style="font-family: 宋体"&gt;文件可以包含一个或多个&lt;/span&gt; EXPORTS &lt;span style="font-family: 宋体"&gt;语句。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;导出&lt;/span&gt; definitions &lt;span style="font-family: 宋体"&gt;的语法为：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]&lt;/p&gt;&lt;p&gt;entryname &lt;span style="font-family: 宋体"&gt;是要导出的函数名或变量名。这是必选项。如果导出的名称与&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;中的名称不同，则通过&lt;/span&gt; internalname &lt;span style="font-family: 宋体"&gt;指定&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;中导出的名称。例如，如果&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;导出函数&lt;/span&gt; func1()&lt;span style="font-family: 宋体"&gt;，要将它用作&lt;/span&gt; func2()&lt;span style="font-family: 宋体"&gt;，则应指定：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;EXPORTS&lt;/p&gt;&lt;p&gt;func2=func1&lt;/p&gt;&lt;p&gt;@ordinal &lt;span style="font-family: 宋体"&gt;允许指定是序号而不是函数名将进入&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;的导出表。这有助于最小化&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;的大小。&lt;/span&gt;.LIB &lt;span style="font-family: 宋体"&gt;文件将包含序号与函数之间的映射，这使您得以像通常在使用&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;的项目中那样使用函数名。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可选的&lt;/span&gt; NONAME &lt;span style="font-family: 宋体"&gt;关键字允许只按序号导出，并减小结果&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;中导出表的大小。但是，如果要在&lt;/span&gt; DLL &lt;span style="font-family: 宋体"&gt;上使用&lt;/span&gt; GetProcAddress&lt;span style="font-family: 宋体"&gt;，则必须知道序号，因为名称将无效。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可选的&lt;/span&gt; PRIVATE &lt;span style="font-family: 宋体"&gt;关键字禁止将&lt;/span&gt; entryname &lt;span style="font-family: 宋体"&gt;放到由&lt;/span&gt; LINK &lt;span style="font-family: 宋体"&gt;生成的导入库中。它对同样是由&lt;/span&gt; LINK &lt;span style="font-family: 宋体"&gt;生成的图像中的导出无效。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可选的&lt;/span&gt; DATA &lt;span style="font-family: 宋体"&gt;关键字指定导出的是数据，而不是代码。例如，可以导出数据变量，如下所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;EXPORTS&lt;/p&gt;&lt;p&gt;i DATA&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来在&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;文件中改写按钮&lt;/span&gt;void CDllTestDlg::OnBtnAdd() &lt;span style="font-family: 宋体"&gt;代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;HINSTANCE hInst;&lt;/p&gt;&lt;p&gt;&amp;nbsp;hInst=LoadLibrary("Dll2.dll");&amp;nbsp;//&lt;span style="font-family: 宋体"&gt;使用动态加载&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;typedef int (*ADDPROC)(int a,int b);&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;如果在&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;的函数中调用&lt;/span&gt;_stdcall&lt;span style="font-family: 宋体"&gt;，相应的应该把代码改为&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//typedef int (_stdcall *ADDPROC)(int a,int b);&amp;nbsp;//&lt;span style="font-family: 宋体"&gt;注意到处函数的调用约定&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"Add");//&lt;span style="font-family: 宋体"&gt;构造一个函数指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if(!Add)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;MessageBox("&lt;span style="font-family: 宋体"&gt;获取函数地址失败！&lt;/span&gt;");&lt;/p&gt;&lt;p&gt;&amp;nbsp;return ;&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;CString str;&lt;/p&gt;&lt;p&gt;&amp;nbsp;str.Format("3+5=%d",Add(3,5));&lt;/p&gt;&lt;p&gt;&amp;nbsp;MessageBox(str);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;因为调用&lt;/span&gt;LoadLibrary&lt;span style="font-family: 宋体"&gt;时动态加载动态链接库，所以不需要头文件和&lt;/span&gt;.lib&lt;span style="font-family: 宋体"&gt;文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果我们在动态链接库中使用标准调用约定&lt;/span&gt;_stdcall&lt;span style="font-family: 宋体"&gt;，而在可执行程序中使用动态加载&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;，会发生名字重编，如果知道&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;中函数的序号，这时可以使用宏&lt;/span&gt;MAKEINTRESOURCE&lt;span style="font-family: 宋体"&gt;把序号转变成名字，如：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;ADDPROC Add=(ADDPROC)GetProcAddress(hInst,MAKEINTRESOURCE&lt;span style="font-family: 宋体"&gt;（&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;DllMain&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The DllMain function is an optional entry point into a dynamic-link library (DLL). If the function is used, it is called by the system when processes and threads are initialized and terminated, or upon calls to the LoadLibrary and FreeLibrary functions.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;DllMain is a placeholder for the library-defined function name. You must specify the actual name you use when you build your DLL. For more information, see the documentation included with your development tools.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;BOOL WINAPI DllMain(&lt;/p&gt;&lt;p&gt;&amp;nbsp;HINSTANCE hinstDLL,&lt;/p&gt;&lt;p&gt;&amp;nbsp;DWORD fdwReason,&lt;/p&gt;&lt;p&gt;&amp;nbsp;LPVOID lpvReserved&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当我们的动态链接库不再使用时可以调用&lt;/span&gt;FreeLibrary&lt;span style="font-family: 宋体"&gt;使动态链接库使用计数减&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;，当使用计数为零时，系统会收回模块资源&lt;/span&gt;&lt;/p&gt;&lt;p&gt;FreeLibrary&lt;/p&gt;&lt;p&gt;The FreeLibrary function decrements the reference count of the loaded dynamic-link library (DLL). When the reference count reaches zero, the module is unmapped from the address space of the calling process and the handle is no longer valid.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;BOOL FreeLibrary(&lt;/p&gt;&lt;p&gt;&amp;nbsp;HMODULE hModule&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="page-break-before: always; background-color: #c0c0c0; height: 1px; font-size: 1px; vertical-align: middle" title="Print Page Break"&gt;&amp;nbsp; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lesson20 Hook&lt;span style="font-family: 黑体"&gt;与数据编程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;通过安装&lt;/span&gt;Hook&lt;span style="font-family: 宋体"&gt;过程，可以用来屏蔽消息队列中某些消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain. You would install a hook procedure to monitor the system for certain types of events. These events are associated either with a specific thread or with all threads in the same desktop as the calling thread. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Syntax&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;HHOOK SetWindowsHookEx( &lt;/p&gt;&lt;p&gt;int idHook,&lt;/p&gt;&lt;p&gt;HOOKPROC lpfn,&lt;/p&gt;&lt;p&gt;HINSTANCE hMod,&lt;/p&gt;&lt;p&gt;DWORD dwThreadId&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;为零表示和所有安装的线程相关&lt;/span&gt;&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;一、下面我们来创建一个屏蔽鼠标过程的&lt;/span&gt;hook:&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;创建基于&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;的一个&lt;/span&gt;InnerHook&lt;span style="font-family: 宋体"&gt;工程项目&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;BOOL CInnerHookerDlg::OnInitDialog()&lt;span style="font-family: 宋体"&gt;中添加&lt;/span&gt;hook&lt;/p&gt;&lt;p&gt;SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要获得当前线程句柄，使用函数&lt;/span&gt;DWORD GetCurrentThreadId(void);&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;实现鼠标过程&lt;/span&gt;MouseProc&lt;span style="font-family: 宋体"&gt;为：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;LRESULT CALLBACK MouseProc(&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;int nCode,&lt;/p&gt;&lt;p&gt;WPARAM wParam,&lt;/p&gt;&lt;p&gt;LPARAM lParam&lt;/p&gt;&lt;p&gt;)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return 1; //&lt;span style="font-family: 宋体"&gt;返回值为一表示屏蔽鼠标过程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;二、如果要屏蔽键盘消息，可以添加如下代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CPP&lt;span style="font-family: 宋体"&gt;文件中添加一个变量：&lt;/span&gt;HHOOK g_hKeyBoard;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;CInnerHookerDlg::OnInitDialog()&lt;span style="font-family: 宋体"&gt;中添加&lt;/span&gt;hook&lt;/p&gt;&lt;p&gt;g_hKeyBoard=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,NULL,GetCurrentThreadId());&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;实现键盘过程&lt;/span&gt;keybroadProc&lt;span style="font-family: 宋体"&gt;为（只屏蔽空格键）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;下边添加代码使程序在&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;键按下后退出。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要关闭窗口，首先要获得窗口的句柄，先声明一个全局变量&lt;/span&gt;Hwnd g_hWnd&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnInitDialog()&lt;span style="font-family: 宋体"&gt;中把窗口句柄传给它&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;g_hWnd=m_hWnd;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来为键盘钩子过程添加代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这时我们只能屏蔽主线程的键盘消息，如果要屏蔽所有消息，就得把代码放到动态链接库中实现。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;三、屏蔽所有线程的消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;首先要创建一个动态链接库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;新建一个&lt;/span&gt;Win32 Dynamic-Link Library&lt;span style="font-family: 宋体"&gt;项目工程&lt;/span&gt;Hook&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-family: 宋体"&gt;得到动态链接库模块的句柄有两种方式：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;方法&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;DllMain&lt;span style="font-family: 宋体"&gt;函数方式：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;HMODULE&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;HINSTANCE&lt;span style="font-family: 宋体"&gt;可以通用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;方法&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;GetModuleHandle&lt;span style="font-family: 宋体"&gt;函数方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这样我们所安装的钩子过程就和运行在同一个桌面上的所有进程相关了&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;编写&lt;/span&gt;MouseProc()&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;之后新建一个模块文件&lt;/span&gt;Hook.def,&lt;span style="font-family: 宋体"&gt;添加代码&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;LIBRARY Hook&lt;/p&gt;&lt;p&gt;EXPORTS&lt;/p&gt;&lt;p&gt;SetHook @2&lt;span&gt;&amp;nbsp;&amp;nbsp; //@2&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;用来指定序号。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;编译生成&lt;/span&gt;dll&lt;span style="font-family: 宋体"&gt;文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;接下来新建一个工程，用来测试刚才的&lt;/span&gt;DLL&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;首先安装一个鼠标&lt;/span&gt;Hook&lt;span style="font-family: 宋体"&gt;屏蔽所有的鼠标消息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;新建一个基于&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;对话框的项目工程&lt;/span&gt;HookTest&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;BOOL CHookTestDlg::OnInitDialog()&lt;span style="font-family: 宋体"&gt;前声明&lt;/span&gt;SetHook&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;_declspec(dllimport) void SetHook();&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;Setting&lt;span style="font-family: 宋体"&gt;对话框的&lt;/span&gt;Link&lt;span style="font-family: 宋体"&gt;选项卡的，添加库文件：&lt;/span&gt;..\Hook\Debug\Hook.lib&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnInitDialog()&lt;span style="font-family: 宋体"&gt;中调用&lt;/span&gt; SetHook();&lt;/p&gt;&lt;p&gt;5.&lt;span style="font-family: 宋体"&gt;将生成好的动态链接库拷贝到测试程序项目工程目录下面。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;调试运行，你会发现你的鼠标坏了，所有的鼠标操作都被屏蔽了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;然后安装一个键盘&lt;/span&gt;Hook&lt;span style="font-family: 宋体"&gt;，我们可以按照刚才所做键盘&lt;/span&gt;Hook&lt;span style="font-family: 宋体"&gt;的过程在动态链接库中也做一个&lt;/span&gt;Hook&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;这是需要给&lt;/span&gt;SetHook&lt;span style="font-family: 宋体"&gt;带上参数&lt;/span&gt;HWND hwnd.&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在测试程序中要把函数也带上参数，并给&lt;/span&gt;SetHook&lt;span style="font-family: 宋体"&gt;传入窗口句柄&lt;/span&gt; SetHook(m_hWnd)&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;接着，让程序窗口始终在其他窗口之前，而且将它最大化，从而使用户不能切换到窗口。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可以使用&lt;/span&gt;SetWindowPos&lt;span style="font-family: 宋体"&gt;函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BOOL SetWindowPos(&lt;/p&gt;&lt;p&gt;HWND hWndInsertAfter,&lt;/p&gt;&lt;p&gt;int X,&lt;/p&gt;&lt;p&gt;int Y,&lt;/p&gt;&lt;p&gt;int cx,&lt;/p&gt;&lt;p&gt;int cy,&lt;/p&gt;&lt;p&gt;UINT uFlags&lt;/p&gt;&lt;p&gt;);&lt;/p&gt;&lt;p&gt;A window can be moved to the top of the Z-order either by setting the pWndInsertAfter parameter to &amp;amp;wndTopMost and ensuring that the SWP_NOZORDER flag is not set or by setting a window&amp;#8217;s Z-order so that it is above any existing topmost windows. When a nontopmost window is made topmost, its owned windows are also made topmost. Its owners are not changed. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;得到窗口的大小，可以使用函数&lt;/span&gt;GetSystemMetrics&lt;/p&gt;&lt;p&gt;int GetSystemMetrics(int nIndex);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int cxScreen,cyScreen;&lt;/p&gt;&lt;p&gt;cxScreen=GetSystemMetrics(SM_CXSCREEN);&lt;/p&gt;&lt;p&gt;cyScreen=GetSystemMetrics(SM_CYSCREEN);&lt;/p&gt;&lt;p&gt;SetWindowPos(&amp;amp;wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;SetHook(m_hWnd);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;因为第一个参数设置为&lt;/span&gt;&amp;amp;wndTopMost&lt;span style="font-family: 宋体"&gt;，这时程序始终处于顶层窗口，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;不管怎样切换窗口，我们的窗口显示在最前面。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;四、如何实现在切换到其他线程时，也能响应&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;退出程序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在程序中，我们屏蔽了鼠标和键盘，但是我们留下了一个退出程序的后门（&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;前面讲过动态链接库共享性的原理，多个进程可以共享同一份代码与数据页，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;按道理切换到其它线程之后，按下&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;应该也可以退出程序才对，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;但是发现当切换到其他程序后，再按&lt;/span&gt;F2 &lt;span style="font-family: 宋体"&gt;程序不会退出，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这是因为系统的页面拷贝机制，如果系统发现被某线程要修改某个数据页面，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;它就会先拷贝一份页面数据，再对新的页面数据进行修改，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;其它没有更新数据的线程继续使用旧的页面数据。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;比如：&lt;/span&gt;SetHook(HWND hwnd)&lt;span style="font-family: 宋体"&gt;中将形参传递给了一个全局变量&lt;/span&gt;g_hWnd&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;，那么调用&lt;/span&gt;SetHook&lt;span style="font-family: 宋体"&gt;的线程将使用新的存放了&lt;/span&gt;hwnd&lt;span style="font-family: 宋体"&gt;的数据页面，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;而其它的线程继续使用旧的数据页面，所以在其它线程成为活动窗口的时候，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;按下&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;时，因为没有&lt;/span&gt;g_hWnd&lt;span style="font-family: 宋体"&gt;没有传递到&lt;/span&gt;hwnd&lt;span style="font-family: 宋体"&gt;窗口，所以按下&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;没有反应。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;我们可以通过创建一个新的节，将全局变量放到这个节当中，然后将这个节设置为一个共享的节，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这样全局变量就可以在多个线程间共享，从而使切换到其他线程时也能按下&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;退出程序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要显示动态链接库的节，可以使用命令行：&lt;/span&gt; dumpbin -headers Hook.dll&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如何创建一个新的节？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果确实想在其他程序窗口下关闭我们的程序窗口，可以把共享窗口句柄，使系统不再进行页面拷贝，方法是使用下面语句把窗口句柄设为共享：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;#pragma data_seg("MySec")//MySec&lt;span style="font-family: 宋体"&gt;是新创建的节的名字（不能超过&lt;/span&gt;8&lt;span style="font-family: 宋体"&gt;个字节）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HWND g_hWnd=NULL; //&lt;span style="font-family: 宋体"&gt;新变量必须初始化，否则没有新建节的信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;#pragma data_seg()&lt;span&gt;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;以上为新建节&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;新创建的节共享以后才有效，共享节有两种方法：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.#pragma comment(linker,"/section:MySec,RWS") //&lt;span style="font-family: 宋体"&gt;设置节的属性，读，写，共享&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;也可以把&lt;/span&gt;#pragma comment(linker,"/section:MySec,RWS")&lt;span style="font-family: 宋体"&gt;省略。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;Hook.def&lt;span style="font-family: 宋体"&gt;中添加如下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SEGMENTS&lt;/p&gt;&lt;p&gt;MySec read write shared&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;也能对节的属性进行设置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;把&lt;/span&gt;SetWindowsHookEx&lt;span style="font-family: 宋体"&gt;函数的第一个参数设为&lt;/span&gt;WH_GETMESSAGE&lt;span style="font-family: 宋体"&gt;，能够破解密码。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;使用&lt;/span&gt;Hook&lt;span style="font-family: 宋体"&gt;时要小心。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.Hook&lt;span style="font-family: 宋体"&gt;简介：作用是拦截某些消息，关键函数是&lt;/span&gt;SetWindowsHookEX()&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;示例程序：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;新建一基于对话框工程，&lt;/span&gt;InnerHook,&lt;span style="font-family: 宋体"&gt;此过程的钩子是只拦截本进程的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;OnInitDialog()&lt;span style="font-family: 宋体"&gt;中添加代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; g_hWnd=m_hWnd;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());&lt;span style="font-family: 宋体"&gt;设置了鼠标钩子&lt;/span&gt;&lt;/p&gt;&lt;p&gt;g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());&lt;span style="font-family: 宋体"&gt;设置了键盘钩子&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;完成钩子函数的编写：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HHOOK g_hKeyboard=NULL;&lt;/p&gt;&lt;p&gt;HHOOK g_hMouse;&lt;/p&gt;&lt;p&gt;HWND g_hWnd=NULL;LRESULT CALLBACK MouseProc(&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; int nCode,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hook code&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; WPARAM wParam, // message identifier&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; LPARAM lParam&amp;nbsp;&amp;nbsp; // mouse coordinates&lt;/span&gt;&lt;/p&gt;&lt;p&gt;)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return 1;&lt;/p&gt;&lt;p&gt;}LRESULT CALLBACK KeyboardProc(&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; int code,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hook code&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; WPARAM wParam, // virtual-key code&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; LPARAM lParam&amp;nbsp;&amp;nbsp; // keystroke-message information&lt;/span&gt;&lt;/p&gt;&lt;p&gt;)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;//if(VK_SPACE==wParam || VK_RETURN==wParam)&lt;span style="font-family: 宋体"&gt;如果是空格键&lt;/span&gt;&lt;/p&gt;&lt;p&gt;/*if(VK_F4==wParam &amp;amp;&amp;amp; (1==(lParam&amp;gt;&amp;gt;29 &amp;amp; 1)))&lt;span style="font-family: 宋体"&gt;拦截&lt;/span&gt;ALT+F4&lt;span style="font-family: 宋体"&gt;按键！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; return 1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;else&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;if(VK_F2==wParam)&lt;span style="font-family: 宋体"&gt;按&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;时程序可以退出，这是留的后门。否则程序无法关闭，只能用任务管理器来关闭它了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; ::SendMessage(g_hWnd,WM_CLOSE,0,0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; UnhookWindowsHookEx(g_hKeyboard);&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;当程序退出时最好将钩子移除。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; UnhookWindowsHookEx(g_hMouse);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;return 1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;编写一个屏屏蔽所有进程和所有线程的钩子程序。耸闭飧龉匙颖匦氚沧霸贒&lt;/span&gt;LL&lt;span style="font-family: 宋体"&gt;中，然后被某个程序调用才行。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;新建一个&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;工程名为&lt;/span&gt;Hook&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;增加&lt;/span&gt;Hook.cpp&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;#include &amp;lt;windows.h&amp;gt;&lt;span style="font-family: 宋体"&gt;包含头文件&lt;/span&gt;HHOOK g_hMouse=NULL;&lt;/p&gt;&lt;p&gt;HHOOK g_hKeyboard=NULL;#pragma data_seg("MySec")&lt;span style="font-family: 宋体"&gt;新建了一个节，用于将下&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;面的这个变量设为全局共享。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HWND g_hWnd=NULL;&lt;span style="font-family: 宋体"&gt;这个变量是全局共享的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;#pragma data_seg()//#pragma comment(linker,"/section:MySec,RWS")&lt;/p&gt;&lt;p&gt;/*HINSTANCE g_hInst;BOOL WINAPI DllMain(&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; HINSTANCE hinstDLL, // handle to the DLL module&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; DWORD fdwReason,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reason for calling function&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; LPVOID lpvReserved&amp;nbsp;&amp;nbsp; // reserved&lt;/span&gt;&lt;/p&gt;&lt;p&gt;)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;g_hInst=hinstDLL;&lt;/p&gt;&lt;p&gt;}*/LRESULT CALLBACK MouseProc(&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; int nCode,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hook code&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; WPARAM wParam, // message identifier&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; LPARAM lParam&amp;nbsp;&amp;nbsp; // mouse coordinates&lt;/span&gt;&lt;/p&gt;&lt;p&gt;)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return 1;&lt;span style="font-family: 宋体"&gt;拦截了鼠标消息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}LRESULT CALLBACK KeyboardProc(&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; int code,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hook code&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; WPARAM wParam, // virtual-key code&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; LPARAM lParam &amp;nbsp;&amp;nbsp;// keystroke-message information&lt;/span&gt;&lt;/p&gt;&lt;p&gt;)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if(VK_F2==wParam)&lt;span style="font-family: 宋体"&gt;如果是&lt;/span&gt;F2&lt;span style="font-family: 宋体"&gt;键，则退出。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; SendMessage(g_hWnd,WM_CLOSE,0,0);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; UnhookWindowsHookEx(g_hMouse);&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;当退出时将钩子卸掉。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; UnhookWindowsHookEx(g_hKeyboard);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;return 1;&lt;/p&gt;&lt;p&gt;}void SetHook(HWND hwnd)&lt;span style="font-family: 宋体"&gt;此函数设置了钩子。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;g_hWnd=hwnd;&lt;span style="font-family: 宋体"&gt;注意这种传递调用它的进程的句柄的方法，比较巧妙！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);&lt;/p&gt;&lt;p&gt;g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);&lt;/p&gt;&lt;p&gt;}Hook.DEF&lt;span style="font-family: 宋体"&gt;的代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;LIBRARY Hook&lt;/p&gt;&lt;p&gt;EXPORTS&lt;/p&gt;&lt;p&gt;SetHook @2&lt;/p&gt;&lt;p&gt;SEGMENTS&lt;/p&gt;&lt;p&gt;MySec READ WRITE SHARED &lt;span style="font-family: 宋体"&gt;也可以设置节的属性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;新建一个工程调用此钩子函数。工程名为&lt;/span&gt;HookTest,&lt;span style="font-family: 宋体"&gt;基于对话框的。在&lt;/span&gt;OnInitDialog()&lt;span style="font-family: 宋体"&gt;中调用&lt;/span&gt;SetHook()&lt;span style="font-family: 宋体"&gt;，要事先声明&lt;/span&gt;_declspec(dllimport) void SetHook(HWND hwnd);&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;然后在&lt;/span&gt;Project-&amp;gt;Setting-&amp;gt;Link-&amp;gt;&lt;span style="font-family: 宋体"&gt;加入&lt;/span&gt;..\Hook\Debug\Hook.lib&lt;span style="font-family: 宋体"&gt;，并将&lt;/span&gt;Hook.Dll&lt;span style="font-family: 宋体"&gt;拷贝到当前目录。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;int cxScreen,cyScreen;&lt;/p&gt;&lt;p&gt;cxScreen=GetSystemMetrics(SM_CXSCREEN);&lt;/p&gt;&lt;p&gt;cyScreen=GetSystemMetrics(SM_CYSCREEN);&lt;/p&gt;&lt;p&gt;SetWindowPos(&amp;amp;wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);&lt;span style="font-family: 宋体"&gt;将窗口保持在最前面。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;SetHook(m_hWnd);&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.DLL&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;的调试方法，设置断点，然后运行时断点时，&lt;/span&gt;step into&lt;span style="font-family: 宋体"&gt;即可。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-family: 宋体"&gt;数据库编程&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.ODBC&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;简介：&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;可以认为是建立在&lt;/span&gt;ODBC&lt;span style="font-family: 宋体"&gt;上的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; ADO&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;的三个核心对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Connection&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; Connection&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对象表示了到数据库的连接，它管理应用程序和数据库之间的通信。&lt;/span&gt; Recordset&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Command&lt;span style="font-family: 宋体"&gt;对象都有一个&lt;/span&gt;ActiveConnection&lt;span style="font-family: 宋体"&gt;属性，该属性用来引用&lt;/span&gt;Connection&lt;span style="font-family: 宋体"&gt;对象。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Command&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; Command&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对象被用来处理重复执行的查询，或处理需要检查在存储过程调用中的输出或返回参数的值的查询。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Recordset&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; Recordset&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对象被用来获取数据。&lt;/span&gt; Recordset&lt;span style="font-family: 宋体"&gt;对象存放查询的结果，这些结果由数据的行&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;称为记录&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;和列&lt;/span&gt;(&lt;span style="font-family: 宋体"&gt;称为字段&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;组成。每一列都存放在&lt;/span&gt;Recordset&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;Fields&lt;span style="font-family: 宋体"&gt;集合中的一个&lt;/span&gt;Field&lt;span style="font-family: 宋体"&gt;对象中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;演示在&lt;/span&gt;VB&lt;span style="font-family: 宋体"&gt;中使用&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;的方法，方法比较简单，使用方便。另外在&lt;/span&gt;VB&lt;span style="font-family: 宋体"&gt;中演示了&lt;/span&gt;Connection&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Command&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Recordset&lt;span style="font-family: 宋体"&gt;的方法，用这三种方法都可以执行&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;语句。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;VC&lt;span style="font-family: 宋体"&gt;中利用&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;访问数据库。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;新建一个基于对话框的工程，名为&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在对话框中放一&lt;/span&gt;ListBox&lt;span style="font-family: 宋体"&gt;和一个&lt;/span&gt;Button&lt;span style="font-family: 宋体"&gt;控件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在使用时须导入&lt;/span&gt;MSADO15.dll&lt;span style="font-family: 宋体"&gt;，方法是在&lt;/span&gt;StdAfx.h&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;#import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;至少于将&lt;/span&gt;EOF&lt;span style="font-family: 宋体"&gt;改名为&lt;/span&gt;rsEOF&lt;span style="font-family: 宋体"&gt;，是为了避免与文件中的&lt;/span&gt;EOF&lt;span style="font-family: 宋体"&gt;重名。然后编译程序，将产生的&lt;/span&gt;debug&lt;span style="font-family: 宋体"&gt;目录下的两个文件&lt;/span&gt;MSADO15.tlh&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;MSADO15.tli&lt;span style="font-family: 宋体"&gt;加到工程中，其目的只是方便我们查看而已。并不是编译需要它。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADO&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;也是&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;组件，须初始化&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;库方法是&lt;/span&gt;CoInitialize(NULL);&lt;span style="font-family: 宋体"&gt;使用完后须&lt;/span&gt;CoUninitialize();&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void CAdoDlg::OnBtnQuery() &lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;// TOD Add your control notification handler code here&lt;/p&gt;&lt;p&gt;CoInitialize(NULL);&lt;span style="font-family: 宋体"&gt;初始化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;_ConnectionPtr pConn(__uuidof(Connection));&lt;span style="font-family: 宋体"&gt;产生&lt;/span&gt;connection&lt;span style="font-family: 宋体"&gt;智能指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;_RecordsetPtr pRst(__uuidof(Recordset));&lt;span style="font-family: 宋体"&gt;产生&lt;/span&gt;recordset&lt;span style="font-family: 宋体"&gt;智能指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;_CommandPtr pCmd(__uuidof(Command));&lt;span style="font-family: 宋体"&gt;产生&lt;/span&gt;command&lt;span style="font-family: 宋体"&gt;智能指针&lt;/span&gt;pConn-&amp;gt;ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs";&lt;span style="font-family: 宋体"&gt;数据库信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pConn-&amp;gt;Open("","","",adConnectUnspecified);&lt;span style="font-family: 宋体"&gt;打开数据库&lt;/span&gt;//pRst=pConn-&amp;gt;Execute("select * from authors",NULL,adCmdText);&lt;span style="font-family: 宋体"&gt;用记录集查询数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//pRst-&amp;gt;Open("select * from authors",_variant_t((IDispatch*)pConn),&lt;/p&gt;&lt;p&gt;// adOpenDynamic,adLockOptimistic,adCmdText);&lt;/p&gt;&lt;p&gt;pCmd-&amp;gt;put_ActiveConnection(_variant_t((IDispatch*)pConn));&lt;/p&gt;&lt;p&gt;pCmd-&amp;gt;CommandText="select * from authors";&lt;span style="font-family: 宋体"&gt;用这种方法也可以查询数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pRst=pCmd-&amp;gt;Execute(NULL,NULL,adCmdText);&lt;/p&gt;&lt;p&gt;while(!pRst-&amp;gt;rsEOF)&lt;span style="font-family: 宋体"&gt;将查询到的数据加到列表框咯。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;((CListBox*)GetDlgItem(IDC_LIST1))-&amp;gt;AddString(&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; (_bstr_t)pRst-&amp;gt;GetCollect("au_lname"));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pRst-&amp;gt;MoveNext();&lt;/p&gt;&lt;p&gt;}pRst-&amp;gt;Close();&lt;/p&gt;&lt;p&gt;pConn-&amp;gt;Close();&lt;/p&gt;&lt;p&gt;pCmd.Release();&lt;/p&gt;&lt;p&gt;pRst.Release();&lt;/p&gt;&lt;p&gt;pConn.Release();&lt;/p&gt;&lt;p&gt;CoUninitialize();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;本文来自&lt;/span&gt;CSDN&lt;span style="font-family: 宋体"&gt;博客&lt;/span&gt;http://blog.csdn.net/huahuamoon/archive/2007/12/29/2002855.aspx&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;数据库编程：&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;COM&lt;/p&gt;&lt;p&gt;[&lt;span style="font-family: 宋体"&gt;计&lt;/span&gt;] &lt;span style="font-family: 宋体"&gt;小型可执行程序的扩展名&lt;/span&gt;, &lt;span style="font-family: 宋体"&gt;串行通讯端口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;[&lt;span style="font-family: 宋体"&gt;域&lt;/span&gt;] Commercial organizations,&lt;span style="font-family: 宋体"&gt;商业组织&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;公司&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Component Object Model&lt;span style="font-family: 宋体"&gt;组件对象模型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;ADO&lt;span style="font-family: 宋体"&gt;的三个核心对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Connection&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Connection&lt;span style="font-family: 宋体"&gt;对象表示了到数据库的连接，它管理应用程序和数据库之间的通信。&lt;/span&gt;Recordest&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Command&lt;span style="font-family: 宋体"&gt;对象都有一个&lt;/span&gt;ActiveConnection&lt;span style="font-family: 宋体"&gt;属性，该属性用来饮用&lt;/span&gt;Connection&lt;span style="font-family: 宋体"&gt;对象。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Command&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Command&lt;span style="font-family: 宋体"&gt;对象被用来处理重复执行的查询，或处理需要检查在存储过程调用中的输出或返回参数的值的查询。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Recordset&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Recordset&lt;span style="font-family: 宋体"&gt;对象被用来获取数据。&lt;/span&gt;Recordset&lt;span style="font-family: 宋体"&gt;对象存放查询的结果，这些结果又数据的行（称为记录）和列（成为字段）组成。每一列都存放在&lt;/span&gt;Recordset&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;Fields&lt;span style="font-family: 宋体"&gt;集合中的一个&lt;/span&gt;Filed&lt;span style="font-family: 宋体"&gt;对象中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;关于&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;数据库连接方面知识的总结&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;、导入库文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;使用&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;前必须在工程的&lt;/span&gt;stdafx.h&lt;span style="font-family: 宋体"&gt;文件最后用直接引入符号＃&lt;/span&gt;import&lt;span style="font-family: 宋体"&gt;引入&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;库文件，以使编译器能正确编译。代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ADO&lt;span style="font-family: 宋体"&gt;类的定义是作为一种资源存储在&lt;/span&gt;ADO DLL(msado15.dll&lt;span style="font-family: 宋体"&gt;）中，在其内部称为类型库。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;类型库描述了自治接口，以及&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;＋＋使用的&lt;/span&gt;COM vtable&lt;span style="font-family: 宋体"&gt;接口。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;当使用＃&lt;/span&gt;import&lt;span style="font-family: 宋体"&gt;指令时，在运行时&lt;/span&gt;Visual C&lt;span style="font-family: 宋体"&gt;＋＋需要从&lt;/span&gt;ADO DLL&lt;span style="font-family: 宋体"&gt;中读取这个类型库，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;并以此创建一组&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;＋＋头文件。这些头文件具有&lt;/span&gt;.tli &lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;.tlh&lt;span style="font-family: 宋体"&gt;扩展名，＃&lt;/span&gt;import&lt;span style="font-family: 宋体"&gt;引入&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;库文件的代码编译后，在项目的目录下生成了这两个文件。在&lt;/span&gt;C++&lt;span style="font-family: 宋体"&gt;程序代码中调用的&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;类要在这些文件中定义。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;程序的第三行指示&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;对象不使用名称空间，在有些应用程序中，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;由于应用程序中的对象与&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;中的对象之间可能会出现命名冲突，所以有必要使用名称空间。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果要使用名称空间，则可把第三行程序修改为：&lt;/span&gt; rename_namespace("AdoNS")&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;第四行代码将&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;中的&lt;/span&gt;EOF(&lt;span style="font-family: 宋体"&gt;文件结束&lt;/span&gt;)&lt;span style="font-family: 宋体"&gt;更名为&lt;/span&gt;adoEOF&lt;span style="font-family: 宋体"&gt;，因为文件的结尾也是以&lt;/span&gt;EOF&lt;span style="font-family: 宋体"&gt;结尾的，是为了避免与定义了自己的&lt;/span&gt;EOF&lt;span style="font-family: 宋体"&gt;的其他库冲突。&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;至于改为什么名字，可以根据自己的命名习惯自己确定。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、初始化&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;环境&lt;/span&gt;&lt;/p&gt;&lt;p&gt;OLE DB &lt;span style="font-family: 宋体"&gt;是基于&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;技术编写的，&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;是&lt;/span&gt;OLE DB&lt;span style="font-family: 宋体"&gt;基础之上的用户程序，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;OLE DB&lt;span style="font-family: 宋体"&gt;是一个&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;组件，在访问&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;组件的时候需要初始化&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;库，方法如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;（&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; ::CoInitialize(NULL); //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;初始化&lt;/span&gt;OLE/COM&lt;span style="font-family: 宋体"&gt;库环境&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;对数据库的访问在上下代码之间写，下面第三步就应该写在这里&lt;/span&gt;&lt;/p&gt;&lt;p&gt;::CoUninitialize();//&lt;span style="font-family: 宋体"&gt;既然初始化了环境，当然一定要记得释放他了&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;（&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;）也可以调用&lt;/span&gt;MFC&lt;span style="font-family: 宋体"&gt;全局函数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;AfxOleInit();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、三大指针对象的定义和创建实例&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(1) &lt;/p&gt;&lt;p&gt;_ConnectionPtr pConnection("ADODB.Connection");&lt;/p&gt;&lt;p&gt;_RecordsetPtr pRecordset("ADODB.Recordset");&lt;/p&gt;&lt;p&gt;_CommandPtr pCommand("ADODN.Command");&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(2)&lt;/p&gt;&lt;p&gt;&amp;nbsp;_ConnectionPtr pConnection;&lt;/p&gt;&lt;p&gt;_RecordsetPtr pRecordset;&lt;/p&gt;&lt;p&gt;_CommandPtr pCommand;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;pConnection.CreateInstance(__uuidof(Connection));&lt;/p&gt;&lt;p&gt;pRecordset.CreateInstance(__uuidof(Recordset));&lt;/p&gt;&lt;p&gt;pCommand.CreateInstance(__uuidof(Command));&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;要产生一个智能指针对象，其实在定义的同时也可以初始化，如：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;_ConnectionPtr pConnection(__uuidof(Connection));&lt;/p&gt;&lt;p&gt;_ConnectionPtr &lt;span style="font-family: 宋体"&gt;是智能指针&lt;/span&gt;&lt;/p&gt;&lt;p&gt;__uuidof() &lt;span style="font-family: 宋体"&gt;用来获取&lt;/span&gt;Connection&lt;span style="font-family: 宋体"&gt;全局唯一标识符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(3)&lt;/p&gt;&lt;p&gt;_ConnectionPtr pConnection;&lt;/p&gt;&lt;p&gt;_RecordsetPtr pRecordset;&lt;/p&gt;&lt;p&gt;_CommandPtr pCommand;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;pConnection.CreateInstance("ADODB.Connection");&lt;/p&gt;&lt;p&gt;pRecordset.CreateInstance("ADODB.Recordset");&lt;/p&gt;&lt;p&gt;pCommand.CreateInstance("ADODB.Command");&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;、打开一个连接&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pConnection-&amp;gt;ConnectionString = "&lt;span style="font-family: 宋体"&gt;这里的字符串有下面四种写法&lt;/span&gt;";//&lt;span style="font-family: 宋体"&gt;对连接字符串赋值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pConnection-&amp;gt;Open(ConnectionString,"","",adModeUnknown); //&lt;span style="font-family: 宋体"&gt;连接数据库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;第二三个参数分别为用户的&lt;/span&gt;ID&lt;span style="font-family: 宋体"&gt;与密码，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;因为在连接字符串&lt;/span&gt;ConnectionCstring&lt;span style="font-family: 宋体"&gt;中已经设置好了，这里可以为空。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;第四个参数可以取下面两个参数：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;adAsyncConnect &lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;异步打开数据库，在&lt;/span&gt;ASP&lt;span style="font-family: 宋体"&gt;中直接用&lt;/span&gt;16&lt;/p&gt;&lt;p&gt;adConnectUnspecified &lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;同步打开数据库，在&lt;/span&gt;ASP&lt;span style="font-family: 宋体"&gt;中直接用&lt;/span&gt;-1&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ConnectionString&lt;span style="font-family: 宋体"&gt;根据不同的数据源，分别对应不同的写法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;（要记下来很困难，可以在&lt;/span&gt;VB&lt;span style="font-family: 宋体"&gt;中利用&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;控件先连接好，再将其拷贝在&lt;/span&gt;VC&lt;span style="font-family: 宋体"&gt;中，这样不容易出错）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;访问&lt;/span&gt;Access 2000&lt;/p&gt;&lt;p&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;访问&lt;/span&gt;ODBC&lt;span style="font-family: 宋体"&gt;数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;"Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 3)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;访问&lt;/span&gt;Oracle&lt;span style="font-family: 宋体"&gt;数据库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;#8220;&lt;/span&gt;Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 4)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;访问&lt;/span&gt;MS SQL&lt;span style="font-family: 宋体"&gt;数据库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;"Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5&lt;span style="font-family: 宋体"&gt;、执行&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;命令，得到数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;方法&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pRecordset = pConnection-&amp;gt;Execute("Select * from authors",NULL,adCmdText);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;方法&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pRecordset -&amp;gt;Open("Select * from authors",_&lt;/p&gt;&lt;p&gt;variant_t((Idispacth*) pConnection), //&lt;span style="font-family: 宋体"&gt;设置活动连接&lt;/span&gt;&lt;/p&gt;&lt;p&gt;adOpenDynamtic,&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;游标类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;adLockOptimistic,&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;锁的类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;adCmdText);&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;方法&lt;/span&gt;3&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pCommand-&amp;gt;put_ActiveConnection(_variant_t((Idispatch *) pConn);&lt;/p&gt;&lt;p&gt;pCommand-&amp;gt;CommandText = "Select * from authors";&lt;/p&gt;&lt;p&gt;pRecordset = pCmd-&amp;gt;Execute(NULL,NULL,adCmdText);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;得到数据之后，做一个循环取得数据：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;While (!pRecordset -&amp;gt;adoEOF)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;Str = pRecordset-&amp;gt;GetCollect("au_lname"));&lt;/p&gt;&lt;p&gt;pRst-&amp;gt;MoveNext();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;SQL&lt;span style="font-family: 宋体"&gt;命令比较多，但是不去考虑细节，这里只说出通用的方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CString strSQL;//&lt;span style="font-family: 宋体"&gt;定义&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;命令串，用来保存&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;语句&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;strSQL.Format("SQL statement");&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;然后在每个要用到&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;命令串的方法中，使用&lt;/span&gt;strSQL.AllocSysString()&lt;span style="font-family: 宋体"&gt;的方法进行类型转换&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;com&lt;span style="font-family: 宋体"&gt;的专用数据类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;variant ,bstr ,SafeArray&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;variant&lt;span style="font-family: 宋体"&gt;变量的范围包括很多，它是一种变体类型，主要用于支持自动化的语言访问，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;从而在&lt;/span&gt;VB&lt;span style="font-family: 宋体"&gt;中非常方便地使用，但是&lt;/span&gt;VC&lt;span style="font-family: 宋体"&gt;中比较复杂，它使用&lt;/span&gt;_variant_t &lt;span style="font-family: 宋体"&gt;进行管理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;bstr&lt;span style="font-family: 宋体"&gt;是一种字符串变量，使用&lt;/span&gt;_bstr_t&lt;span style="font-family: 宋体"&gt;进行管理，这个类重载了&lt;/span&gt;char *&lt;span style="font-family: 宋体"&gt;操作符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7&lt;span style="font-family: 宋体"&gt;、关闭连接&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;if(pConnection-&amp;gt;State);&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;不能多次关闭，否则会出现错误&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pConnection-&amp;gt;Close(); &lt;/p&gt;&lt;p&gt;pRecordset-&amp;gt;Close();&lt;/p&gt;&lt;p&gt;pCommand.Release();&lt;/p&gt;&lt;p&gt;pConnection.Release();&lt;/p&gt;&lt;p&gt;//&lt;span style="font-family: 宋体"&gt;释放引用计数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pRecordset.Release();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;注意：调用&lt;/span&gt;Close()&lt;span style="font-family: 宋体"&gt;时用&lt;/span&gt;"-&amp;gt;"&lt;span style="font-family: 宋体"&gt;，调用&lt;/span&gt;Release()&lt;span style="font-family: 宋体"&gt;时要用&lt;/span&gt;"."&lt;span style="font-family: 宋体"&gt;，为什么？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;因为智能指针，&lt;/span&gt;_ConnectionPtr&lt;span style="font-family: 宋体"&gt;是一个重载了&lt;/span&gt;-&amp;gt;&lt;span style="font-family: 宋体"&gt;运算符的类&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;_ConnectionPtr&lt;span style="font-family: 宋体"&gt;：它是一个接口指针模板。&lt;/span&gt;'.'&lt;span style="font-family: 宋体"&gt;是模板&lt;/span&gt;_com_ptr&lt;span style="font-family: 宋体"&gt;的函数。&lt;/span&gt;-&amp;gt;&lt;span style="font-family: 宋体"&gt;是&lt;/span&gt;'&lt;span style="font-family: 宋体"&gt;接口函数&lt;/span&gt;'&lt;span style="font-family: 宋体"&gt;调用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;//forexample:&lt;/p&gt;&lt;p&gt;_ConnectionPtr m_Conn;&lt;/p&gt;&lt;p&gt;m_Conn.CreateInstance(....);//Createinterfaceinstance.&lt;/p&gt;&lt;p&gt;m_Conn-&amp;gt;Open(...);//Openaconnectiontodatabase.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;'-&amp;gt;'&lt;span style="font-family: 宋体"&gt;是&lt;/span&gt;_com_ptr&lt;span style="font-family: 宋体"&gt;重载了的运算符&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;目的就是为了让你调用模板参数的函数&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;8&lt;span style="font-family: 宋体"&gt;、结构化异常处理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;ADO&lt;span style="font-family: 宋体"&gt;封装了&lt;/span&gt;COM&lt;span style="font-family: 宋体"&gt;接口，所以需要进行错误处理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如下例：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;HRESULT hr;&lt;/p&gt;&lt;p&gt;try&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;hr = m_pConnection.CreateInstance("ADODB.Connection");///&lt;span style="font-family: 宋体"&gt;创建&lt;/span&gt;Connection&lt;span style="font-family: 宋体"&gt;对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;if(SUCCEEDED(hr))&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;hr = m_pConnection-&amp;gt;Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///&lt;span style="font-family: 宋体"&gt;连接数据库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;///&lt;span style="font-family: 宋体"&gt;上面一句中连接字串中的&lt;/span&gt;Provider&lt;span style="font-family: 宋体"&gt;是针对&lt;/span&gt;ACCESS2000&lt;span style="font-family: 宋体"&gt;环境的，对于&lt;/span&gt;ACCESS97,&lt;span style="font-family: 宋体"&gt;需要改为&lt;/span&gt;:Provider=Microsoft.Jet.OLEDB.3.51; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;catch(_com_error e)///&lt;span style="font-family: 宋体"&gt;捕捉异常&lt;/span&gt;&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;CString errormessage;&lt;/p&gt;&lt;p&gt;errormessage.Format("&lt;span style="font-family: 宋体"&gt;连接数据库失败&lt;/span&gt;!\r\n&lt;span style="font-family: 宋体"&gt;错误信息&lt;/span&gt;:%s",e.ErrorMessage());&lt;/p&gt;&lt;p&gt;AfxMessageBox(errormessage);///&lt;span style="font-family: 宋体"&gt;显示错误信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;这里介绍了三种对象通过&lt;/span&gt;ADO&lt;span style="font-family: 宋体"&gt;访问数据库，它们都可以执行&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;语句获取数据，但不是管那种方法获取数据，最终都将数据放置到记录集对象当中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gaojun/aggbug/1800099.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gaojun/archive/2010/08/15/1800099.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2010/05/14/1735527.html</id><title type="text">visual C++ 6.0开发工具与调试</title><summary type="text">工欲善其事，必先利其器，对于Ｃ＋＋来说，工具的使用还是挺重要的，能帮助你快速的开发应用工程，以下整理一些关于C++6.0的工具使用方式，经常看看很有帮助，不用一有问题就去google了</summary><published>2010-05-14T07:35:00Z</published><updated>2010-05-14T07:35:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2010/05/14/1735527.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2010/05/14/1735527.html"/><content type="text">工欲善其事，必先利其器，对于Ｃ＋＋来说，工具的使用还是挺重要的，能帮助你快速的开发应用工程，以下整理一些关于C++6.0的工具使用方式，经常看看很有帮助，不用一有问题就去google了</content></entry><entry><id>http://www.cnblogs.com/gaojun/archive/2010/04/27/1721811.html</id><title type="text">面向对象的三个基本特征</title><summary type="text">封装封装最好理解了。封装是面向对象的特征之一，是对象和类概念的主要特性。封装，也就是把客观事物封装成抽象的类，并且类可以把自己的数据和方法只让可信的类或者对象操作，对不可信的进行信息隐藏。</summary><published>2010-04-27T02:35:00Z</published><updated>2010-04-27T02:35:00Z</updated><author><name>gaojun</name><uri>http://www.cnblogs.com/gaojun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gaojun/archive/2010/04/27/1721811.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gaojun/archive/2010/04/27/1721811.html"/><content type="text">封装封装最好理解了。封装是面向对象的特征之一，是对象和类概念的主要特性。封装，也就是把客观事物封装成抽象的类，并且类可以把自己的数据和方法只让可信的类或者对象操作，对不可信的进行信息隐藏。</content></entry></feed>
