﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-玩转C科技.NET</title><link>http://www.cnblogs.com/volnet/</link><description>每天都在学习，每天都在退步
为什么？世界发展太快！
怎么办？加快学习速度！
如何做？关注.NET社区
进阶中……        </description><language>zh-cn</language><lastBuildDate>Thu, 24 Jul 2008 13:01:56 GMT</lastBuildDate><pubDate>Thu, 24 Jul 2008 13:01:56 GMT</pubDate><ttl>60</ttl><item><title>《从零到知道》(《from0toknow》)专题更新完毕！欢迎前往下载/在线阅读！</title><link>http://www.cnblogs.com/volnet/articles/483421.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 14:43:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/articles/483421.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/483421.html</wfw:comment><comments>http://www.cnblogs.com/volnet/articles/483421.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/483421.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/483421.html</trackback:ping><description><![CDATA[<div class=post>
<div class=post>
<h5>一个关于VC++的专题终于还是写完了，主要是关于VC++，MFC开发的部分知识。其中挺重要的两块,网络和数据库没有写进来，原因主要是因为这两块面比较广，而且也是很重点的，网上随便搜索都能搜索得到很多教程之类的。因此我就没有大费周章来这里写了。这个专题我取名叫《从零到知道》(《from0toknow》)。因为都是一些浅层的知识，对入门的门槛要求比较低。知识是比较陈旧的MFC，但是也是很实用的东西，基本思想等内容还是很受用的。</h5>
<h5>主要特点：《从零到知道》(《from0toknow》)之所以取这个名字，顾名思义是起个入门的作用，文章立足于动手实验，但是不乏理论指导，能提到点到的都记录着呢。学习，最好能看到成效，能做出点东西来，大家就看得比较过瘾，也比较有动力。但是很多朋友在看文档的时候或者由于不是很注意，或者由于文档有疏漏，常常很难编译通过。因此我特地把同步代码更新到相应的压缩包中了。下载压缩包可以获得全部附着代码文档和彩色图文解说的完整版（原因见下）。<span style="COLOR: #808080">原因：写它们的时候我是使用WORD，因此有很多图片都贴进去了。在同步更新到Blog后，丢失了很多图片，可能会影响阅读。由于时间有限不能仔细修改，因此直接把他们分别打包起来了放在相应标题的旁边，大家可以点击下载！</span>所有代码均经过测试，详见附录！</h5>
<h5>以下是本专题在CNBLOGS的文章链接，文章并未附图，如果因为缺失图片而影响阅读，请点旁边的链接下载后用AdobeReader进行阅读。相关代码的开发环境请见附录。</h5>
<p>Contents</p>
<h5>[1]<font color=#223355><a class=titlelink id=Editor_Results_rprSelectionList_ctl04_Hyperlink1 href="http://www.cnblogs.com/volnet/articles/472791.html"><font color=#000000>用预编译指令符避免多文件工程中重复定义的问题&nbsp;</font></a> </font><font color=#000000>[文档代码下载]：</font><a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_c++_pdf.rar"><font color=#002c99>《from0toknow》_c++_pdf.rar</font></a></h5>
<h5>[2]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl12_TitleUrl href="http://www.cnblogs.com/volnet/articles/472794.html"><font color=#223355>关于MFC画图的一些总结，MFC （Draw）</a>&nbsp;<font color=#000000>[文档代码下载]：</font><a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_Draw_pdf_code.rar"><font color=#002c99>《from0toknow》_Draw_pdf_code.rar</font></a></font></h5>
<h5>[3]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl11_TitleUrl href="http://www.cnblogs.com/volnet/articles/472796.html"><font color=#223355>Text文本类的部分操作</a>&nbsp;<font color=#000000>[文档代码下载]：</font><a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_Text_pdf_code.rar"><font color=#002c99>《from0toknow》_Text_pdf_code.rar</font></a></font></h5>
<h5>[4]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl10_TitleUrl href="http://www.cnblogs.com/volnet/articles/472797.html"><font color=#223355>Menu-静态菜单和动态菜单</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_Menu_pdf_code.rar"><font color=#002c99>《from0toknow》_Menu_pdf_code.rar</font></a></h5>
<h5>[5]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl09_TitleUrl href="http://www.cnblogs.com/volnet/articles/472799.html"><font color=#223355>对话框资源的各种属性方法的使用</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_Dialog_pdf_code.rar"><font color=#002c99>《from0toknow》_Dialog_pdf_code.rar</font></a></h5>
<h5>[6]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl08_TitleUrl href="http://www.cnblogs.com/volnet/articles/472801.html"><font color=#223355>属性表单——向导的创建</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_DialogControl_pdf_code.rar"><font color=#002c99>《from0toknow》_DialogControl_pdf_code.rar</font></a></h5>
<h5>[7]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl07_TitleUrl href="http://www.cnblogs.com/volnet/articles/475014.html"><font color=#223355>窗体类型的各种变换</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_WndStyle_pdf_code.rar"><font color=#002c99>《from0toknow》_WndStyle_pdf_code.rar</font></a></h5>
<h5>[8]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl06_TitleUrl href="http://www.cnblogs.com/volnet/articles/477678.html"><font color=#223355>图像Graphic的相关处理</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_Graphic_pdf_code.rar"><font color=#002c99>《from0toknow》_Graphic_pdf_code.rar</font></a></h5>
<h5>[9]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl05_TitleUrl href="http://www.cnblogs.com/volnet/articles/477680.html"><font color=#223355>窗体重绘，图像更新</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_WndUpdatePicRedraw_pdf_code.rar"><font color=#002c99>《from0toknow》_WndUpdatePicRedraw_pdf_code.rar</font></a></h5>
<h5>[10]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl04_TitleUrl href="http://www.cnblogs.com/volnet/articles/477682.html"><font color=#223355>文件读写和注册表读写</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_File_pdf_code.rar"><font color=#002c99>《from0toknow》_File_pdf_code.rar</font></a></h5>
<h5>[11]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl03_TitleUrl href="http://www.cnblogs.com/volnet/articles/478877.html"><font color=#223355>文档序列化（理论+实际）</font></a> [文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_DocSerial_pdf_code.rar"><font color=#002c99>《from0toknow》_DocSerial_pdf_code.rar</font></a>
<h5>[12]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl02_TitleUrl href="http://www.cnblogs.com/volnet/articles/482268.html"><font color=#223355>ActiveX的设计</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_ActiveX_pdf_code.rar"><font color=#002c99>《from0toknow》_ActiveX_pdf_code.rar</font></a></h5>
<h5>[13]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl01_TitleUrl href="http://www.cnblogs.com/volnet/articles/482273.html"><font color=#223355>动态链接库的设计（DLL）</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_dll_pdf_code.rar"><font color=#002c99>《from0toknow》_dll_pdf_code.rar</font></a></h5>
<h5>[14]<a id=CategoryEntryList1_EntryStoryList_Entries_ctl00_TitleUrl href="http://volnet.cnblogs.com/volnet/articles/482873.html"><font color=#223355>Hooks（钩子）_用于监听消息的方法</font></a>&nbsp;[文档代码下载]：<a href="http://www.cnblogs.com/Files/volnet/《from0toknow》_Hooks_pdf_code.rar"><font color=#002c99>《from0toknow》_Hooks_pdf_code.rar</font></a><font color=#223355><br><br></font><font color=#000000>附录：<br>1、开发工具<br>Microsoft Visual Studio.NET 2003（VC++7.1）<br>2、预备知识<br>基本的C语言知识，类的概念，懂得类的功能和用途。有清晰的思路和敏捷的大脑思维能力和方式。<br>3、答疑回访<br>在学习中有任何疑问欢迎发邮件至SupportEmail:mymsdn@163.com或者登陆Blog：<a href="http://volnet.cnblogs.com/">http://volnet.cnblogs.com</a>进入VC++/C++相关专题内在相应文章的版面内评论（提问）。</font></h5>
</h5>
</div>
</div>
     <img src ="http://www.cnblogs.com/volnet/aggbug/483421.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>[WCF]Instance Management</title><link>http://www.cnblogs.com/volnet/archive/2008/07/18/instance_management.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 12:53:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/07/18/instance_management.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/977680.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/07/18/instance_management.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/977680.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/977680.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt"><span style="font-size: 10pt">[<span style="color: red; background-color: yellow"><strong><em><u>有兴趣阅读本文的请从头至尾阅读，有兴趣帮助我解答疑问的请从尾至头读(红色部分)，万分感谢！</u></em></strong></span>]<br />
我们很容易理解在旧有编程模型中关于类实例的内容。设计模式中Singleton也就是在描述着档子事。但基于WCF并非适合于以上场景，Service与Client之间要保持良好的Instance模型则需要依靠很多其他机制。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">Programming WCF Service Chapter4 对此进行了细致的描述。（更多细节请自行阅读～）</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">WCF支持三种类型的Instance管理：</span></span></p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/WCFInstanceManagement_D45/InstanceManagement.gif"><span style="font-size: 12pt"><span style="font-size: 10pt"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="InstanceManagement" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/WCFInstanceManagement_D45/InstanceManagement_thumb.gif" width="692" border="0" /></span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt"> </span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">1、pre-call services：每个客户端请求对应一个instance</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">2、Sessionful services：每个客户端连接对应一个instance</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">3、Singleton services：所有客户端共享一个instance</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">利用Behaviors可以解决这方面的问题（还有一些其他基于&#8220;服务端&#8221;的其他方面的问题可以通过使用behaviors来解决）。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">注：客户端是不知道服务端设置了什么样的behaviors的。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">VS2008MSDN：</span></span><a title="ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/fxref_system.servicemodel/html/88efb135-d425-e5b1-57d6-01a67158c1a5.htm" href="ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/fxref_system.servicemodel/html/88efb135-d425-e5b1-57d6-01a67158c1a5.htm"><span style="font-size: 12pt"><span style="font-size: 10pt">ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/fxref_system.servicemodel/html/88efb135-d425-e5b1-57d6-01a67158c1a5.htm</span></span></a></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">Apply the ServiceBehaviorAttribute attribute to a service implementation to specify service-wide execution behavior. (To specify execution behavior at the method level, use the </span></span><a href="ms-help://ms.vscc.v90/b7318cb1-a396-3398-6382-c7595b5188f5.htm"><span style="font-size: 12pt"><span style="font-size: 10pt">OperationBehaviorAttribute</span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt"> attribute.) This attribute can be applied only to service implementations.</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">ServiceBehaviorAttribute：仅应用于服务实现。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">OperationBehaviorAttribute：用于方法级别。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">//</span><span style="color: #008000">瞧这里什么属性都没有&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IMyContract<br />
{}&nbsp;<br />
</span><span style="color: #008000">//</span><span style="color: #008000">而是设置在了具体服务实现上&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">[ServiceBehavior(InstanceContextMode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;InstanceContextMode.PerSession)]<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyContract&nbsp;:&nbsp;IMyContract,IDisposable&nbsp;<br />
{}</span></div>
<p><br />
设置instance模式类型由ServiceBehaviorAttribute的属性InstanceContextMode进行设置，默认值为</span></span><a href="ms-help://ms.vscc.v90/d398567a-e231-1ff2-d53b-c3b2168beacd.htm"><span style="font-size: 12pt"><span style="font-size: 10pt">PerSession</span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt">.</span></span></p>
<h2><span style="font-size: 12pt"><span style="font-size: 10pt">Per-Call Services</span></span></h2>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">只有当客户端调用的时候才有instance。 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">为了说明问题，书中用了很形象的例子。 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">Code:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IMyContract<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;GetData(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;value);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
&nbsp;&nbsp;&nbsp;&nbsp;CompositeType&nbsp;GetDataUsingDataContract(CompositeType&nbsp;composite);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;service&nbsp;operations&nbsp;here</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Count();<br />
}<br />
[ServiceBehavior(InstanceContextMode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;InstanceContextMode.PerCall)]<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyContract&nbsp;:&nbsp;IMyContract,IDisposable<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Other&nbsp;Members</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MyContract()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">WcfServiceLibrary1.MyContract()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;IMyContract&nbsp;Members</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Count()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">Counter&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;count);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000">&nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;IDisposable&nbsp;Members&nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Dispose()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">WcfServiceLibrary1.Dispose()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br />
}<br />
</span><span style="color: #008000">//</span><span style="color: #008000">Tester</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
ServiceReference1.MyContractClient&nbsp;proxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConsoleApplication1.ServiceReference1.MyContractClient();&nbsp;<br />
<br />
proxy.Count();<br />
proxy.Count();<br />
proxy.Count();<br />
<br />
proxy.Close();<br />
Console.ReadKey();<br />
</span></div>
<p></span></span><span style="font-size: 12pt"><span style="font-size: 10pt">结果为：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
WcfServiceLibrary1.Dispose()<br />
WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
WcfServiceLibrary1.Dispose()<br />
WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
WcfServiceLibrary1.Dispose() </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">很明显，每次的值都是0+1的结果，这正说明了percall的方式是每个请求一个Instance的。</span></span></p>
<h2><span style="font-size: 12pt"><span style="font-size: 10pt">Per-Session Services</span></span></h2>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">修改上面的例子：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">为：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">结果为：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
Counter = 2<br />
Counter = 3<br />
WcfServiceLibrary1.Dispose() </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">很明显Instance只有一个了。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">我们WcfServiceLibrary默认的Bind是wsHttpBinding，但若是basicHttpBinding，由于每个http到达服务端都是一个新的连接，因此服务端无法判断是哪个连接。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">增加服务端app.config中Endpoint。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">&lt;endpoint address="basic" binding="basicHttpBinding" name="basic" contract="WcfServiceLibrary1.IMyContract" /&gt; </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">重新导入后修改Program里的程序：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">ServiceReference1.MyContractClient proxy = new ConsoleApplication1.ServiceReference1.MyContractClient("basic"); </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">或 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">ServiceReference1.MyContractClient proxy = new ConsoleApplication1.ServiceReference1.MyContractClient("WSHttpBinding_IMyContract"); </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">其中basic和WSHttpBinding_IMyContract为两种不同形式的服务在客户端的Endpoint.Name。 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">之前默认WSHttpBinding_IMyContract，现在由于存在多个Endpoint，则需要显示指定。 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">现指定为basic。再次运行，结果：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
WcfServiceLibrary1.Dispose()<br />
WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
WcfServiceLibrary1.Dispose()<br />
WcfServiceLibrary1.MyContract()<br />
Counter = 1<br />
WcfServiceLibrary1.Dispose() </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">其结果与PerCall是相同的。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">通过SessionId可以获得Instance的SessionId</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">使用Per-Session方式可以通过设置SessionMode属性（允许、必须、不允许三种枚举）。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">SessionMode：Gets or sets a value that indicates whether a session is required by the contract.</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">SessionMode 枚举</span></span><a title="http://msdn2.microsoft.com/zh-cn/library/system.servicemodel.sessionmode.aspx" href="http://msdn2.microsoft.com/zh-cn/library/system.servicemodel.sessionmode.aspx"><span style="font-size: 12pt"><span style="font-size: 10pt">http://msdn2.microsoft.com/zh-cn/library/system.servicemodel.sessionmode.aspx</span></span></a></p>
<table cellspacing="0" cellpadding="2" width="619" border="1">
    <tbody>
        <tr>
            <td valign="top" width="600">
            <p><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>Allowed(允许)</strong><br />
            Specifies that the contract supports sessions if the incoming binding supports them. </span></span>
            <p><span style="font-size: 12pt"><span style="font-size: 10pt">如果绑定支持Session的话，则让其支持，否则按照可以支持的方式，比如PerCall的方式进行支持。 </span></span></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="600">
            <p><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>Required</strong><strong>(必须)</strong> <br />
            Specifies that the contract requires a sessionful binding. An exception is thrown if the binding is not configured to support session. </span></span>
            <p><span style="font-size: 12pt"><span style="font-size: 10pt">指定契约必须使用Sessionful的方式。如果不支持，则抛出异常。 </span></span></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="600">
            <p><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>NotAllowed</strong><strong>(不允许)</strong> <br />
            Specifies that the contract never supports bindings that initiate sessions. </span></span>
            <p><span style="font-size: 12pt"><span style="font-size: 10pt">指定不能使用Sessionful的方式。作者推荐是用NotAllowed的时候仅用PerCall方式。</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">刚才由于我添加了basic的方式，因为默认选中Allowed，因此刚才的之所以结果与PerCall相同，是因为它，下面我将其修改为Required。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">将</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">[ServiceContract] </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">修改为</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">[ServiceContract(SessionMode=SessionMode.Required)] </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">结果为一个运行时错误：</span></span></p>
<table cellspacing="0" cellpadding="2" width="600" border="1">
    <tbody>
        <tr>
            <td valign="top" width="600">
            <p><span style="font-size: 12pt"><span style="font-size: 10pt">System.InvalidOperationException: Contract requires Session, </span></span><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>but Binding 'BasicHttpBinding' doesn't support it or isn't configured properly to support it.<br />
            </strong>&nbsp;&nbsp; at System.ServiceModel.Description.DispatcherBuilder.BuildChannelListener(StuffPerListenUriInfo stuff, ServiceHostBase serviceHost, Uri listenUri, ListenUriMode listenUriMode, Boolean supportContextSession, IChannelListener&amp; result)<br />
            &nbsp;&nbsp; at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)<br />
            &nbsp;&nbsp; at System.ServiceModel.ServiceHostBase.InitializeRuntime()<br />
            &nbsp;&nbsp; at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)<br />
            &nbsp;&nbsp; at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)<br />
            &nbsp;&nbsp; at System.ServiceModel.Channels.CommunicationObject.Open()<br />
            &nbsp;&nbsp; at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">但是若使用wsHttpBinding，但却without security and without reliable messaging也将无法维持transport-level session。</span></span></p>
<table cellspacing="0" cellpadding="2" width="600" border="1">
    <tbody>
        <tr>
            <td valign="top" width="600">
            <p><span style="font-size: 12pt"><span style="font-size: 10pt">添加如下代码到app.config(Service)（指定其为无安全并且不可靠消息）</span></span></p>
            <span style="font-size: 12pt"><span style="font-size: 10pt">
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.serviceModel</span><span style="color: #0000ff">&gt;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Other&nbsp;service&nbsp;Model&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bindings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">wsHttpBinding</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">binding&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="wsBinding"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">reliableSession&nbsp;</span><span style="color: #ff0000">enabled</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="None"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">binding</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">wsHttpBinding</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bindings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.serviceModel</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /></span></div>
            <p></span></span>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="600">
            <p><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;</p>
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span><span style="color: #800000">endpoint&nbsp;</span><span style="color: #ff0000">address</span><span style="color: #0000ff">=""</span><span style="color: #ff0000">&nbsp;binding</span><span style="color: #0000ff">="wsHttpBinding"</span><span style="color: #ff0000">&nbsp;contract</span><span style="color: #0000ff">="WcfServiceLibrary1.IMyContract"</span><span style="color: #ff0000">&nbsp;bindingConfiguration</span><span style="color: #0000ff">="wsBinding"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span></div>
            <p><br />
            增加绑定配置为wsBinding</span></span></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="600"><span style="font-size: 12pt"><span style="font-size: 10pt">确保服务端程序为：<br />
            [ServiceContract(SessionMode = SessionMode.Allowed)]<br />
            (或者没设)<br />
            [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]</span></span></td>
        </tr>
    </tbody>
</table>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">运行结果与PerCall的结果相同。其原因也就是因为wsHttpBinding未设置安全可靠的Session。</span></span></p>
<h4><span style="font-size: 12pt"><span style="font-size: 10pt">超时</span></span></h4>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">inactivityTimeout：超时时间</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">在连接空闲的情况下，以客户端和服务端的超时时间中最短的那个来决定是否移除Instance，若之后再调用则会抛出异常。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">作者额外注明可以采用：</span></span><a href="http://msdn2.microsoft.com/zh-cn/library/system.servicemodel.servicebehaviorattribute.automaticsessionshutdown.aspx"><span style="font-size: 12pt"><span style="font-size: 10pt">AutomaticSessionShutdown</span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt">属性。其设置为true则当proxy.Close()的时候自动关闭Session，设为false的时候则只有在服务端将服务关闭才会关闭Session。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">但是，若将其修改为NotAllowed</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">则结果与PerCall相同(手动写为PerSession)。(不管服务配置如何，它总会是PerCall。因为TCP和IPC协议总是维持transport level，你不能将它们配置SessionMode.NotAllowed，它们会在服务载入时进行验证。作者建议是&#8220;在选择使用SessionMode.NotAllowed的同时，将服务配置为PerCall&#8221;。)</span></span></p>
<h2><span style="font-size: 12pt"><span style="font-size: 10pt">Singleton Service</span></span></h2>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">Singleton，顾名思义就是仅有一个Instance，供所有客户端调用。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">在说明问题之前先修改上面的例子：</span></span></p>
<table cellspacing="0" cellpadding="2" width="600" border="1">
    <tbody>
        <tr>
            <td valign="top" width="600">
            <h5><span style="font-size: 12pt"><span style="font-size: 10pt">//[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]</span></span></h5>
            <h5><span style="font-size: 12pt"><span style="font-size: 10pt">//[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]</span></span></h5>
            <h5><span style="font-size: 12pt"><span style="font-size: 10pt">为：</span></span></h5>
            <h5><span style="font-size: 12pt"><span style="font-size: 10pt">[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]</span></span></h5>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><span style="font-size: 12pt"><span style="font-size: 10pt">Tester中：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServiceReference1.MyContractClient&nbsp;proxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConsoleApplication1.ServiceReference1.MyContractClient(</span><span style="color: #000000">"</span><span style="color: #000000">WSHttpBinding_IMyContract</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.Endpoint.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.InnerChannel.SessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.Endpoint.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.InnerChannel.SessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">_________________________________________________________</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServiceReference1.MyContractClient&nbsp;proxy1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConsoleApplication1.ServiceReference1.MyContractClient(</span><span style="color: #000000">"</span><span style="color: #000000">WSHttpBinding_IMyContract</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy1.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy1.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy1.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy1.Endpoint.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy1.InnerChannel.SessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy1.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy1.Endpoint.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy1.InnerChannel.SessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">_________________________________________________________</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServiceReference1.MyContractClient&nbsp;proxy2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConsoleApplication1.ServiceReference1.MyContractClient(</span><span style="color: #000000">"</span><span style="color: #000000">basic</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy2.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy2.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy2.Count();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy2.Endpoint.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy2.InnerChannel.SessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;proxy2.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy2.Endpoint.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy2.InnerChannel.SessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">_________________________________________________________</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />
}<br />
</span></div>
<p><br />
运行的结果：(Output&lt;Debug&gt;)</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//客户端调用前 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//...<br />
//其他代码<br />
//...<br />
WcfServiceLibrary1.MyContract()<br />
//...<br />
//其他代码<br />
//... </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//客户端调用后 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//...<br />
//其他代码<br />
//...<br />
Counter = 1<br />
Counter = 2<br />
Counter = 3<br />
Counter = 4<br />
Counter = 5<br />
Counter = 6<br />
Counter = 7<br />
Counter = 8<br />
Counter = 9<br />
//...<br />
//其他代码<br />
//... </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">从Counter的值看来，多个proxy调用的是同一个Instance。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">值得一提的是WcfServiceLibrary1.MyContract()，也就是构造函数的调用时间是在Service启动的时候，而PerCall与Sessionful构造函数调用时间都是在proxy调用之时。而且只有当Host关闭的时候才会Dispose()。</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">MSDN：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">If the </span></span><a href="ms-help://ms.vscc.v90/43f2ffba-0420-908c-0409-9f662cf03836.htm"><span style="font-size: 12pt"><span style="font-size: 10pt">InstanceContextMode</span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt"> value is set to Single the result is that your service can only process one message at a time unless you also set the </span></span><a href="ms-help://ms.vscc.v90/a66ad8f8-f6b7-ee5b-7c2e-45a60d8233c8.htm"><span style="font-size: 12pt"><span style="font-size: 10pt">ConcurrencyMode</span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt"> value to </span></span><a href="ms-help://ms.vscc.v90/15f697bf-478b-ae95-499a-29fb4df69bd9.htm"><span style="font-size: 12pt"><span style="font-size: 10pt">Multiple</span></span></a><span style="font-size: 12pt"><span style="font-size: 10pt">. </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">也就是说除非将服务设置成多线程的，否则在一个时间只能处理一个消息请求。</span></span></p>
<h4><span style="font-size: 12pt"><span style="font-size: 10pt">从HOST端控制SingletonInstance</span></span></h4>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">方式一：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">修改代码：</span></span></p>
<table cellspacing="0" cellpadding="2" width="600" border="1">
    <tbody>
        <tr>
            <td valign="top" width="600">
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
            <img id="Codehighlighter1_32_1173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_1173_Open_Text.style.display='none'; Codehighlighter1_32_1173_Closed_Image.style.display='inline'; Codehighlighter1_32_1173_Closed_Text.style.display='inline';" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_32_1173_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_32_1173_Closed_Text.style.display='none'; Codehighlighter1_32_1173_Open_Image.style.display='inline'; Codehighlighter1_32_1173_Open_Text.style.display='inline';" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_32_1173_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_32_1173_Open_Text"><span style="color: #000000">{<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Uri&nbsp;baseAddress&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Uri(http:</span><span style="color: #008000">//</span><span style="color: #008000">localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/MyContract/);</span><span style="color: #008000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WcfServiceLibrary1.MyContract&nbsp;singleInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WcfServiceLibrary1.MyContract();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;singleInstance.CountProperty&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">200</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">设置初始值200</span><span style="color: #008000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;System.ServiceModel.ServiceHost&nbsp;host&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.ServiceModel.ServiceHost(singleInstance);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;host.AddServiceEndpoint(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(WcfServiceLibrary1.IMyContract),&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WSHttpBinding(),&nbsp;baseAddress);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;host.Open();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">host&nbsp;state&nbsp;=&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;host.State.ToString());&nbsp;<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;ServiceReference1.MyContractClient&nbsp;proxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConsoleApplication1.ServiceReference1.MyContractClient(</span><span style="color: #000000">"</span><span style="color: #000000">WSHttpBinding_IMyContract</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;proxy.Count();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;proxy.Count();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;singleInstance.CountProperty&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">修改singletonInstance.CountProperty为100</span><span style="color: #008000"><br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;proxy.Count();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.Endpoint.Name);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.InnerChannel.SessionId);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;proxy.Close();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.Endpoint.Name);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(proxy.InnerChannel.SessionId);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">_________________________________________________________</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();&nbsp;<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;host.Close();<br />
            <img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="600"><font style="font-size: 10pt" face="Courier New">向<br />
            public class MyContract <br />
            添加属性：<br />
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;CountProperty<br />
            {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000"><br />
            &nbsp;&nbsp;&nbsp;&nbsp;{<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;}<br />
            }</span></div>
            </font></td>
        </tr>
    </tbody>
</table>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">无须启动WcfServiceLibrary1（将用外部Host进行启动）直接运行客户端程序：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">结果：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//客户端调用前 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//...<br />
//其他代码<br />
//...<br />
WcfServiceLibrary1.MyContract()<br />
//...<br />
//其他代码<br />
//... </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//客户端调用后 </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">//...<br />
//其他代码<br />
//...<br />
Counter = 201<br />
Counter = 202<br />
Counter = 101<br />
//...<br />
//其他代码<br />
//... </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">方式二：</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">通过OperationContext.Current.Host 来获取当前进程的host</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">此方法我暂时未调出来，大家有想到或做到的麻烦告诉我！</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">ServiceHost&nbsp;host&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OperationContext.Current.Host&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;ServiceHost;<br />
MyContract&nbsp;singletonInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;host.SingletonInstance&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;MyContract;<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(singletonInstance&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;singletonInstance.CountProperty&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DateTime.Now.Second;&nbsp;</span></div>
<p></span></span>&nbsp;
<p><span style="color: red"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>先假设以上方法可行吧。</strong> </span></span></span>
<p><span style="color: red"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>现在我遇到的问题：</strong> </span></span></span>
<p><span style="color: red"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>1、OperationContext.Current这里的（MSDN:Gets or sets the execution context for the current thread. <br />
）current thread是指我ConsoleApplication也就是Client的线程呢，还是指Service端的线程？（据我常理分析应该是服务端的线程）。理论上我应该在Count()方法内写这段代码，但是问题又涉及到通过Client端进行调用时是使用proxy，这样真正的情况会是怎样呢？</strong> </span></span></span>
<p><span style="color: red"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>2、因此我又写了一个在一个ConsoleApplication里完成服务的代码，此时在host.SingletonInstance的确是被赋值了(不再是null了)，但是紧接着我调用OperationContext.Current却发现其为null，也就是说这里的OperationContext并没有被赋值。继而将其转移到同在一个程序内的MyContract.Count()方法中，但是其值仍然为空，因此此法再度失效。</strong> </span></span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt"><strong><span style="color: red">希望作为高手的您能够提供一个使用OperationContext.Current的场景。什么样算是OperationContext的当前线程？</span></strong> </span></span>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;</span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt">推荐阅读：</span></span></p>
<p><a title="http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/WCFEssentials.mspx?mfr=true" href="http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/WCFEssentials.mspx?mfr=true"><span style="font-size: 12pt"><span style="font-size: 10pt">http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/WCFEssentials.mspx?mfr=true</span></span></a></p>
   <img src ="http://www.cnblogs.com/volnet/aggbug/977680.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>用预编译指令符避免多文件工程中重复定义的问题 </title><link>http://www.cnblogs.com/volnet/articles/cpp_define.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 12:31:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/articles/cpp_define.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/472791.html</wfw:comment><comments>http://www.cnblogs.com/volnet/articles/cpp_define.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/472791.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/472791.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US>1</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、用预编译指令符可以避免在多文件工程中调用文件的时候可能出现的重复定义的现象。</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如：</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt">Main.cpp<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Animal.h&#8221;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Fish.h&#8221;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">&#8230;&#8230;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt">Animal.h<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt">Fish.h<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Animal.h&#8221;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">class Fish():public Animal<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此在调用</span><span lang=EN-US style="FONT-SIZE: 9pt">Main.cpp</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候先运行</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">1</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8594;</span><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Animal.h&#8221;<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"></span></span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-border-alt: solid windowtext .5pt">复制</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt">Animal.h</span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-border-alt: solid windowtext .5pt">过来</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">2</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8594;</span><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Fish.h&#8221;<span style="mso-tab-count: 1"> </span></span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-border-alt: solid windowtext .5pt">复制</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt">Fish.h</span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-border-alt: solid windowtext .5pt">过来</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Animal.h&#8221;<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"></span></span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-border-alt: solid windowtext .5pt">复制</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt">Animal.h</span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-border-alt: solid windowtext .5pt">过来</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; FONT-SIZE: 9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Fish():public Animal<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">&#8230;&#8230;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此最后的文件应该是形如：</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Fish():public Animal<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此重复定义了类</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是显而易见的。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这时候引入<span style="COLOR: blue">预编译指令符</span>的方法来避免这样的现象来发生。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设在最后的文件中我们来补充<span style="COLOR: blue">预编译指令符</span>的方法：</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><span style="COLOR: blue">#ifndef<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="COLOR: #99cc00">//</span></strong></span><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则转向</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">endif</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#define<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么就定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#endif<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p>&nbsp;</o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#ifndef<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则转向</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">endif</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#define<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么就定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#endif<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">class Fish():public Animal<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">添加蓝色部分就可以避免重复定义了。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此可以在多文本文件中做如下修改：</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><u><span lang=EN-US style="FONT-SIZE: 9pt">Main.cpp<o:p></o:p></span></u></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Animal.h&#8221;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Fish.h&#8221;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">&#8230;&#8230;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><u><span lang=EN-US style="FONT-SIZE: 9pt">Animal.h<o:p></o:p></span></u></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#ifndef<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则转向</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">endif</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#define<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么就定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">class Animal()<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#endif<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><u><span lang=EN-US style="FONT-SIZE: 9pt">Fish.h<o:p></o:p></span></u></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">#include &#8220;Animal.h&#8221;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#ifndef<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则转向</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">endif</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#define<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ABCD<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">//</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: #99cc00; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么就定义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #99cc00">ABCD</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">class Fish():public Animal<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="FONT-SIZE: 9pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue">#endif<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样当</span><span lang=EN-US style="FONT-SIZE: 9pt">Main.cpp</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在编译的时候就会忽略重复的定义而避免错误的产生了。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
 <img src ="http://www.cnblogs.com/volnet/aggbug/472791.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>Text文本类的部分操作</title><link>http://www.cnblogs.com/volnet/articles/cpp_text.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 12:30:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/articles/cpp_text.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/472796.html</wfw:comment><comments>http://www.cnblogs.com/volnet/articles/cpp_text.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/472796.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/472796.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">基本是基于</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt">WND::CDC</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的一些显示类的调用</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">本文的工程主要是描述一个文本编辑器的开发过程。</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">一、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">文本编辑器的基本特征</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; tab-stops: list 42.0pt; mso-list: l0 level1 lfo2"><span lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">需要一个光标用来指示当前输入字符</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; tab-stops: list 42.0pt; mso-list: l0 level1 lfo2"><span lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">能处理文字输入（包括删除等基本字处理能力）</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">二、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">设计光标</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">光标一开始就会存在，因此在初始化</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt">View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">类的时候就要将光标添加进去。</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">首先要创建一个光标对象，可以使用函数：</span><span lang=EN-US style="FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">CreateSolidCaret</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><span lang=EN-US style="FONT-SIZE: 9pt">Creates a solid rectangle for the system caret and claims ownership of the caret.<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><strong><span lang=EN-US style="FONT-SIZE: 9pt">void</span></strong><span lang=EN-US style="FONT-SIZE: 9pt"> <strong>CreateSolidCaret(</strong><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><strong><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int</span></strong><span lang=EN-US style="FONT-SIZE: 9pt"> <em><span style="mso-field-code: ' HYPERLINK '''"><span class=MsoHyperlink><u><font color=#0000ff>nWidth</font></u></span></span></em><strong>,</strong><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><strong><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int</span></strong><span lang=EN-US style="FONT-SIZE: 9pt"> <em><span style="mso-field-code: ' HYPERLINK '''"><span class=MsoHyperlink><u><font color=#0000ff>nHeight</font></u></span></span></em> <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><strong><span lang=EN-US style="FONT-SIZE: 9pt">);<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">而该函数需要</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">个参数</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt">nWidth,nHeight<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-ALIGN: left; mso-para-margin-left: 1.0gd; mso-pagination: widow-orphan" align=left><em><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">nWidth</span></em><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 46.5pt; TEXT-ALIGN: left; mso-para-margin-left: 4.43gd; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Specifies the width of the caret (in logical units). If this parameter is 0, the width is set to the system-defined window-border width. <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-ALIGN: left; mso-para-margin-left: 1.0gd; mso-pagination: widow-orphan" align=left><em><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">nHeight</span></em><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 46.5pt; TEXT-ALIGN: left; mso-para-margin-left: 4.43gd; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Specifies the height of the caret (in logical units). If this parameter is 0, the height is set to the system-defined window-border height. <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">而我们知道，我们所需要的光标最好能和当前要输入的字符的尺寸的高度是一致的，且成条形的（假设现在模仿<span lang=EN-US>WORD</span>等经典字处理模式的特征）。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">因此我们需要获取当前文字的一些属性才可以判断光标的宽高。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">可以使用</span><a name=_mfc_cdc.3a3a.gettextmetrics></a><span lang=EN-US>CDC::GetTextMetrics </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用来获取一个当前字体的度量值。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Retrieves the metrics for the current font using the attribute device context.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US>BOOL</span></strong><span lang=EN-US> <strong>GetTextMetrics(</strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>LPTEXTMETRIC</span></strong><span lang=EN-US> <em><span style="mso-field-code: ' HYPERLINK '''"><span class=MsoHyperlink><u><font color=#0000ff>lpMetrics</font></u></span></span></em> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US>)</span></strong><span lang=EN-US> <strong>const;</strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><em style="mso-bidi-font-style: normal"><span lang=EN-US style="mso-font-kerning: 0pt">lpMetrics </span></em><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">：</span><span lang=EN-US style="mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="mso-font-kerning: 0pt">Points to the TEXTMETRIC structure that receives the metrics. <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">因此需要先定义一个</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt">TEXTMETRIC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的变量，然后利用它来传递字体的参数。</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>CClientDC dc(<span style="COLOR: blue">this</span>);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>TEXTMETRIC tm;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>dc.GetTextMetrics(&amp;tm);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">在获取了参数之后就要把拥有当前参数传进光标对象并将其显示出来。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);<span style="mso-tab-count: 1"> </span><span style="COLOR: green">// tm.tmAveCharWidth/8</span></span><span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">除以<span lang=EN-US>8</span>的目的在于能够以一个竖线的形状显示。这个<span lang=EN-US>8</span>可以通过反复测试选择合适的值。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>ShowCaret();<span style="mso-tab-count: 1">&nbsp; </span><span style="COLOR: green">//</span></span><span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">有了对象还要调用其下这个方法才可以显示出来。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">补充：</span></strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">bitmap.LoadBitmap(IDB_BITMAP1);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>CreateCaret(&amp;bitmap);</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">如果要使用位图来作为光标，那么需要换一下光标的内容，在</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt">ShowCaret()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">函数前输入以上两句。</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt">IDB_BITMAP1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">可以在添加资源中添加。</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">三、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">处理文字输入</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">文字输入需要捕获键盘的输入信息，也就是识别每个不同的按键的值，应交由</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt">WM_CHAR(</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">由</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt">WM_KEYDOWN,WM_KEYUP</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">两个消息在</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp; </span>TranslateMessage(&amp;msg);</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">和<span lang=EN-US><o:p></o:p></span></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">DispatchMessage(&amp;msg);</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">的共同作用下产生的</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt">)</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。因此应该在</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt">WM_CHAR</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">消息下完成输入代码的处理。</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">添加文字现在采用一个字符串</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt">CString</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">对象来保存所有光标前的值，然后将之前的值在窗体重绘后再次输出。</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: red; mso-bidi-font-size: 10.5pt">Error! Error! Error! Error! Error! Error! Error! Error! Error! Error! Error! Error! <o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">操作环境：</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: red; mso-bidi-font-size: 10.5pt">VS.NET2003 VC++7.0<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: green; mso-bidi-font-size: 10.5pt">WM_CHAR</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中捕获键盘按下字符。</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: green; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: green; mso-bidi-font-size: 10.5pt">UINT nChar;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: green; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: green; mso-bidi-font-size: 10.5pt">CString m_strLine+=nChar;<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>//+=</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">操作符重载出错！</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: green; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: red; mso-bidi-font-size: 10.5pt">Error! Error! Error! Error! Error! Error! Error! Error! Error! Error! Error! Error!<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p><br>代码下载：<a title=code_Text href="http://www.cnblogs.com/Files/volnet/code_Text.rar">code_Text</a></o:p></span></strong></p>
 <img src ="http://www.cnblogs.com/volnet/aggbug/472796.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>关于MFC画图的一些总结，MFC （Draw）</title><link>http://www.cnblogs.com/volnet/articles/cpp_about_draw.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 12:30:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/articles/cpp_about_draw.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/472794.html</wfw:comment><comments>http://www.cnblogs.com/volnet/articles/cpp_about_draw.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/472794.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/472794.html</trackback:ping><description><![CDATA[摘要: 首先对按下鼠标的一点进行记录，因此在WM_LBUTTONDOWN添加代码：void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 m_ptOrigin=point; CView::OnLButtonDown(nFlags, point);}再次记录鼠标弹起WM_LBUTTONUP&nbsp;&nbsp;<a href='http://www.cnblogs.com/volnet/articles/cpp_about_draw.html'>阅读全文</a><img src ="http://www.cnblogs.com/volnet/aggbug/472794.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>对话框资源的各种属性方法的使用 </title><link>http://www.cnblogs.com/volnet/articles/cpp_dialog.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 12:12:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/articles/cpp_dialog.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/472799.html</wfw:comment><comments>http://www.cnblogs.com/volnet/articles/cpp_dialog.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/472799.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/472799.html</trackback:ping><description><![CDATA[摘要: Dialog1、 对话框资源（文本）的获取。//TODO:对话框控件访问七种方式//（1）GetDlgItem()-&gt;Get(Set)WindowText()//（2）GetDlgItemText()/SetDlgItemText()//（3）GetDlgItemInt()/SetDlgItemInt()//（4）将控件和整型变量相关联//（5）将控件和控件变量相关联//（6）SendMes&nbsp;&nbsp;<a href='http://www.cnblogs.com/volnet/articles/cpp_dialog.html'>阅读全文</a><img src ="http://www.cnblogs.com/volnet/aggbug/472799.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>Menu-静态菜单和动态菜单 </title><link>http://www.cnblogs.com/volnet/articles/cpp_menu.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 18 Jul 2008 12:12:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/articles/cpp_menu.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/472797.html</wfw:comment><comments>http://www.cnblogs.com/volnet/articles/cpp_menu.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/472797.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/472797.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'"> </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">静态菜单</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">对</span></strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">CMainFrame::OnCreate</span><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中添加以下代码。</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: green">/*TODO:</span></span><span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">将子菜单中的某一菜单项选中<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>CWnd::GetMenu()-&gt;GetSubMenu(0)-&gt;CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>GetMenu()</span><span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">获取菜单<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>GetSubMenu(0)</span><span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">获取子菜单<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-lay