﻿<?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++博客-Fanze</title><link>http://www.cppblog.com/fanze/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:57:27 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:57:27 GMT</pubDate><ttl>60</ttl><item><title>单例模式</title><link>http://www.cppblog.com/fanze/archive/2013/07/31/202267.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Wed, 31 Jul 2013 14:28:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/07/31/202267.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/202267.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/07/31/202267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/202267.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/202267.html</trackback:ping><description><![CDATA[<div>单例模式: 保证一个类仅有一个实例，并提供一个访问它的全局访问点。</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std&nbsp;;<br /><br />template&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ST{<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;T</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;GetInstance()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_pInstance&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pInstance&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;T&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;m_pInstance&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;T</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;m_pInstance&nbsp;;<br /><br />};<br /><br /></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;\模板静态成员初始化</span><span style="color: #808080; "><br /></span><span style="color: #000000; ">template&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;T</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />T&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;ST</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;T</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::m_pInstance&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(T</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)NULL&nbsp;;<br /><br /><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AB<br />{<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;AB(){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; ">AB(){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Init(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">AB::Init</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;\TEST</span><span style="color: #808080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">ST&lt;AB&gt;&nbsp;ab&nbsp;;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;AB</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pab&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;pab&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ST</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">AB</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::GetInstance()&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;pab&nbsp;=&nbsp;ab.GetInstance()&nbsp;;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;pab</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Init()&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;<br />}</span></div><img src ="http://www.cppblog.com/fanze/aggbug/202267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-07-31 22:28 <a href="http://www.cppblog.com/fanze/archive/2013/07/31/202267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>锁</title><link>http://www.cppblog.com/fanze/archive/2013/07/26/202142.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Fri, 26 Jul 2013 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/07/26/202142.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/202142.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/07/26/202142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/202142.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/202142.html</trackback:ping><description><![CDATA[windows平台下的锁<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;锁，利用临界区实现</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #808080; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ZLock{<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRITICAL_SECTION&nbsp;m_CS&nbsp;;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLock(){<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::InitializeCriticalSection(&amp;m_CS)&nbsp;;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~ZLock(){<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::DeleteCriticalSection(&amp;m_CS)&nbsp;;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">12</span>&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Lock()<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::EnterCriticalSection(&amp;m_CS)&nbsp;;<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">17</span>&nbsp;<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;UnLock()<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::LeaveCriticalSection(&amp;m_CS)&nbsp;;<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;;<br /><span style="color: #008080; ">23</span>&nbsp;<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;自动锁</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #808080; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">自动锁原理：利用类的构造函数，自动加锁，析构函数自动解锁</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ZAutoLock<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLock*&nbsp;m_pLock&nbsp;;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZAutoLock(ZLock*&nbsp;pLock)<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pLock&nbsp;=&nbsp;pLock&nbsp;;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pLock-&gt;Lock()&nbsp;;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">36</span>&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~ZAutoLock()<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pLock-&gt;UnLock()&nbsp;;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</div><img src ="http://www.cppblog.com/fanze/aggbug/202142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-07-26 17:35 <a href="http://www.cppblog.com/fanze/archive/2013/07/26/202142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++抓取天气预报的城市及相应代码</title><link>http://www.cppblog.com/fanze/archive/2013/06/11/200943.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Tue, 11 Jun 2013 11:33:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/06/11/200943.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/200943.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/06/11/200943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/200943.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/200943.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; 最近程序用到了天气预报的东西，网上百度,查了一些资料参考(<span style="font-size: 12px;">http://g.kehou.com/t1029846752.html</span>)。<br />根据资料中的提示，写了个程序，用于抓取所有省及所属城市代码并写入到c:\CityList.mxl 文件中。<br /><br />代码如下：<span style="font-size: 13px; color: #008080;"><br />
1</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;</span><span style="font-size: 13px; color: #008000;">/*</span><span style="font-size: 13px; color: #008000;">*******************************************************************</span>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;created:&nbsp;&nbsp;&nbsp;&nbsp;2013/06/11<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;created:&nbsp;&nbsp;&nbsp;&nbsp;11:6:2013&nbsp;&nbsp;&nbsp;19:11<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;filename:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d:\HETU\Test\WIFetch\WIFetch\main.cpp<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;path:&nbsp;&nbsp;&nbsp;&nbsp;d:\HETU\Test\WIFetch\WIFetch<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;base:&nbsp;&nbsp;&nbsp;&nbsp;main<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;ext:&nbsp;&nbsp;&nbsp;&nbsp;cpp<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fanze<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;purpose:&nbsp;&nbsp;&nbsp;&nbsp;从weather.com.cn抓取城市名称和代码信息<br />
</span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #008000; ">********************************************************************</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">&nbsp;12</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br />
<span style="color: #008080; ">&nbsp;14</span>&nbsp;#include&nbsp;&lt;stdlib.h&gt;<br />
<span style="color: #008080; ">&nbsp;15</span>&nbsp;#include&nbsp;&lt;Windows.h&gt;<br />
<span style="color: #008080; ">&nbsp;16</span>&nbsp;#include&nbsp;&lt;WinInet.h&gt;<br />
<span style="color: #008080; ">&nbsp;17</span>&nbsp;#include&nbsp;&lt;vector&gt;<br />
<span style="color: #008080; ">&nbsp;18</span>&nbsp;#include&nbsp;"ZCharSetUtil.h"<br />
<span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std&nbsp;;<br />
<span style="color: #008080; ">&nbsp;20</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;21</span>&nbsp;#pragma&nbsp;comment(lib&nbsp;,"Wininet")<br />
<span style="color: #008080; ">&nbsp;22</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;NCInfo<br />
<span style="color: #008080; ">&nbsp;24</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Name[32]&nbsp;;<br />
<span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Code[32]&nbsp;;<br />
<span style="color: #008080; ">&nbsp;27</span>&nbsp;};<br />
<span style="color: #008080; ">&nbsp;28</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;29</span>&nbsp;typedef&nbsp;vector&lt;NCInfo*&gt;&nbsp;VTNCInfo&nbsp;;<br />
<span style="color: #008080; ">&nbsp;30</span>&nbsp;typedef&nbsp;vector&lt;NCInfo*&gt;::iterator&nbsp;VTNCInfoIT&nbsp;;<br />
<span style="color: #008080; ">&nbsp;31</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;SLInfo&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;NCInfo<br />
<span style="color: #008080; ">&nbsp;33</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTNCInfo&nbsp;VTCityInfo&nbsp;;<br />
<span style="color: #008080; ">&nbsp;35</span>&nbsp;};<br />
<span style="color: #008080; ">&nbsp;36</span>&nbsp;typedef&nbsp;vector&lt;SLInfo*&gt;&nbsp;VTSLInfo&nbsp;;<br />
<span style="color: #008080; ">&nbsp;37</span>&nbsp;typedef&nbsp;vector&lt;SLInfo*&gt;::iterator&nbsp;VTSLInfoIT&nbsp;;<br />
<span style="color: #008080; ">&nbsp;38</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">enum</span>&nbsp;TASK_DOWNRET<br />
<span style="color: #008080; ">&nbsp;40</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TASK_DOWN_OK&nbsp;=&nbsp;0,<br />
<span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TASK_DOWN_FAIL&nbsp;=&nbsp;1,<br />
<span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TASK_DOWN_CANCEL&nbsp;=&nbsp;2,<br />
<span style="color: #008080; ">&nbsp;44</span>&nbsp;};<br />
<span style="color: #008080; ">&nbsp;45</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pStartToken&nbsp;=&nbsp;"line-content\"&gt;"&nbsp;;<br />
<span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pEndToken&nbsp;=&nbsp;"&lt;/td&gt;"&nbsp;;<br />
<span style="color: #008080; ">&nbsp;48</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;g_strXMLHeader&nbsp;=&nbsp;"&lt;?xml&nbsp;version=\"1.0\"&nbsp;encoding=\"utf-8\"?&gt;\r\n"&nbsp;;<br />
<span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;g_strRootTag&nbsp;=&nbsp;"&lt;list&gt;\r\n"&nbsp;;<br />
<span style="color: #008080; ">&nbsp;51</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;g_strCityListURL&nbsp;=&nbsp;"http://www.weather.com.cn/data/list3/"&nbsp;;<br />
<span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;g_strSLURL&nbsp;=&nbsp;"http://www.weather.com.cn/data/list3/city.xml?level=1"&nbsp;;<br />
<span style="color: #008080; ">&nbsp;54</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;利用wininet下载文件<br />
</span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">static&nbsp;inline&nbsp;TASK_DOWNRET&nbsp;InetDownFile(const&nbsp;TCHAR*&nbsp;strSoureURL&nbsp;,unsigned&nbsp;char*&nbsp;pResultBuf&nbsp;,int&nbsp;nResultBufLen&nbsp;,int*&nbsp;ResultLen)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #808080; "></span>{<br />
<span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HINTERNET&nbsp;hInternet&nbsp;;<br />
<span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HINTERNET&nbsp;hURLInternet&nbsp;;<br />
<span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;Buf[2048]&nbsp;={0}&nbsp;;<br />
<span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwReads&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwTotal&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nSize&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TASK_DOWNRET&nbsp;Ret&nbsp;=&nbsp;TASK_DOWN_OK&nbsp;;<br />
<span style="color: #008080; ">&nbsp;65</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(strSoureURL&nbsp;==&nbsp;NULL&nbsp;||&nbsp;pResultBuf&nbsp;==&nbsp;NULL&nbsp;||&nbsp;ResultLen&nbsp;==&nbsp;0){<br />
<span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TASK_DOWN_FAIL&nbsp;;<br />
<span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;69</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;删除URL缓存，总是从服务器下载最新的文件。<br />
</span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;DeleteUrlCacheEntry(strSoureURL)&nbsp;;</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #808080; "></span><br />
<span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hInternet&nbsp;=&nbsp;InternetOpen(NULL&nbsp;,INTERNET_OPEN_TYPE_DIRECT&nbsp;,<br />
<span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL&nbsp;,NULL&nbsp;,0)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(hInternet&nbsp;==&nbsp;NULL){<br />
<span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TASK_DOWN_FAIL&nbsp;;<br />
<span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;78</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hURLInternet&nbsp;=&nbsp;InternetOpenUrl(hInternet&nbsp;,strSoureURL&nbsp;,NULL&nbsp;,0<br />
<span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_CACHE_WRITE&nbsp;,NULL)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(hURLInternet&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternetCloseHandle(hInternet)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwErr&nbsp;=&nbsp;GetLastError()&nbsp;;<br />
<span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TASK_DOWN_FAIL&nbsp;;<br />
<span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;87</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(InternetReadFile(hURLInternet&nbsp;,Buf&nbsp;,2048&nbsp;,&amp;dwReads))<br />
<span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dwReads&nbsp;==&nbsp;0){<br />
<span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ret&nbsp;=&nbsp;TASK_DOWN_OK&nbsp;;<br />
<span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>&nbsp;;<br />
<span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nSize&nbsp;=&nbsp;((dwTotal&nbsp;+&nbsp;dwReads)&nbsp;&gt;&nbsp;(nResultBufLen&nbsp;-&nbsp;dwTotal))&nbsp;?&nbsp;(nResultBufLen&nbsp;-&nbsp;dwTotal)&nbsp;:&nbsp;dwReads&nbsp;;<br />
<span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(pResultBuf&nbsp;+&nbsp;dwTotal&nbsp;,Buf&nbsp;,dwReads)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwTotal&nbsp;+=&nbsp;dwReads&nbsp;;<br />
<span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;98</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*ResultLen&nbsp;=&nbsp;dwTotal&nbsp;;<br />
<span style="color: #008080; ">100</span>&nbsp;<br />
<span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternetCloseHandle(hURLInternet)&nbsp;;<br />
<span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternetCloseHandle(hInternet)&nbsp;;<br />
<span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Ret&nbsp;;<br />
<span style="color: #008080; ">104</span>&nbsp;}<br />
<span style="color: #008080; ">105</span>&nbsp;<br />
<span style="color: #008080; ">106</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;ParseItem(<span style="color: #0000FF; ">char</span>*&nbsp;str&nbsp;,NCInfo*&nbsp;pInfo)<br />
<span style="color: #008080; ">107</span>&nbsp;{<br />
<span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pPos&nbsp;=&nbsp;str&nbsp;;<br />
<span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pSave&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Temp[32]&nbsp;={0}&nbsp;;<br />
<span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(str&nbsp;==&nbsp;NULL&nbsp;||&nbsp;pInfo&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />
<span style="color: #008080; ">113</span>&nbsp;<br />
<span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSave&nbsp;=&nbsp;pInfo-&gt;Code&nbsp;;<br />
<span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(*pPos&nbsp;!=&nbsp;'\0')<br />
<span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(*pPos&nbsp;=='|')<br />
<span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pInfo-&gt;Code[pInfo-&gt;Code&nbsp;-&nbsp;pSave]&nbsp;;<br />
<span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSave&nbsp;=&nbsp;pInfo-&gt;Name&nbsp;;<br />
<span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">else</span><br />
<span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pSave&nbsp;=&nbsp;*pPos&nbsp;;<br />
<span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSave++&nbsp;;<br />
<span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPos++&nbsp;;<br />
<span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF82ASCII(pInfo-&gt;Name&nbsp;,Temp)&nbsp;;<br />
<span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Name:%s&nbsp;\r\n"&nbsp;,Temp)&nbsp;;<br />
<span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF82ASCII(pInfo-&gt;Code&nbsp;,Temp)&nbsp;;<br />
<span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Code:%s&nbsp;\r\n"&nbsp;,Temp)&nbsp;;<br />
<span style="color: #008080; ">132</span>&nbsp;}<br />
<span style="color: #008080; ">133</span>&nbsp;<br />
<span style="color: #008080; ">134</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Parse(<span style="color: #0000FF; ">char</span>*&nbsp;str&nbsp;,VTNCInfo*&nbsp;pVTInfo)<br />
<span style="color: #008080; ">135</span>&nbsp;{<br />
<span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pPos&nbsp;=&nbsp;str&nbsp;;<br />
<span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Temp[32]&nbsp;;<br />
<span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nIndex&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCInfo*&nbsp;pInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(*pPos&nbsp;!=&nbsp;'\0')<br />
<span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(*pPos&nbsp;==&nbsp;',')<br />
<span style="color: #008080; ">143</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp[nIndex]&nbsp;=&nbsp;'\0'&nbsp;;<br />
<span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;解析一小段<br />
</span><span style="color: #008080; ">146</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pInfo&nbsp;=&nbsp;new&nbsp;NCInfo&nbsp;;</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">147</span>&nbsp;<span style="color: #808080; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(pInfo&nbsp;,0&nbsp;,<span style="color: #0000FF; ">sizeof</span>(NCInfo))&nbsp;;<br />
<span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParseItem(Temp&nbsp;,pInfo)&nbsp;;<br />
<span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pVTInfo-&gt;push_back(pInfo)&nbsp;;<br />
<span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nIndex&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">else</span><br />
<span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp[nIndex]&nbsp;=&nbsp;*pPos&nbsp;;<br />
<span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nIndex&nbsp;++&nbsp;;<br />
<span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">156</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPos++&nbsp;;<br />
<span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(nIndex&nbsp;!=&nbsp;0)<br />
<span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp[nIndex]&nbsp;=&nbsp;'\0'&nbsp;;<br />
<span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pInfo&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;NCInfo&nbsp;;<br />
<span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(pInfo&nbsp;,0&nbsp;,<span style="color: #0000FF; ">sizeof</span>(NCInfo))&nbsp;;<br />
<span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParseItem(Temp&nbsp;,pInfo)&nbsp;;<br />
<span style="color: #008080; ">164</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pVTInfo-&gt;push_back(pInfo)&nbsp;;<br />
<span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">166</span>&nbsp;}<br />
<span style="color: #008080; ">167</span>&nbsp;<br />
<span style="color: #008080; ">168</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;ProcReplyContent(<span style="color: #0000FF; ">char</span>*&nbsp;pSrc&nbsp;,<span style="color: #0000FF; ">char</span>*&nbsp;pSaveBuffer)<br />
<span style="color: #008080; ">169</span>&nbsp;{<br />
<span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pPos&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">171</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pEndPos&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">172</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPos&nbsp;=&nbsp;strstr(pSrc&nbsp;,pStartToken)&nbsp;;<br />
<span style="color: #008080; ">173</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pPos&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />
<span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPos&nbsp;+=&nbsp;strlen(pStartToken)&nbsp;;<br />
<span style="color: #008080; ">176</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEndPos&nbsp;=&nbsp;strstr(pPos&nbsp;,pEndToken)&nbsp;;<br />
<span style="color: #008080; ">177</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pEndPos&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">178</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />
<span style="color: #008080; ">179</span>&nbsp;<br />
<span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strncpy(pSaveBuffer&nbsp;,pPos&nbsp;,pEndPos&nbsp;-&nbsp;pPos)&nbsp;;<br />
<span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSaveBuffer[pEndPos&nbsp;-&nbsp;pPos]&nbsp;=&nbsp;'\0'&nbsp;;<br />
<span style="color: #008080; ">182</span>&nbsp;}<br />
<span style="color: #008080; ">183</span>&nbsp;<br />
<span style="color: #008080; ">184</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;解析省级代码，获取城市列表代码<br />
</span><span style="color: #008080; ">185</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">void&nbsp;ParseSLCityInfo(SLInfo*&nbsp;pSLInfo&nbsp;,VTNCInfo*&nbsp;pCityList)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">186</span>&nbsp;<span style="color: #808080; "></span>{<br />
<span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;RequestURL[128]&nbsp;={0}&nbsp;;<br />
<span style="color: #008080; ">188</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Buf[2048+1]&nbsp;;<br />
<span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Content[1024]&nbsp;;<br />
<span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nResultLen&nbsp;&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">191</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">192</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pSLInfo&nbsp;==&nbsp;NULL&nbsp;||&nbsp;pCityList&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">193</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">194</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;;<br />
<span style="color: #008080; ">195</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">196</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;生成请求URL<br />
</span><span style="color: #008080; ">197</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;sprintf(RequestURL&nbsp;,"%scity%s.xml?level=2"&nbsp;,g_strCityListURL&nbsp;,pSLInfo-&gt;Code)&nbsp;;</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">198</span>&nbsp;<span style="color: #808080; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(InetDownFile(RequestURL&nbsp;,(unsigned&nbsp;<span style="color: #0000FF; ">char</span>*)Buf&nbsp;,2048&nbsp;,&amp;nResultLen)&nbsp;!=&nbsp;TASK_DOWN_OK){<br />
<span style="color: #008080; ">199</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />
<span style="color: #008080; ">200</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">201</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Buf[nResultLen]&nbsp;='\0'&nbsp;;<br />
<span style="color: #008080; ">202</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parse(Buf&nbsp;,pCityList)&nbsp;;<br />
<span style="color: #008080; ">203</span>&nbsp;}<br />
<span style="color: #008080; ">204</span>&nbsp;<br />
<span style="color: #008080; ">205</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;根据省一级的代码获取，所有城市列表<br />
</span><span style="color: #008080; ">206</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">void&nbsp;ParseSLInfo(VTNCInfo*&nbsp;pVTSLList&nbsp;,VTSLInfo*&nbsp;pVTSLInfoList)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">207</span>&nbsp;<span style="color: #808080; "></span>{<br />
<span style="color: #008080; ">208</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTNCInfoIT&nbsp;IT&nbsp;;<br />
<span style="color: #008080; ">209</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SLInfo*&nbsp;pSLInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">210</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCInfo*&nbsp;pNCInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">211</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nIndex&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">212</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">213</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(IT&nbsp;=&nbsp;pVTSLList-&gt;begin()&nbsp;;&nbsp;IT&nbsp;!=&nbsp;pVTSLList-&gt;end()&nbsp;;&nbsp;IT++)<br />
<span style="color: #008080; ">214</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">215</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNCInfo&nbsp;=&nbsp;*IT&nbsp;;<br />
<span style="color: #008080; ">216</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pNCInfo&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">217</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>&nbsp;;<br />
<span style="color: #008080; ">218</span>&nbsp;<br />
<span style="color: #008080; ">219</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSLInfo&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SLInfo&nbsp;;<br />
<span style="color: #008080; ">220</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(pSLInfo-&gt;Name&nbsp;,pNCInfo-&gt;Name)&nbsp;;<br />
<span style="color: #008080; ">221</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(pSLInfo-&gt;Code&nbsp;,pNCInfo-&gt;Code)&nbsp;;<br />
<span style="color: #008080; ">222</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(1000)&nbsp;;<br />
<span style="color: #008080; ">223</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParseSLCityInfo(pSLInfo&nbsp;,&amp;pSLInfo-&gt;VTCityInfo)&nbsp;;<br />
<span style="color: #008080; ">224</span>&nbsp;<br />
<span style="color: #008080; ">225</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pVTSLInfoList-&gt;push_back(pSLInfo)&nbsp;;<br />
<span style="color: #008080; ">226</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nIndex&nbsp;++&nbsp;;<br />
<span style="color: #008080; ">227</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">228</span>&nbsp;}<br />
<span style="color: #008080; ">229</span>&nbsp;<br />
<span style="color: #008080; ">230</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;写入XML文件头<br />
</span><span style="color: #008080; ">231</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">void&nbsp;WriteXMLHeader(FILE*&nbsp;fp)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">232</span>&nbsp;<span style="color: #808080; "></span>{<br />
<span style="color: #008080; ">233</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite(g_strXMLHeader&nbsp;,1&nbsp;,strlen(g_strXMLHeader)&nbsp;,fp)&nbsp;;<br />
<span style="color: #008080; ">234</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite(g_strRootTag&nbsp;,1&nbsp;,strlen(g_strRootTag)&nbsp;,fp)&nbsp;;<br />
<span style="color: #008080; ">235</span>&nbsp;}<br />
<span style="color: #008080; ">236</span>&nbsp;<br />
<span style="color: #008080; ">237</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;写入XML文件尾<br />
</span><span style="color: #008080; ">238</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">void&nbsp;WriteXMLTail(FILE*&nbsp;fp)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">239</span>&nbsp;<span style="color: #808080; "></span>{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">240</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"&lt;/list&gt;\r\n")&nbsp;;<br />
<span style="color: #008080; ">241</span>&nbsp;}<br />
<span style="color: #008080; ">242</span>&nbsp;<br />
<span style="color: #008080; ">243</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;写入一个省、城市列表信息<br />
</span><span style="color: #008080; ">244</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">void&nbsp;WriteXMLSLItem(FILE*&nbsp;fp&nbsp;,SLInfo*&nbsp;pSLInfo)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">245</span>&nbsp;<span style="color: #808080; "></span>{<br />
<span style="color: #008080; ">246</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTNCInfoIT&nbsp;itt&nbsp;;<br />
<span style="color: #008080; ">247</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCInfo*&nbsp;pNCInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">248</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t&lt;sl&gt;\r\n")&nbsp;;<br />
<span style="color: #008080; ">249</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t\t&lt;name&gt;%s&lt;/name&gt;\r\n"&nbsp;,pSLInfo-&gt;Name)&nbsp;;<br />
<span style="color: #008080; ">250</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t\t&lt;code&gt;%s&lt;/code&gt;\r\n"&nbsp;,pSLInfo-&gt;Code)&nbsp;;<br />
<span style="color: #008080; ">251</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t\t&lt;city&gt;\r\n")&nbsp;;<br />
<span style="color: #008080; ">252</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(itt&nbsp;=&nbsp;pSLInfo-&gt;VTCityInfo.begin()&nbsp;;&nbsp;itt&nbsp;!=&nbsp;pSLInfo-&gt;VTCityInfo.end()&nbsp;;&nbsp;itt++)<br />
<span style="color: #008080; ">253</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">254</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNCInfo&nbsp;=&nbsp;*itt&nbsp;;<br />
<span style="color: #008080; ">255</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pNCInfo&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">256</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>&nbsp;;<br />
<span style="color: #008080; ">257</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t\t\t&lt;item&nbsp;name=\"%s\"&nbsp;code=\"%s\"&nbsp;/&gt;\r\n"&nbsp;,pNCInfo-&gt;Name&nbsp;,pNCInfo-&gt;Code)&nbsp;;<br />
<span style="color: #008080; ">258</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">259</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t\t&lt;/city&gt;\r\n")&nbsp;;<br />
<span style="color: #008080; ">260</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp&nbsp;,"\t&lt;/sl&gt;\r\n")&nbsp;;<br />
<span style="color: #008080; ">261</span>&nbsp;<br />
<span style="color: #008080; ">262</span>&nbsp;}<br />
<span style="color: #008080; ">263</span>&nbsp;<br />
<span style="color: #008080; ">264</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;将结果保存至文件<br />
</span><span style="color: #008080; ">265</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">void&nbsp;SaveToFile(char*&nbsp;strDstFile&nbsp;,VTSLInfo*&nbsp;pSLInfoVT)</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">266</span>&nbsp;<span style="color: #808080; "></span>{<br />
<span style="color: #008080; ">267</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE*&nbsp;pSaveFile&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">268</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTSLInfoIT&nbsp;itt&nbsp;;<br />
<span style="color: #008080; ">269</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SLInfo*&nbsp;pInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">270</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSaveFile&nbsp;=&nbsp;fopen(strDstFile&nbsp;,"wb+")&nbsp;;<br />
<span style="color: #008080; ">271</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteXMLHeader(pSaveFile)&nbsp;;<br />
<span style="color: #008080; ">272</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(itt&nbsp;=&nbsp;pSLInfoVT-&gt;begin()&nbsp;;&nbsp;itt&nbsp;!=&nbsp;pSLInfoVT-&gt;end()&nbsp;;&nbsp;itt++)<br />
<span style="color: #008080; ">273</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">274</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pInfo&nbsp;=&nbsp;*itt&nbsp;;<br />
<span style="color: #008080; ">275</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pInfo&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">276</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>&nbsp;;<br />
<span style="color: #008080; ">277</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteXMLSLItem(pSaveFile&nbsp;,pInfo)&nbsp;;<br />
<span style="color: #008080; ">278</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">279</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteXMLTail(pSaveFile)&nbsp;;<br />
<span style="color: #008080; ">280</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(pSaveFile)&nbsp;;<br />
<span style="color: #008080; ">281</span>&nbsp;}<br />
<span style="color: #008080; ">282</span>&nbsp;<br />
<span style="color: #008080; ">283</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;FreeNCVt(VTNCInfo*&nbsp;pVTInfo)<br />
<span style="color: #008080; ">284</span>&nbsp;{<br />
<span style="color: #008080; ">285</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTNCInfoIT&nbsp;it&nbsp;;<br />
<span style="color: #008080; ">286</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCInfo*&nbsp;pInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">287</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(it&nbsp;=&nbsp;pVTInfo-&gt;begin()&nbsp;;&nbsp;it&nbsp;!=&nbsp;pVTInfo-&gt;end()&nbsp;;&nbsp;it++)<br />
<span style="color: #008080; ">288</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">289</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pInfo&nbsp;=&nbsp;*it&nbsp;;<br />
<span style="color: #008080; ">290</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pInfo&nbsp;!=&nbsp;NULL)<br />
<span style="color: #008080; ">291</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">292</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pInfo&nbsp;;<br />
<span style="color: #008080; ">293</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">294</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">295</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pVTInfo-&gt;clear()&nbsp;;<br />
<span style="color: #008080; ">296</span>&nbsp;}<br />
<span style="color: #008080; ">297</span>&nbsp;<br />
<span style="color: #008080; ">298</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br />
<span style="color: #008080; ">299</span>&nbsp;{<br />
<span style="color: #008080; ">300</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE*&nbsp;fp&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">301</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;strSLFile[128]&nbsp;;<br />
<span style="color: #008080; ">302</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*pBuffer&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">char</span>[1024*4+1]&nbsp;;<br />
<span style="color: #008080; ">303</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nReadLen&nbsp;=&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">304</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTNCInfo&nbsp;VTInfo&nbsp;;<br />
<span style="color: #008080; ">305</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTSLInfo&nbsp;VSLInfo&nbsp;;<br />
<span style="color: #008080; ">306</span>&nbsp;<br />
<span style="color: #008080; ">307</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(InetDownFile(g_strSLURL&nbsp;,(unsigned&nbsp;<span style="color: #0000FF; ">char</span>*)pBuffer&nbsp;,1024*4&nbsp;,&amp;nReadLen)&nbsp;!=&nbsp;TASK_DOWN_OK){<br />
<span style="color: #008080; ">308</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("下载省级列表失败&nbsp;\r\n")&nbsp;;<br />
<span style="color: #008080; ">309</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1&nbsp;;<br />
<span style="color: #008080; ">310</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">311</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBuffer[nReadLen]&nbsp;=&nbsp;'\0'&nbsp;;<br />
<span style="color: #008080; ">312</span>&nbsp;<br />
<span style="color: #008080; ">313</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;解析省级城市和代码<br />
</span><span style="color: #008080; ">314</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;Parse(pBuffer&nbsp;,&amp;VTInfo)&nbsp;;<br />
</span><span style="color: #008080; ">315</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">316</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;开始处理省级文件<br />
</span><span style="color: #008080; ">317</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;ParseSLInfo(&amp;VTInfo&nbsp;,&amp;VSLInfo)&nbsp;;<br />
</span><span style="color: #008080; ">318</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">319</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;写入文件<br />
</span><span style="color: #008080; ">320</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf("开始将文件存入c:\\CityList.xml\r\n")&nbsp;;</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">321</span>&nbsp;<span style="color: #808080; "></span>&nbsp;&nbsp;&nbsp;&nbsp;SaveToFile("c:\\CityList.xml"&nbsp;,&amp;VSLInfo)&nbsp;;<br />
<span style="color: #008080; ">322</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pBuffer&nbsp;;<br />
<span style="color: #008080; ">323</span>&nbsp;<br />
<span style="color: #008080; ">324</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VTSLInfoIT&nbsp;it&nbsp;;<br />
<span style="color: #008080; ">325</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SLInfo*&nbsp;pSLInfo&nbsp;=&nbsp;NULL&nbsp;;<br />
<span style="color: #008080; ">326</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(it&nbsp;=&nbsp;VSLInfo.begin()&nbsp;;&nbsp;it&nbsp;!=&nbsp;VSLInfo.end()&nbsp;;&nbsp;it&nbsp;++)<br />
<span style="color: #008080; ">327</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">328</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSLInfo&nbsp;=&nbsp;*it&nbsp;;<br />
<span style="color: #008080; ">329</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pSLInfo&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">330</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>&nbsp;;<br />
<span style="color: #008080; ">331</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeNCVt(&amp;pSLInfo-&gt;VTCityInfo)&nbsp;;<br />
<span style="color: #008080; ">332</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pSLInfo&nbsp;;<br />
<span style="color: #008080; ">333</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">334</span>&nbsp;<br />
<span style="color: #008080; ">335</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeNCVt(&amp;VTInfo)&nbsp;;<br />
<span style="color: #008080; ">336</span>&nbsp;<br />
<span style="color: #008080; ">337</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("所有处理已完成，按任意键结束。")&nbsp;;<br />
<span style="color: #008080; ">338</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar()&nbsp;;<br />
<span style="color: #008080; ">339</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0&nbsp;;<br />
<span style="color: #008080; ">340</span>&nbsp;}</div><img src ="http://www.cppblog.com/fanze/aggbug/200943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-06-11 19:33 <a href="http://www.cppblog.com/fanze/archive/2013/06/11/200943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DUILib 中的通知事件</title><link>http://www.cppblog.com/fanze/archive/2013/01/08/197125.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Tue, 08 Jan 2013 11:19:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/01/08/197125.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/197125.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/01/08/197125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/197125.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/197125.html</trackback:ping><description><![CDATA[<div style="font-family: 微软雅黑; font-size: 18px;">CTabLayoutUI &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabselect &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;调用SelectItem选择了某一项时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CActiveXUI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; showactivex &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;创建完成后，显示时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CCombUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemselect &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;调用SelectItem选择改变时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CCombUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dropdown &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用Activate时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CButtonUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;menu &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当按钮的事件类型为，VIEWENT_CONTEXTMENU即上下文菜单时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CButtonUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;click &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;按钮激活时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">COptonUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;selectchanged &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当调用Selected，选择项更改后通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CTextUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;link &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 暂未知</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CliderUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; valuechanged &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当鼠标按钮弹起时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CEditWnd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;当按下回车按键后通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CEditWnd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;textchanged &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;当文本改变时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CScrollbarUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;scroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;当双击或单击滚动条时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CControlUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;timer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;定时器触发通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CControlUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;menu &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 上下文菜单通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemselect &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当选择更改时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; headerclick &nbsp; &nbsp; &nbsp; &nbsp; 当单击列表的头(column header)时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemactivate &nbsp; &nbsp; &nbsp; 当某一项激活时，通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListUI &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;itemclick &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当单击某一项时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListTextElementUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;未知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListContainerElementUI &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemactivate &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;激活事件。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CListContainerElementUI &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemclick &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当单击左键或右键时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CPaintManagerUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowinit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WM_PAINT消息响应时，若为第一个布局，则通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CPaintManagerUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;killfocus &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;(设置焦点时，若设置的控件指针为空，则不再是焦点窗口)失去焦点时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CPaintManagerUI &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setfocus &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;设置焦点时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;">CRitchEditUI &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;return &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入回车键时通知。</div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><div style="font-family: 微软雅黑; font-size: 18px;"></div><img src ="http://www.cppblog.com/fanze/aggbug/197125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-01-08 19:19 <a href="http://www.cppblog.com/fanze/archive/2013/01/08/197125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断网线是否插入</title><link>http://www.cppblog.com/fanze/archive/2013/01/02/196912.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Wed, 02 Jan 2013 09:39:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/01/02/196912.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/196912.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/01/02/196912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/196912.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/196912.html</trackback:ping><description><![CDATA[<div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">可利用IPHELPAPI进行获取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br />MIB_IFROW&nbsp;Info&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;存放获取到的Adapter参数</span><span style="color: #008000; "><br /></span>memset(&amp;Info&nbsp;,0&nbsp;,<span style="color: #0000FF; ">sizeof</span>(MIB_IFROW))&nbsp;;&nbsp;<br />Info.dwIndex&nbsp;=&nbsp;dwIndex&nbsp;;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;dwIndex是需要获取的Adapter的索引，可以通过GetAdaptersInfo和其他相关函数获取</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">if</span>(GetIfEntry(&amp;Info)&nbsp;!=&nbsp;NOERROR){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("ErrorCode&nbsp;=&nbsp;%d\n"&nbsp;,GetLastError())&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />}</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">MIB_IFROW &nbsp;中有一项 dwOperStatus的参数，它表明当前接口的操作状态</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">其值如下：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">Value<span style="white-space: pre; ">	</span>Meaning</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">IF_OPER_STATUS_NON_OPERATIONAL</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">LAN adapter has been disabled, for example because of an address conflict.&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">局域网适配器禁用，例如地址冲突</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">IF_OPER_STATUS_UNREACHABLE</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">WAN adapter that is not connected.</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">WAN适配器未连接</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">IF_OPER_STATUS_DISCONNECTED</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">For LAN adapters: network cable disconnected. For WAN adapters: no carrier</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">局域网适配器：网线未插入。WAN适配器：无信号</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">IF_OPER_STATUS_CONNECTING</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><div style="display: inline !important; ">WAN adapter that is in the process of connecting.&nbsp;</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><div style="display: inline !important; ">正在处理连接</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">IF_OPER_STATUS_CONNECTED&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">WAN adapter that is connected to a remote peer.</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;已连接远端</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">IF_OPER_STATUS_OPERATIONAL</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><div style="display: inline !important; ">Default status for LAN adapters 默认状态</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">参考：ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/iphlp/iphlp/getifentry.htm</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">经测试</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">拔下网线时，dwOperStatus 值为IF_OPER_STATUS_NON_OPERATIONAL&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">连接网线时，dwOperStatus 值为IF_OPER_STATUS_OPERATIONAL</div><img src ="http://www.cppblog.com/fanze/aggbug/196912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-01-02 17:39 <a href="http://www.cppblog.com/fanze/archive/2013/01/02/196912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HLSL语言学习及记录</title><link>http://www.cppblog.com/fanze/archive/2013/01/02/196910.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Wed, 02 Jan 2013 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/01/02/196910.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/196910.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/01/02/196910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/196910.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/196910.html</trackback:ping><description><![CDATA[<span style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">此笔记用于记录D3D中的HLSL学习过程和重点</span><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">============================================================================</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">HLSL :&nbsp;High Level Shader Language 译为：高级着色语言</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">HLSL语言的语法类似于C语言</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />1. 数据类型</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">HLSL中的数据类型有：标准数据类型、向量、矩阵和复杂数据类型。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">类型&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;取值</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><div>bool &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TRUE或FALSE</div><div>&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div>int &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;32位signed整形</div><div>&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div>half &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;16位float数值</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><div>&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div>double &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;64位float数值</div><div>&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div>float &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;32位float数值</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />1.1 变量声明</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">常规声明 &nbsp; &nbsp;float fVar ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">声明时初始化 &nbsp; &nbsp;float fVar = 1.0f ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">数组声明 int iVar[3] = {1 ,2 ,3} ;&nbsp;&nbsp;&nbsp;&nbsp;// 声明一个大小为3的整型数组,并初始化为1 ，2，3.</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />1.2 类型修饰符</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">(1) const &nbsp;常量 其值不可改</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">此类型修饰符表明一个变量的数值不可被渲染代码修改。例如：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; const float fConstant = 2.0f ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">同C语言一样，其声明时徐初始化。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />1.3 row_major与col_major</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">这一对修饰符出现在定义一个矩阵时。将其放在矩阵之前，例如：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; row_major float 4x4 WorldMatrix ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">其作用在于指定当前定义的矩阵中的元素，使用行主序还是列主序进行存放（矩阵的行列式）。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">示例：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; col_major &nbsp; &nbsp; &nbsp;11 &nbsp; &nbsp;12 &nbsp; &nbsp;13 &nbsp; &nbsp;14</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;21 &nbsp; &nbsp;22 &nbsp; &nbsp;23 &nbsp; &nbsp;24</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;31 &nbsp; &nbsp;32 &nbsp; &nbsp;33 &nbsp; &nbsp;34</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;41 &nbsp; &nbsp;42 &nbsp; &nbsp;43 &nbsp; &nbsp;44</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; row_major &nbsp; &nbsp;11 &nbsp; &nbsp;21 &nbsp; &nbsp;31 &nbsp; &nbsp;41</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12 &nbsp; &nbsp;22 &nbsp; &nbsp;32 &nbsp; &nbsp;42</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 13 &nbsp; &nbsp;23 &nbsp; &nbsp;33 &nbsp; &nbsp;43</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 14 &nbsp; &nbsp;24 &nbsp; &nbsp;34 &nbsp; &nbsp;44</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">行或者列主序决定了从常量表或从渲染器输入中读取矩阵元素的顺序。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />1.4 寄存器类型修饰符</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">寄存器类型修饰符用于高速编译器变量的作用域和生命期</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">(1) static</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">static float fVale = 1.11f ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">具全局作用。Static关键字防止渲染器变量暴露给应用程序。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">同C语言一样，在函数内部的变量，其值保存到下一次调用。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />(2) extern</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">extern float4 fExternal ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">与Static相反。其义同C语言关键字。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />(3) uniform</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">uniform float fUniforVal = 3.0f ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">只可使用API方法改变它，且只在两次绘制间改变。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />(4) shared</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">shared修饰全局Shader变量表明它在不同的效果中被共享。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">shared float fSharedVal ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />2 向量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">(1) 向量类型是一种特殊的数据结构，一个向量可能包含1-4个元素。例如：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: #ff0000; ">注意：数据类型后跟的数字，表明向量的维度。</strong></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;声明1</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; bool bVector ; &nbsp; &nbsp;标量 1个bool型数据</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; bool1 bVector ; &nbsp; &nbsp;向量，包含一个bool变量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; int1 iVector ; &nbsp; &nbsp; &nbsp; &nbsp; 向量，包含一个int变量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; half2 hVector ; &nbsp; &nbsp; &nbsp;向量，包含两个half变量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float3 fVector ; &nbsp; &nbsp; 向量，包含三个float变量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; double4 fVector ; 向量，包含四个double变量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;&nbsp;&nbsp;变量声明初始化可以同时进行</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; bool1 &nbsp; &nbsp;bVector = FALSE ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; int1 &nbsp; &nbsp; &nbsp; &nbsp;iVector = 1 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; half2 &nbsp; &nbsp; &nbsp;hVector = {0.2 ,0.3} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float3 &nbsp; &nbsp;fVector = {0.3f ,0.4f ,0.5f} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; double4 &nbsp; &nbsp; &nbsp;dVector = {0.2 ,0.3 ,0.4 ,0.5} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;声明2</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 当声明向量时，可以在一个尖括号中指定该向量的类型和向量中的元素个数。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; vector&lt;bool ,1&gt; bVector = TRUE &nbsp;;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; vector&lt;int ,1&gt; iVector = 1 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; vector&lt;half ,2&gt; hVector = {0.2 ,0.3 } ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; vector&lt;float ,3&gt; fVector = {1.0f ,2.0f ,3.0f} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; vector&lt;double ,4&gt; dVector = {1.0 ,2.0 ,3.0 ,4.0} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />&nbsp;(2)向量元素的存取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 一个向量最多包含4个元素。可使用位置x、y、z、w和颜色r、g、b、a进行寻址。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4 Pos = float4{0.0f ,1.0f ,2.0f ,3.0f} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 对于向量Pos，使用Pos.z和Pos.b都返回第三个元素，即2.0f。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 在一次存取过程中，可以使用一个命名集合获取一个或多个元素，但命名集合不能混用。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 如：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4 Pos = float4(1.0f ,2.0f ,3.0f ,4.0f) ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2 Temp ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; Temp = Pos.xy ; // 正确 x y命名相同</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; Temp = Pos.rg ; // 正确 r g命名相同<br />&nbsp; &nbsp; Temp = Pos.xb ; // 错误x b命名混用</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />(3)向量元素的混合存取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 将读取一个或多个指定的向量元素，称之为混合存取(swizzling).</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 存取示例：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4 pos = float4(0 , 0 , 2 ,1) ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2 f_2D ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_2D = pos.xy ; // 读取两个元素x和y，并赋值给f_2D</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_2D = pos.xz ; // 读取pos的x和z，赋值给f_2D,可以以任何顺序读取元素</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_2D = pos.zx ; // 元素可逆序读取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_2D = pos.xx ; // 重复读取，元素可以多次读取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_2D = pos.yy ; // 同上</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 赋值操作</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4 pos = float4(0 ,0 ,2 ,1) ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4 f_4D ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D = pos ; // 相当于f_4D.x = pos.x ; f_4D.y = pos.y ; f_4D.z = pos.z ;f_4D.w = pos.w ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D.xz = pos.xz ; // 等同于f_4D.x = pos.x ; f_4D.z = pos.z ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D.zx = pos.xz ; // 等同于f_4D.z = pos.x ; f_4D.x = pos.z ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D.xyzw = pos.w ;// 等同于f_4D.x = pos.w ; f_4D.y = pos.y ;f_4D.z = pos.z ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D.wzyx = pos ; //等同于 f_4D.w = pos.x ; f_4D.z = pos.y ;f_4D.y = pos.z ; f_4D.x = pos.x ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 以下语句无效</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D.xx = pos.xy ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_4D.xg = pos.rg ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />(4)向量的数学运算</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 乘法符号为&#8220;*&#8220;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 假设a ,b都为float4类型</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4 v = a * b ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 可视为：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; v.x = a.x * b.x ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; v.y = a.y * b.y ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; v.z = a.z * b.z ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; v.w = a.w * b.w ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 此为点乘</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />3 矩阵</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;&nbsp;&nbsp;(1)</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 矩阵是一种以行和列将数据组织起来的数据结构。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 矩阵数据类型后紧跟x指明该矩阵的行和列。例如：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; int1x1 &nbsp; &nbsp;iMatrix &nbsp; &nbsp; &nbsp; &nbsp;整形矩阵，1行1列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; int2x1 &nbsp; &nbsp;iMatrix &nbsp; &nbsp; &nbsp; &nbsp;整形矩阵，2行1列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; int4x1 &nbsp; &nbsp;iMatrix &nbsp; &nbsp; &nbsp; &nbsp;整形矩阵，4行1列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; int1x4 &nbsp; &nbsp;iMatrix &nbsp; &nbsp; &nbsp; &nbsp;整形矩阵，1行4列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; double1x1 &nbsp; &nbsp;dMatrix &nbsp; &nbsp; &nbsp; &nbsp;double型矩阵，1行1列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; double2x2 &nbsp; &nbsp;dMatrix &nbsp; &nbsp; &nbsp; &nbsp;double型矩阵，2行2列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; double3x3 &nbsp; &nbsp;dMatrix &nbsp; &nbsp; &nbsp; &nbsp;double型矩阵，3行3列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; double4x4 &nbsp; &nbsp;dMatrix &nbsp; &nbsp; &nbsp; &nbsp;double型矩阵，4行4列</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; HLSL中矩阵的行和列数最大为4，最小为1</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 矩阵的声明和初始化</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2x2 &nbsp; &nbsp;fMatrix ={0.0f ,0.1f , &nbsp; &nbsp; &nbsp; // 第一行</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&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;&nbsp;&nbsp;&nbsp;&nbsp;2.1f ,2.2f} ; &nbsp; &nbsp;// 第二行</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;&nbsp;matrix&nbsp;&lt;float ,2 ,2&gt; fMatrix ={0.0f ,0.1 &nbsp; &nbsp; &nbsp; &nbsp; // 第一行</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&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; 2.1f ,2.2f } ; &nbsp; &nbsp;// 第二行</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 使用关键字matrix声明。这是一个矩阵，其类型为float，行数和列数都为2。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; (2) 矩阵元素的存取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 矩阵时以行和列将数据组织起来的，可以通过结构体操作符"."来存取其中的数据。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 存取方法有两种</div><blockquote style="color: #000000; font-family: 微软雅黑; font-size: 18px; line-height: normal; text-align: -webkit-auto; margin: 0px 0px 0px 40px; border-style: none; padding: 0px;"><div>&nbsp; &nbsp; 1.&nbsp;&nbsp;&nbsp;&nbsp;0基准行列位置法</div><div>&nbsp; &nbsp; _m00, _m01, _m02 ,_m03</div><div>&nbsp; &nbsp; _m10 ,m_11 ,_m12 ,_m13</div><div>&nbsp; &nbsp; _m20 ,m_21 ,_m22 ,_m23</div><div>&nbsp; &nbsp; _m30 ,m_31 ,_m32 ,_m33</div><div></div><div>&nbsp; &nbsp; 2. &nbsp; &nbsp;1基准行列位置法</div><div>&nbsp; &nbsp; _11 ,_12 ,_13 ,_14</div><div>&nbsp; &nbsp; _21 ,_22 ,_23 ,_24</div><div>&nbsp; &nbsp; _31 ,_32 ,_33 ,_34</div><div>&nbsp; &nbsp; _41 ,_42 ,_43 ,_44</div><div></div></blockquote><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 两种方法中，每个元素的标识都是以下划线开始的，后跟行号和列号。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 0基准位置法中，行号和列号前还有一个字母m。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 访问示例：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2x2 &nbsp; &nbsp;fMatrix ={1.0f ,1.1f ,2.0f ,2.1f} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float &nbsp; &nbsp;f_1D ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_1D = fMatrix._m00 ; &nbsp; &nbsp; &nbsp; &nbsp;// 取行1、列1数据&nbsp;&nbsp;&nbsp;&nbsp;1.0f&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_1D = fMatrix._m11 ; &nbsp; &nbsp; &nbsp; &nbsp;// 取行2、列2数据 &nbsp; &nbsp;2.1f</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_1D = fMatrix._11 &nbsp;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 取行1、列1数据 &nbsp; &nbsp;1.0f</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; f_1D = fMatrix._22 ; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 取行2,、列2数据 &nbsp; &nbsp;2.1f</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 访问矩阵多个元素</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2x2 &nbsp; &nbsp;fMatrix ={1.0f ,1.1f ,2.0f ,2.1f} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float &nbsp; &nbsp;temp ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix._m00_m11 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix._m11_m00 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix._11_22 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix._22_11 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; <br />&nbsp;&nbsp;&nbsp;(3) 矩阵的混合存取</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 与向量类似，对矩阵一个以上的元素进行读取或复制操作，称为混合存取(swizzling)。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4x4 &nbsp; &nbsp;worldMatrix= &nbsp; &nbsp;float4({0 ,0 ,0 ,0} ,{1 ,1 ,1 ,1} ,{2 ,2 ,2 ,2} ,{3 ,3 ,3 ,3})&nbsp;;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float4x4 &nbsp; &nbsp;tempMatrix ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; tempMatrix._m00_m11 = worldMatrix._m00_m11 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; tempMatrix._m00_m11 = worldMatrix._m13_m33 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; tempMatrix._11_22_33 = worldMatrix._11_22_33 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; tempMatrix._11_22_33 = worldMatrix._24_23_22 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;&nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 不正确的赋值</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; tempMatrix._11_m23 = worldMatrix._11_12 ; &nbsp; &nbsp;// &nbsp;两种基准方式混用 &nbsp; &nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; tempMatrix._m00_m00 = worldMatrix.m_00_m11 ; &nbsp; &nbsp;// 不可在一次赋值对一个元素进行两次赋值</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; <br />&nbsp;&nbsp;&nbsp;(4) 矩阵的数组存取方式</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 矩阵也可以使用类似访问数组的方式对其进行访问，此时基准为0，不是1.</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 4X4矩阵，可通过如下索引来访问其中的每个元素</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; [0][0], &nbsp; &nbsp;[0][1] ,&nbsp;&nbsp;&nbsp;&nbsp;[0][2], &nbsp; &nbsp;[0][3]</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; [1][0], &nbsp; &nbsp;[1][1], &nbsp; &nbsp; [1][2], &nbsp; &nbsp;[1][3] &nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;[2][0],&nbsp;&nbsp;&nbsp;&nbsp;[2][1],&nbsp; &nbsp; &nbsp;[2][2],&nbsp; &nbsp;&nbsp;[2][3],</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;[3][0],&nbsp; &nbsp; [3][1],&nbsp; &nbsp; &nbsp;[3][2],&nbsp; &nbsp; [3][3],&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 赋值</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2x2 &nbsp; &nbsp;fMatrix ={1.0f ,1.1.f ,2.0f ,2.1f} ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float &nbsp; &nbsp;temp ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix[0][0] ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix[0][1] ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;&nbsp;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 数组存取方式可以用来存取多元素的向量</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2 &nbsp; &nbsp;temp ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float2x2 &nbsp; &nbsp;fMatrix ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; temp = fMatrix[0] ; &nbsp; &nbsp;// 将矩阵fMatrix的第一行赋值给向量temp</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; (5) 矩阵的存放顺序</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 矩阵中数据的存放方式具体采用行主序还是列主序可以在编译的指定。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;&nbsp;&nbsp; 使用语句 #pragma pack_matrix(row_major) 或 #pragma pack_matrix(col_major)指定。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 列主序效率高于行主序</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; (6) 矩阵的数学运算</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; HLSL中，矩阵的数学原酸也是逐元素进行的</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float3x3 mat1 ,mat2 ；</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; float3x3 mat3 = mat1 * mat2 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 其结果mat3中的值，是两个矩阵mat1和mat2的元素逐个进行相乘后的值</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; mat3.m00 = mat1._m00 * mat._m00 ;</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;(7) 复杂数据类型</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; HLSL支持复杂的数据类型来处理类似采样器(sampler)、结构体(structure)、渲染器(shader)这样的对象</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; &nbsp; 采样器</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp;</div><img src ="http://www.cppblog.com/fanze/aggbug/196910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-01-02 17:34 <a href="http://www.cppblog.com/fanze/archive/2013/01/02/196910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C/C++中的##符号</title><link>http://www.cppblog.com/fanze/archive/2013/01/02/196909.html</link><dc:creator>Fanze</dc:creator><author>Fanze</author><pubDate>Wed, 02 Jan 2013 09:32:00 GMT</pubDate><guid>http://www.cppblog.com/fanze/archive/2013/01/02/196909.html</guid><wfw:comment>http://www.cppblog.com/fanze/comments/196909.html</wfw:comment><comments>http://www.cppblog.com/fanze/archive/2013/01/02/196909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fanze/comments/commentRss/196909.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fanze/services/trackbacks/196909.html</trackback:ping><description><![CDATA[<div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">&nbsp; 在阅读一些程序的时候，发现C/C++宏定义中，有两个##符号的语句。其意为：字符连接,即在通过##符号连接字符串。</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />如：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">#define Q(TEXT) "a"##TEXT</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">示例代码：</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<br /><span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;Q(TEXT)&nbsp;"a"##TEXT<br /><span style="color: #008080; ">3</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">4</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">5</span>&nbsp;{<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(Q("bcdefg"))&nbsp;;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;本条语句输出为：abcdefg</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #008000; "></span>}</div></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"></div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;"><br />注：示例代码在VC2008中测试通过</div><div style="font-family: 微软雅黑; font-size: 18px; line-height: normal;">注2：GCC中测试未通过</div><img src ="http://www.cppblog.com/fanze/aggbug/196909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fanze/" target="_blank">Fanze</a> 2013-01-02 17:32 <a href="http://www.cppblog.com/fanze/archive/2013/01/02/196909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>