﻿<?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++博客-浪漫主义</title><link>http://www.cppblog.com/szhoftuncun/</link><description>专注力才是王道</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 18:48:56 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 18:48:56 GMT</pubDate><ttl>60</ttl><item><title>安装WPS</title><link>http://www.cppblog.com/szhoftuncun/archive/2013/05/27/200625.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Mon, 27 May 2013 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2013/05/27/200625.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/200625.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2013/05/27/200625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/200625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/200625.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2013/05/27/200625.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/200625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2013-05-27 21:27 <a href="http://www.cppblog.com/szhoftuncun/archive/2013/05/27/200625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何修改mysql root密码</title><link>http://www.cppblog.com/szhoftuncun/archive/2009/06/02/86562.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Tue, 02 Jun 2009 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2009/06/02/86562.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/86562.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2009/06/02/86562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/86562.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/86562.html</trackback:ping><description><![CDATA[<p>1、编辑MySQL(和PHP搭配之最佳组合)配置文件：</p>
<p>windows环境中：%MySQL(和PHP搭配之最佳组合)_installdir%\my.ini　//一般在MySQL(和PHP搭配之最佳组合)安装目录下有my.ini即MySQL(和PHP搭配之最佳组合)的配置文件。<br>linux环境中：/etc/my.cnf</p>
<p>在[MySQL(和PHP搭配之最佳组合)d]配置段添加如下一行：<br>skip-grant-tables</p>
<p>保存退出编辑。</p>
<p>2、然后重启MySQL(和PHP搭配之最佳组合)服务</p>
<p>windows环境中：<br>net stop MySQL(和PHP搭配之最佳组合)<br>net start MySQL(和PHP搭配之最佳组合)</p>
<p>linux环境中：<br>/etc/init.d/MySQL(和PHP搭配之最佳组合)d restart</p>
<p>3、设置新的ROOT密码</p>
<p>然后再在命令行下执行：<br>MySQL(和PHP搭配之最佳组合) -uroot -p MySQL(和PHP搭配之最佳组合)<br>直接回车无需密码即可进入数据库了。</p>
<p>现在我们执行如下语句把root密码更新为 7758521：<br>update user set password=PASSWORD("7758521") where user='root';</p>
<p>quit 退出MySQL(和PHP搭配之最佳组合)。</p>
<p>4、还原配置文件并重启服务</p>
<p>然后修改MySQL(和PHP搭配之最佳组合)配置文件把刚才添加的那一行删除。</p>
<p>再次重起MySQL(和PHP搭配之最佳组合)服务，密码修改完毕。</p>
<p>修改完毕。</p>
<p>用新密码7758521试一下吧，又能登入MySQL(和PHP搭配之最佳组合)的感觉就是不一样吧？</p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/86562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2009-06-02 16:58 <a href="http://www.cppblog.com/szhoftuncun/archive/2009/06/02/86562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于文字输出的函数TabbedTextOut[整理]</title><link>http://www.cppblog.com/szhoftuncun/archive/2009/01/20/72382.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Tue, 20 Jan 2009 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2009/01/20/72382.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/72382.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2009/01/20/72382.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/72382.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/72382.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: #0000ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong style="COLOR: #000000">关于文本的输出</strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在如何自己编写文本控件时，有关于如何展开</span><span lang=EN-US>Tab</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的具体做法：<br></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;TextView::PaintLine(HDC&nbsp;hdc,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;line_no)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id=Codehighlighter1_47_772_Open_Image onclick="this.style.display='none'; Codehighlighter1_47_772_Open_Text.style.display='none'; Codehighlighter1_47_772_Closed_Image.style.display='inline'; Codehighlighter1_47_772_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_47_772_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_47_772_Closed_Text.style.display='none'; Codehighlighter1_47_772_Open_Image.style.display='inline'; Codehighlighter1_47_772_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_47_772_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_47_772_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetLineLength(line_no&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;start_line_no);<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[length];<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetLineBuffer(buffer,line_no&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;start_line_no);<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">容纳单行文本矩形区域</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;line_rect;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(tv_hwnd,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">line_rect);<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_rect.top&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;line_no</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(font_height&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;font_extra);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_rect.bottom&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;line_rect.top&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;font_height&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;font_extra;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_rect.left&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;start_column_no</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">展开Tab字符</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;tab&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">font_width;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;width&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TabbedTextOut(hdc,line_rect.left,line_rect.top,buffer,length,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tab,line_rect.left);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出文字</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_rect.left&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LOWORD(width);<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExtTextOut(hdc,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,ETO_OPAQUE,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">line_rect,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]buffer;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>要明白他的意思才能在以后的编写扩展功能才能得心应手。首先要明白一个函数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><strong>TabbedTextOut</strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">功能：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将一个字符串写到指定位置。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并按<span style="COLOR: green">制表位位置数组</span>里的值展开<span style="COLOR: green">制表符</span>。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数原型：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>LONG TabbedTextOut(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, LPINT lpn TabStopPositions, int nTabOrigin)</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数意义：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Hdc </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：设备环境句柄。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>X</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符串开始点的</span><span lang=EN-US>x</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坐标（逻辑单位）。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Y</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符串开始点的</span><span lang=EN-US>y</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坐标（逻辑单位）。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>lpString</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：缓冲区指针。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>nCount</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>nTabPositions</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：指定制表位位置数组的值的个数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>lpnTabStopPositions</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：数组，包含制表位位置（逻辑单位）。必须按照升序保存。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>nTabOrigin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：指定制表符展开的开始位置的</span><span lang=EN-US>x</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坐标（逻辑单位）。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">返回值：字符串的尺寸，高位字表示高度，低位表示宽度。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">【1】<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果</span><span lang=EN-US>nTabPositions</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">值为</span><span lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，且</span><span lang=EN-US>lpnTabStopPositions</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">值位</span><span lang=EN-US>NULL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么制表符会按<span style="COLOR: green">平均字符宽度的</span></span><span lang=EN-US style="COLOR: green">8</span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位来扩展</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">【2】<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果</span><span lang=EN-US>lpnTabStopPositions</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数组包含一个以上的话，则制表位被设为数组里的每一个值，共为</span><span lang=EN-US>lpnTabStopPositions</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">【3】<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US>nTabOrigin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数允许一个应用程序为一行多次调用</span><span lang=EN-US>TabbedTextOut</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。如果应用程序多次调用</span><span lang=EN-US>TabbedTextOut</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang=EN-US>nTabOrigin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每次都设置相同的值，则此函数在相对于</span><span lang=EN-US>nTabOrigin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定的位置处展开所有的制表符。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">知识补充：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>TabbedTextOut(hdc,line_rect.left,line_rect.top,buffer,length,1,&amp;tab,line_rect.left);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第六个参数为</span><span lang=EN-US>nTabPosition = 1</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第七个参数为</span><span lang=EN-US>lpnTabStopPositions = tab = 4*font_width</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第八个参数位</span><span lang=EN-US>nTabOrigin = line_rect.left</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因为编辑器以行位模型，当然是从一行的最左端开始。制表位数组值一个等于字体宽度的</span><span lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">倍。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">摘自《</span><span lang=EN-US>windows</span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>编程》的解释</strong>：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>TabbedTextOut</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的前五个参数与</span><span lang=EN-US>TextOut</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相同，第六个参数是跳位间隔数，第七个是以图素为单位的跳位间隔数组。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36.75pt; TEXT-INDENT: -36.75pt; mso-char-indent-count: -3.5"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">【</span><span lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">】</span><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果平均字符宽度是</span><span lang=EN-US>8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个图素，而您希望每</span><span lang=EN-US>5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个字符加一个跳位间隔，则这个数组将包含</span><span lang=EN-US>40</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US>80</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US>120</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，按递增顺序依此类推。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">【2】<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果第六个和第七个参数是</span><span lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang=EN-US>NULL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则跳位间隔按每八个平均字符宽度设定。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">【3】<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果第六个参数是</span><span lang=EN-US style="COLOR: green">1</span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则第七个参数指向一个整数，表示跳位间隔重复增大的倍数</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（例如，如果第六个参数是</span><span lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并且第七个参数指向值为</span><span lang=EN-US>30</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的变量，则跳位间隔设定在</span><span lang=EN-US>30</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US>60</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US>90&#8230;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图素处）。最后一个参数给出了从跳位间隔开始测量的逻辑</span><span lang=EN-US>x</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坐标，它与字符串的起始位置可能相同也可能不同。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编辑器的展开</span><span lang=EN-US>tab</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属于【</span><span lang=EN-US>3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">】，增大倍数是</span><span lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个字符宽度。</span><span lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">倍与</span><span lang=EN-US>8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">倍的区别如图：</span></p>
<table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=284>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><img height=119 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/textview1.jpg" width=201 border=0><span lang=EN-US><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=284>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><img height=139 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/textview2.jpg" width=244 border=0><span lang=EN-US></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/72382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2009-01-20 17:14 <a href="http://www.cppblog.com/szhoftuncun/archive/2009/01/20/72382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>俄罗斯方块V1.2</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/11/16/67025.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 15 Nov 2008 16:22:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/11/16/67025.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/67025.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/11/16/67025.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/67025.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/67025.html</trackback:ping><description><![CDATA[&nbsp; <span>继续上个版本修改了一些</span><span>bug</span><span>，然后美化了一下。</span>
<p><span>发现自己的审美观不咋的，俺觉得漂亮的人家觉得不漂亮。还是照着大家要求的画一个。</span></p>
<p><span>主要解决的问题是，这次行列都用宏表示，这样可以修改行列，窗口大小也动态改变。</span></p>
<p><span>另外长条旋转变成</span><span>Z</span><span>型问题也解决，主要是取模的时候绕回去了。</span></p>
<p><span>其中最重要的要算是解决了刷新闪烁问题，尽管</span><span>HAM2008</span><span>指点过，始终没做成，这次</span><span>vczh</span><span>说了一句话就点醒了我。根本不应该使用</span><span>InvalidateRect</span><span>函数，直接画，然后用缓冲</span><span>DC</span><span>就可以了。<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">VOID&nbsp;OnPaint()<br><img id=Codehighlighter1_15_965_Open_Image onclick="this.style.display='none'; Codehighlighter1_15_965_Open_Text.style.display='none'; Codehighlighter1_15_965_Closed_Image.style.display='inline'; Codehighlighter1_15_965_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_15_965_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_965_Closed_Text.style.display='none'; Codehighlighter1_15_965_Open_Image.style.display='inline'; Codehighlighter1_15_965_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_15_965_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_15_965_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetDC(hWnd);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;bitmap_dc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateCompatibleDC(hdc);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;bitmap&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateCompatibleBitmap(hdc,</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">768</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(bitmap_dc,bitmap);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_177_284_Open_Image onclick="this.style.display='none'; Codehighlighter1_177_284_Open_Text.style.display='none'; Codehighlighter1_177_284_Closed_Image.style.display='inline'; Codehighlighter1_177_284_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_177_284_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_177_284_Closed_Text.style.display='none'; Codehighlighter1_177_284_Open_Image.style.display='inline'; Codehighlighter1_177_284_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_177_284_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_177_284_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;DrawBlock<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;********************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tetris.GetX();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tetris.GetY();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_368_533_Open_Image onclick="this.style.display='none'; Codehighlighter1_368_533_Open_Text.style.display='none'; Codehighlighter1_368_533_Closed_Image.style.display='inline'; Codehighlighter1_368_533_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_368_533_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_368_533_Closed_Text.style.display='none'; Codehighlighter1_368_533_Open_Image.style.display='inline'; Codehighlighter1_368_533_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_368_533_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_368_533_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br><img id=Codehighlighter1_401_528_Open_Image onclick="this.style.display='none'; Codehighlighter1_401_528_Open_Text.style.display='none'; Codehighlighter1_401_528_Closed_Image.style.display='inline'; Codehighlighter1_401_528_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_401_528_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_401_528_Closed_Text.style.display='none'; Codehighlighter1_401_528_Open_Image.style.display='inline'; Codehighlighter1_401_528_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_401_528_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_401_528_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(current_block[i][j]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_442_522_Open_Image onclick="this.style.display='none'; Codehighlighter1_442_522_Open_Text.style.display='none'; Codehighlighter1_442_522_Closed_Image.style.display='inline'; Codehighlighter1_442_522_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_442_522_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_442_522_Closed_Text.style.display='none'; Codehighlighter1_442_522_Open_Image.style.display='inline'; Codehighlighter1_442_522_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_442_522_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_442_522_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawBlock(bitmap_dc,y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,tetris.GetColor(),RGB(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_539_645_Open_Image onclick="this.style.display='none'; Codehighlighter1_539_645_Open_Text.style.display='none'; Codehighlighter1_539_645_Closed_Image.style.display='inline'; Codehighlighter1_539_645_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_539_645_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_539_645_Closed_Text.style.display='none'; Codehighlighter1_539_645_Open_Image.style.display='inline'; Codehighlighter1_539_645_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_539_645_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_539_645_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">****************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*DrawContainer<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;*****************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ROWS;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_679_838_Open_Image onclick="this.style.display='none'; Codehighlighter1_679_838_Open_Text.style.display='none'; Codehighlighter1_679_838_Closed_Image.style.display='inline'; Codehighlighter1_679_838_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_679_838_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_679_838_Closed_Text.style.display='none'; Codehighlighter1_679_838_Open_Image.style.display='inline'; Codehighlighter1_679_838_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_679_838_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_679_838_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">COLS;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br><img id=Codehighlighter1_715_833_Open_Image onclick="this.style.display='none'; Codehighlighter1_715_833_Open_Text.style.display='none'; Codehighlighter1_715_833_Closed_Image.style.display='inline'; Codehighlighter1_715_833_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_715_833_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_715_833_Closed_Text.style.display='none'; Codehighlighter1_715_833_Open_Image.style.display='inline'; Codehighlighter1_715_833_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_715_833_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_715_833_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(Container[i][j]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_752_827_Open_Image onclick="this.style.display='none'; Codehighlighter1_752_827_Open_Text.style.display='none'; Codehighlighter1_752_827_Closed_Image.style.display='inline'; Codehighlighter1_752_827_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_752_827_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_752_827_Closed_Text.style.display='none'; Codehighlighter1_752_827_Open_Image.style.display='inline'; Codehighlighter1_752_827_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_752_827_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_752_827_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawBlock(bitmap_dc,i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,ColorTable[i][j],RGB(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;BitBlt(hdc,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">768</span><span style="COLOR: #000000">,bitmap_dc,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,SRCCOPY);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;DeleteDC(bitmap_dc);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;DeleteObject(bitmap);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;ReleaseDC(hWnd,hdc);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>以上就是GDI缓冲的主要实现代码。<br>
<div align=center src_cetemp="http://www.cppblog.com/images/cppblog_com/szhoftuncun/123.jpg"><img height=504 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/123.jpg" width=254 border=0></div>
<br><br><a title=可执行文件下载 href="http://www.cppblog.com/Files/szhoftuncun/TetrisV1.2.rar">可执行文件下载</a><br>代码还是等全部完善后上传吧。Redist请自行下载。</span> <br>代码估计要有大的改动，感觉现在的代码没一点C++的味道。<br>有点简单，用陈坤的话说就是扩展性不好。
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/67025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-11-16 00:22 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/11/16/67025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>俄罗斯方块V1.0</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/11/09/66377.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 08 Nov 2008 16:06:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/11/09/66377.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/66377.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/11/09/66377.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/66377.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/66377.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>记得</span><span>8</span><span>月份写过俄罗斯方块，那会全是用坐标表示的。包括所有方块的变换，甚至方块的表示。导致程序内部许多的</span><span>case</span><span>语句，甚为麻烦。代码量也有近</span><span>1800</span><span>行左右。而且写完后</span><span>bug</span><span>很多，修正也修正不完，异常头痛便放弃了。</span></p>
<p><span>现在看看《编程之美》的俄罗斯方块的思路，又想起</span><span>vczh</span><span>用脚本的写的俄罗斯方块，就又起了兴趣。便重新设计完成了，这次基本没什么</span><span>bug</span><span>了。只不过操作习惯上和</span><span>QQ</span><span>的俄罗斯方块还有些不同。</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在底部的时候，如果按住旋转不放，则会停留原地旋转。原因是为了检测接触底部时旋转不插入墙壁，就同接触左右墙壁一样，做了调整方块坐标处理。处理方法是根据旋转后方块的坐标加上（减去）最大列</span><span>(</span><span>最小列</span><span>)</span><span>在减去（左）右边界得到。底部也是这样计算的。当然有了这样的检测便出现了这样的小小的</span><span>bug</span><span>，不过我相信没人会在底部按住不放的。</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>这次方块全部存储在一个一维数组中，通过指针的变换来改变方块种类与旋转状态，但是为了方便操作，就拷贝到了一个二维数组中。起初设计是一个四维数组，这样就方便多了，但是</span><span>VS2008</span><span>的编译器却不能编译通过，</span><span>int[4][4]</span><span>到</span><span>int **p</span><span>的转换不成功，朋友说是编译器问题。后来经</span><span>Lend3d</span><span>说，很多项目都是不用大于二维的数组的，于是干脆就用了一维数组，本来要听从他意见用结构表示一个低二位的数组元素，但是初始化和使用都不是很方便。</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>另外关于</span><span>GDI</span><span>缓冲，试用了一下，但是作用貌似不大，不知道原因。关于这方面的知识援助还是要感谢</span><span>HAM2008</span><span>的帮助。<br></span></p>
<div align=center src_cetemp="http://www.cppblog.com/images/cppblog_com/szhoftuncun/TetrisV1.0.jpg"><img height=399 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/TetrisV1.0.jpg" width=300 border=0><br></div>
<br>贴个头文件出来就可以知道大致做法了。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifndef&nbsp;TETRIS_H<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;TETRIS_H</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;once<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Container[</span><span style="COLOR: #000000">18</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">容纳方块的空间</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;current_block[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_121_190_Open_Image onclick="this.style.display='none'; Codehighlighter1_121_190_Open_Text.style.display='none'; Codehighlighter1_121_190_Closed_Image.style.display='inline'; Codehighlighter1_121_190_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_121_190_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_121_190_Closed_Text.style.display='none'; Codehighlighter1_121_190_Open_Image.style.display='inline'; Codehighlighter1_121_190_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_121_190_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_121_190_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">***************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;方块的主要行为<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>****************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Tetris<br><img id=Codehighlighter1_205_785_Open_Image onclick="this.style.display='none'; Codehighlighter1_205_785_Open_Text.style.display='none'; Codehighlighter1_205_785_Closed_Image.style.display='inline'; Codehighlighter1_205_785_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_205_785_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_205_785_Closed_Text.style.display='none'; Codehighlighter1_205_785_Open_Image.style.display='inline'; Codehighlighter1_205_785_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_205_785_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_205_785_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tetris();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Tetris();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;GenerateBlock();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;StepLeft();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;StepRight();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;StepDown();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Rotate();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CaculateScore();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;IsOver();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;lost;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;score;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">得分</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetX();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetY();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;CaculateMinCol();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;CaculateMinRow();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;CaculateMaxCol();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;CaculateMaxRow();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CaculateBlockBoundary();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;DetectCollision();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CopyToContainer();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CopyToBlock();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">block;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;total_rotate;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;kind;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;offset_x;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;offset_y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;min_col,max_col;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;min_row,max_row;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TETRIS_H</span></div>
<br>可能自己设计上的能力还是不足吧，有些函数是不得以写的，比如四个inline函数，因为计算的时候用的是四个循环，计算完就要跳出两层循环。<br>难道用goto，如果直接return则后面的代码执行不到了，不得以做了四个辅助函数。<br><br>源代码下载：<a title=TetrisV1.0 href="http://www.cppblog.com/Files/szhoftuncun/TetrisV1.0.rar">TetrisV1.0</a><br>可执行文件下载：<a title=TetrisV1.0.exe href="http://www.cppblog.com/Files/szhoftuncun/Tetris.exe.rar">TetrisV1.0.exe</a>&nbsp;如果不能运行可到微软下载VS2008的 redist_x86 
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/66377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-11-09 00:06 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/11/09/66377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件MD5计算工具</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/10/26/65052.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 25 Oct 2008 17:50:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/10/26/65052.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/65052.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/10/26/65052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/65052.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/65052.html</trackback:ping><description><![CDATA[<p>C++博客上的蚂蚁终结者的文章都写的不错，它写了个MD5的算法，我就用他的算法写了个小程序。<br>简单的计算文件的MD5，支持拖拽文件。现在还只是简单的计算。<br>目前打算改进的是<br>1添加进度条。<br>2美化界面。<br>3解决大文件计算时界面僵死问题。<br><img height=280 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/md5.JPG" width=563 border=0><br>个人写程序喜欢不断改进，也就是偶然突发奇想写个程序。以后想起来就改进一下。嘎嘎。<br>要是忘记了，就作罢。代码可点击<a href="http://www.cppblog.com/Files/szhoftuncun/MD5.rar"><u>这里下载</u></a></p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/65052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-10-26 01:50 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/10/26/65052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ClipBoard.ASM文件分析</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/10/03/63189.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Fri, 03 Oct 2008 08:27:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/10/03/63189.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/63189.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/10/03/63189.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/63189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/63189.html</trackback:ping><description><![CDATA[<p>脑袋里没有点API的储量，想写什么东西还是很困难的。厚积薄发才是硬道理。所以先看看别人的代码，偷学几个API的用法。</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SetClipData&nbsp;proc&nbsp;lpData:LPSTR,dwSize:dword<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LOCAL&nbsp;&nbsp;&nbsp;&nbsp;hMem:HANDLE&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">内存块句柄<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LOCAL&nbsp;&nbsp;&nbsp;&nbsp;pMem:dword&nbsp;&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">内存块指针<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,dwSize<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;shr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;shl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">(dwSize</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">&nbsp;不满8的倍数则补全<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;xGlobalAlloc,&nbsp;GHND&nbsp;or&nbsp;GMEM_DDESHARE,&nbsp;eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;&nbsp;&nbsp;&nbsp;eax,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">申请成功则继续否则跳转到@exit2<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@exit2<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hMem,eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;GlobalLock,eax&nbsp;&nbsp;&nbsp;&nbsp;;hGlob&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">锁定申请的内存块返回内存块指针<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;&nbsp;&nbsp;&nbsp;eax,eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@exit1<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMem,eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;RtlMoveMemory,eax,lpData,dwSize&nbsp;&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">复制lpData的内容到申请的内存块中<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,pMem<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,dwSize<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">&nbsp;ptr&nbsp;[eax],</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">在内存块最后添0结束<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;GlobalUnlock,hMem&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">解锁，使内存块指针无效<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;OpenClipboard,NULL<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;EmptyClipboard<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;SetClipboardData,CF_TEXT,hMem&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">将数据关联到剪贴板<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;CloseClipboard<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;Ok<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@exit3<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;.endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;@exit1:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;&nbsp;GlobalFree,&nbsp;hMem&nbsp;;</span><span style="COLOR: #000000">==&gt;</span><span style="COLOR: #000000">未锁定成功则释放该内存块<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,&nbsp;eax<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;@exit2:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;error<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;@exit3:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ret<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SetClipData&nbsp;endp</span></div>
<p><span>看完这段代码我有一个疑问，这里是将</span><span>lpData</span><span>的数据拷贝到一个内存块，然后与剪贴板关联，我这里解释为关联，我就认为剪贴板不应该是一个内存区域，我猜测是一个链表之类的结构，然后链表每一个节点存储一个内存区域的指针还有其他的信息，然后根据信息来管理。</span></p>
<p><span>否则应该可以直接将</span><span>lpData</span><span>来跟剪贴板关联。另一个原因是</span><span>lpData</span><span>是局部的随时会被释放的。如有不正确还望指正。</span></p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/63189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-10-03 16:27 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/10/03/63189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL学习摘要之序列式容器</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/09/07/61219.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sun, 07 Sep 2008 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/09/07/61219.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/61219.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/09/07/61219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/61219.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/61219.html</trackback:ping><description><![CDATA[vector优势：1.随机访问 2.在尾部插入删除元素<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></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;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Print(vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;vec)<br><img id=Codehighlighter1_87_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_87_157_Open_Text.style.display='none'; Codehighlighter1_87_157_Closed_Image.style.display='inline'; Codehighlighter1_87_157_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_87_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_87_157_Closed_Text.style.display='none'; Codehighlighter1_87_157_Open_Image.style.display='inline'; Codehighlighter1_87_157_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_87_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_87_157_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;vec.size();&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">vec[i];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_171_884_Open_Image onclick="this.style.display='none'; Codehighlighter1_171_884_Open_Text.style.display='none'; Codehighlighter1_171_884_Closed_Image.style.display='inline'; Codehighlighter1_171_884_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_171_884_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_884_Closed_Text.style.display='none'; Codehighlighter1_171_884_Open_Image.style.display='inline'; Codehighlighter1_171_884_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_171_884_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_171_884_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;first;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;second(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;third(second.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;second.end());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;forth(third);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_346_354_Open_Image onclick="this.style.display='none'; Codehighlighter1_346_354_Open_Text.style.display='none'; Codehighlighter1_346_354_Closed_Image.style.display='inline'; Codehighlighter1_346_354_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_346_354_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_346_354_Closed_Text.style.display='none'; Codehighlighter1_346_354_Open_Image.style.display='inline'; Codehighlighter1_346_354_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;val[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_346_354_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_346_354_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;fifth(val,&nbsp;val&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(val)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(val[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Second:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(second);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Third:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(third);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Forth:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(forth);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Fifth:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(fifth);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.swap(fifth);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.push_back(</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;first.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.erase(it,first.end());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;first.begin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.insert(it,</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
结果：<br><img height=209 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/vector.JPG" width=244 border=0><br>Deque操作代码类似。<br>优势：比之Vector在头部插入删除元素也有很高效率。也支持迭代器随机访问。不过元素在内存中不连续。<br><br>List操作基本相同不过多了一些功能<br>优势：高效遍历元素，常量时间插入删除任意位置元素。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">list</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></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;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Print(list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;ls)<br><img id=Codehighlighter1_82_179_Open_Image onclick="this.style.display='none'; Codehighlighter1_82_179_Open_Text.style.display='none'; Codehighlighter1_82_179_Closed_Image.style.display='inline'; Codehighlighter1_82_179_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_82_179_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_179_Closed_Text.style.display='none'; Codehighlighter1_82_179_Open_Image.style.display='inline'; Codehighlighter1_82_179_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_82_179_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_82_179_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ls.begin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(;&nbsp;it&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ls.end();&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it)cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">it;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Print(list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;ls)<br><img id=Codehighlighter1_211_311_Open_Image onclick="this.style.display='none'; Codehighlighter1_211_311_Open_Text.style.display='none'; Codehighlighter1_211_311_Closed_Image.style.display='inline'; Codehighlighter1_211_311_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_211_311_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_211_311_Closed_Text.style.display='none'; Codehighlighter1_211_311_Open_Image.style.display='inline'; Codehighlighter1_211_311_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_211_311_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_211_311_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ls.begin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(;&nbsp;it&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ls.end();&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it)cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">it;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_325_1100_Open_Image onclick="this.style.display='none'; Codehighlighter1_325_1100_Open_Text.style.display='none'; Codehighlighter1_325_1100_Closed_Image.style.display='inline'; Codehighlighter1_325_1100_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_325_1100_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_325_1100_Closed_Text.style.display='none'; Codehighlighter1_325_1100_Open_Image.style.display='inline'; Codehighlighter1_325_1100_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_325_1100_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_325_1100_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;first;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;second(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_422_438_Open_Image onclick="this.style.display='none'; Codehighlighter1_422_438_Open_Text.style.display='none'; Codehighlighter1_422_438_Closed_Image.style.display='inline'; Codehighlighter1_422_438_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_422_438_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_422_438_Closed_Text.style.display='none'; Codehighlighter1_422_438_Open_Image.style.display='inline'; Codehighlighter1_422_438_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;first_val[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_422_438_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_422_438_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4.0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;third(first_val,&nbsp;first_val&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(first_val)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(first_val[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_552_568_Open_Image onclick="this.style.display='none'; Codehighlighter1_552_568_Open_Text.style.display='none'; Codehighlighter1_552_568_Closed_Image.style.display='inline'; Codehighlighter1_552_568_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_552_568_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_552_568_Closed_Text.style.display='none'; Codehighlighter1_552_568_Open_Image.style.display='inline'; Codehighlighter1_552_568_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;sencond_val[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_552_568_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_552_568_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1.1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4.3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2.9</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;fourth(sencond_val,&nbsp;sencond_val&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(sencond_val)</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(sencond_val[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;first.begin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.insert(it,</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;first.begin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.splice(it,second);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">splice四个参数，第一个参数是插入的位置，第二个是插入源，第三四个参数指定范围</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;first.remove(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">First:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(first);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;third.sort();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fourth.sort();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Third:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(third);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Fourth:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(fourth);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;third.merge(fourth);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Third:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Print(third);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
结果：<br><img height=170 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/list.jpg" width=261 border=0><br>splice在代码中已经说明，merge函数合并两个list而且是按照从小到大的顺序，merge有另一个版本包含两个参数，另一个是一个<br>返回bool类型的函数，说明了比较规则。用法相同。另外一些函数使用比较简单。<br>该类笔记均参考：<a href="http://www.cplusplus.com/">www.cplusplus.com</a> 
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/61219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-09-07 15:24 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/09/07/61219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]C运行库概念</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/08/31/60520.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sun, 31 Aug 2008 12:59:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/08/31/60520.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/60520.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/08/31/60520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/60520.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/60520.html</trackback:ping><description><![CDATA[&nbsp;1)运行时库就是 &nbsp; C &nbsp; run-time &nbsp; library，是 &nbsp; C &nbsp; 而非 &nbsp; C++ &nbsp; 语言世界的概念:取这个名字就是因为你的 &nbsp; C &nbsp; 程序运行时需要这些库中的函数. &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 2)C &nbsp; 语言是所谓的&#8220;小内核&#8221;语言，就其语言本身来说很小（不多的关键字，程序流程控制，数据类型等）；所以，C &nbsp; 语言内核开发出来之后，Dennis &nbsp; Ritchie &nbsp; 和 &nbsp; Brian &nbsp; Kernighan &nbsp; 就用 &nbsp; C &nbsp; 本身重写了 &nbsp; 90% &nbsp; 以上的 &nbsp; UNIX &nbsp; 系统函数，并且把其中最常用的部分独立出来，形成头文件和对应的 &nbsp; LIBRARY，C &nbsp; run-time &nbsp; library &nbsp; 就是这样形成的。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 3)随后，随着 &nbsp; C &nbsp; 语言的流行，各个 &nbsp; C &nbsp; 编译器的生产商/个体/团体都遵循老的传统，在不同平台上都有相对应的 &nbsp; Standard &nbsp; Library，但大部分实现都是与各个平台有关的。由于各个 &nbsp; C &nbsp; 编译器对 &nbsp; C &nbsp; 的支持和理解有很多分歧和微妙的差别，所以就有了 &nbsp; ANSI &nbsp; C；ANSI &nbsp; C &nbsp; （主观意图上）详细的规定了 &nbsp; C &nbsp; 语言各个要素的具体含义和编译器实现要求，引进了新的函数声明方式，同时订立了 &nbsp; Standard &nbsp; Library &nbsp; 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数，应当称为第三方 &nbsp; C &nbsp; 运行库（Third &nbsp; party &nbsp; C &nbsp; run-time &nbsp; libraries）。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 4)C &nbsp; run-time &nbsp; library里面含有初始化代码，还有错误处理代码(例如divide &nbsp; by &nbsp; zero处理)。你写的程序可以没有math库，程序照样运行，只是不能处理复杂的数学运算，不过如果没有了C &nbsp; run-time库，main()就不会被调用，exit()也不能被响应。因为C &nbsp; run-time &nbsp; library包含了C程序运行的最基本和最常用的函数。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 5)到了 &nbsp; C++ &nbsp; 世界里，有另外一个概念:Standard &nbsp; C++ &nbsp; Library,它包括了上面所说的 &nbsp; C &nbsp; run-time &nbsp; library &nbsp; 和 &nbsp; STL。包含 &nbsp; C &nbsp; run-time &nbsp; library &nbsp; 的原因很明显，C++ &nbsp; 是 &nbsp; C &nbsp; 的超集，没有理由再重新来一个 &nbsp; C++ &nbsp; run-time &nbsp; library. &nbsp; VC针对C++ &nbsp; 加入的Standard &nbsp; C++ &nbsp; Library主要包括：LIBCP.LIB, &nbsp; LIBCPMT.LIB和 &nbsp; MSVCPRT.LIB &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 6)Windows环境下，VC提供的 &nbsp; C &nbsp; run-time &nbsp; library又分为动态运行时库和静态运行时库。 &nbsp; <br>&nbsp; 动态运行时库主要是DLL库文件msvcrt.dll(or &nbsp; MSVCRTD.DLL &nbsp; for &nbsp; debug &nbsp; build),对应的Import &nbsp; library文件是MSVCRT.LIB(MSVCRTD.LIB &nbsp; for &nbsp; debug &nbsp; build) &nbsp; <br>&nbsp; 静态运行时库(release版)对应的主要文件是： &nbsp; <br>&nbsp; LIBC.LIB &nbsp; (Single &nbsp; thread &nbsp; static &nbsp; library, &nbsp; retail &nbsp; version) &nbsp; <br>&nbsp; LIBCMT.LIB &nbsp; (Multithread &nbsp; static &nbsp; library, &nbsp; retail &nbsp; version) &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; msvcrt.dll提供几千个C函数，即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时，很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时，VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件(libc.lib,libcmt.lib或Import &nbsp; library &nbsp; msvcrt.lib)链接进来。 &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 编译时到底哪个C &nbsp; run-time &nbsp; library联入你的程序取决于编译选项： &nbsp; <br>&nbsp; /MD, &nbsp; /ML, &nbsp; /MT, &nbsp; /LD &nbsp; &nbsp; &nbsp; (Use &nbsp; Run-Time &nbsp; Library) &nbsp; <br>&nbsp; 你可以VC中通过以下方法设置选择哪个C &nbsp; run-time &nbsp; library联入你的程序： &nbsp; <br>&nbsp; To &nbsp; find &nbsp; these &nbsp; options &nbsp; in &nbsp; the &nbsp; development &nbsp; environment, &nbsp; click &nbsp; Settings &nbsp; on &nbsp; the &nbsp; Project &nbsp; menu. &nbsp; Then &nbsp; click &nbsp; the &nbsp; C/C++ &nbsp; tab, &nbsp; and &nbsp; click &nbsp; Code &nbsp; Generation &nbsp; in &nbsp; the &nbsp; Category &nbsp; box. &nbsp; See &nbsp; the &nbsp; Use &nbsp; Run-Time &nbsp; Library &nbsp; drop-down &nbsp; box. &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 从程序可移植性考虑,如果两函数都可完成一种功能，选运行时库函数好,因为各个 &nbsp; C &nbsp; 编译器的生产商对标准C &nbsp; Run-time &nbsp; library提供了统一的支持.&nbsp;&nbsp; 
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/60520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-08-31 20:59 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/08/31/60520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何自己写Win32控件</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/08/20/59470.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Wed, 20 Aug 2008 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/08/20/59470.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/59470.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/08/20/59470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/59470.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/59470.html</trackback:ping><description><![CDATA[<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">最早时候就曾经哪里看到过说所有控件都是窗口（</span><span lang=EN-US><font face=Calibri>window</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">），更有甚者说都是对象，这个就不扯了。自己做好的控件是做成</span><span lang=EN-US><font face=Calibri>Lib</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">还是</span><span lang=EN-US><font face=Calibri>Dll</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">那是后话，</span><span lang=EN-US><font face=Calibri>MFC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">我是不熟悉了，</span><span lang=EN-US><font face=Calibri>Win32</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">还是看了几天的。大致把制作的整个流程简要的记录一下。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">自己做的控件最主要的功能就是接受你发给他的命令，也就是要给外部调用的接口。控件有自己的消息处理函数比如</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">LRESULT&nbsp;CALLBACK&nbsp;PETextViewWndProc(HWND&nbsp;hWnd,UINT&nbsp;Message,WPARAM&nbsp;wParam,LPARAM&nbsp;lParam)<br><img id=Codehighlighter1_87_655_Open_Image onclick="this.style.display='none'; Codehighlighter1_87_655_Open_Text.style.display='none'; Codehighlighter1_87_655_Closed_Image.style.display='inline'; Codehighlighter1_87_655_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_87_655_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_87_655_Closed_Text.style.display='none'; Codehighlighter1_87_655_Open_Image.style.display='inline'; Codehighlighter1_87_655_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_87_655_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_87_655_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PETextView&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">View&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(PETextView</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)GetWindowLong(hWnd,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(Message)<br><img id=Codehighlighter1_164_601_Open_Image onclick="this.style.display='none'; Codehighlighter1_164_601_Open_Text.style.display='none'; Codehighlighter1_164_601_Closed_Image.style.display='inline'; Codehighlighter1_164_601_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_164_601_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_601_Closed_Text.style.display='none'; Codehighlighter1_164_601_Open_Image.style.display='inline'; Codehighlighter1_164_601_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_164_601_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_164_601_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;WM_NCCREATE:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((View&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;PETextView(hWnd))&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetWindowLong(hWnd,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,(LONG)View);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;WM_NCDESTROY:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(View)delete&nbsp;View;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&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">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;WM_PAINT:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;View</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">OnPaint();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;WM_SIZE:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;View</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">OnSize(wParam,&nbsp;LOWORD(lParam),&nbsp;HIWORD(lParam));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;PEM_OPENFILE:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;View</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">OpenFile((TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)lParam);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;PEM_CLEAR:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;View</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">ClearFile();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;DefWindowProc(hWnd,Message,wParam,lParam);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">这里有两类消息，一类是系统定义的以</span><span lang=EN-US><font face=Calibri>WM</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">开头，一类是自己定义的，当然随便你自己定义啦。对应的消息看到是调用相应的函数完成的，这也就是说控件的行为就可以另外编写逻辑部分，然后提供接口给这里调用即可。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">之所以说控件就是窗口是因为他有自己的窗口类，以及初始化函数，同时也有创建的函数。窗口类的定义和注册也做成提供给外部的接口，在外部必要的时候调用。而控制控件是通过发送消息来实现的，为了更加好看，可以定义一个宏，比如</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;PE_OpenFile(hWnd,&nbsp;Path)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage((hWnd),&nbsp;PEM_OPENFILE,&nbsp;0,&nbsp;(LPARAM)(Path))</span></div>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">那么创建窗口和控件唯一不同的地方就是，内部的创建和销毁消息是</span><span lang=EN-US><font face=Calibri>WM_NCCREATE</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang=EN-US><font face=Calibri>WM_NCDESTROY</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，先不管这两个消息。我们看到</span><span lang=EN-US><font face=Calibri>WM_NCCREATE</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">之前有个</span><span lang=EN-US><font face=Calibri>GetWindowLong</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，其内有个</span><span lang=EN-US><font face=Calibri>SetWindowLong</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">。这两个是关键的，这样就设置了这个控件的属性，使其关联起来，第二个参数</span><span lang=EN-US><font face=Calibri>msdn</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">上是没有说明设置为</span><span lang=EN-US><font face=Calibri>0</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">是什么意思的，其实这两个函数的第二个参数设置</span><span lang=EN-US><font face=Calibri>0</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">表示读取的意思，第一个是读取该控件的属性，然后第二个函数在增加第三个参数的属性的同时读取赋予给这个控件。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">一切都</span><span lang=EN-US><font face=Calibri>OK</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">了！那么控件创建可在外部的</span><span lang=EN-US><font face=Calibri>WM_CREATE</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">之时调用，当然也可以在使用其功能前调用即可。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">一切提供给外部的调用都</span><span lang=EN-US><font face=Calibri>Port</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">在一个头文件中，这样使用的时候包含这个头文件就好了。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">接下来解释那两个消息，这两个消息是因为我们创建了子窗口，也就是我们自己的控件。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">这两个消息与</span><span lang=EN-US><font face=Calibri>WM_CREATE,WM_DESTROY</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">之间的顺序关系是这样的，只看销毁吧。</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">hwnd = parent, uMsg = WM_DESTROY<br>hwnd = child, uMsg = WM_DESTROY<br>hwnd = child, uMsg = WM_NCDESTROY<br>hwnd = parent, uMsg = WM_NCDESTROY<o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">WM_DESTROY</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">是通知子窗口销毁，然后子窗口通过接受</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">WM_NCDESTROY</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">进行销毁，并发送给父窗口，进行销毁。</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><o:p>&nbsp;</o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">细节部分介绍的差不多，总体思路就是和创建窗口差不多，但是要搞个头文件，把一些个常量和功能的函数另外一个窗口类的初始化和创建的接口搞进去。</span></p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/59470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-08-20 22:06 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/08/20/59470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>俄罗斯方块</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/08/06/58183.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Wed, 06 Aug 2008 14:14:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/08/06/58183.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/58183.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/08/06/58183.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/58183.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/58183.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一次写俄罗斯方块，完全是按照自己的想法做的。做完了很奇怪。估计是按照相对坐标来算，好多的分支语句把自己都搞晕了。所以决定放弃了，贴出来以祭奠。设计的草稿是这样的棋子记录状态棋盘根据棋子状态进行判断和绘制主要检测：越界检测：每次左移或者右移时检测（在边界内则移动否则不动）OK触底检测：每次下降时检测OK，也就是在时钟记录一次时探测。消行检测：触底触发时检测旋转检测：...&nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/08/06/58183.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/58183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-08-06 22:14 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/08/06/58183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐一个文本编辑器</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/08/04/57923.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Mon, 04 Aug 2008 00:13:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/08/04/57923.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/57923.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/08/04/57923.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/57923.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/57923.html</trackback:ping><description><![CDATA[以前曾经推荐过大家一个MasmPlus是用于编写汇编程序的IDE，简洁轻巧。<br>可以到<a href="http://www.aogosoft.com/">这里</a>下载<br><br>然而文本编辑器始终没有遇到一个简洁的，偶然机会看到这个还算符合要求，叫E-texteditor<br><img height=437 alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/etexteditor.jpg" width=707 border=0><br>同样小巧精悍。可惜不是免费的，不过crack倒是一搜一大堆。<br>VistualStudio一装我的硬盘就几乎没空间了。这回可以用他来编辑了.<br>编译器使用mingw，以前都是整个都下载下来，这回就把必要的部分下载下来，顺带make和gdb打了个包<br><a href="http://www.fs2you.com/files/c5121a02-61c9-11dd-847a-0014221b798a/">这里</a>可以下载。make和gdb手生的很，记得一些如codeblocks他们会自动生成makefile文件，不知道这个什么原理。
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/57923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-08-04 08:13 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/08/04/57923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Z]Visual C++开发工具与调试技巧整理</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/07/29/57460.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Tue, 29 Jul 2008 12:05:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/07/29/57460.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/57460.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/07/29/57460.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/57460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/57460.html</trackback:ping><description><![CDATA[本文转自<a style="COLOR: #0000ff" href="http://www.azure.com.cn/" target=_blank>Azure博客</a><br><br>自己总是用VC平台来开发东西，但是有时候总是出这样那样的问题，呵呵，总是需要上网查资料来解决,在这里把自己用到上网查的一些技巧摘录如下,希望对大家有用，省去大家再去搜索的烦恼。<br><br><strong>1.如何在Release状态下进行调试</strong><br>Project－&gt;Setting＝&gt;ProjectSetting对话框，选择Release状态。C/C++标签中的Category选General，Optimizations选Disable(Debug)，Debut info选Program Database。在Link标签中选中Generate debug info复选框。<br><br>注：只是一个介乎Debug和Release的中间状态，所有的ASSERT、VERIFY都不起作用，函数调用方式已经是真正的调用，而不查表，但是这种状态下QuickWatch、调用队列跟踪功能仍然有效，和Debug版一样。<br><br><strong>2. Release和Debug有什么不同</strong><br>Release版称为发行版，Debug版称为调试版。<br>Debug中可以单步执行、跟踪等功能，但生成的可执行文件比较大，代码运行速度较慢。Release版运行速度较快，可执行文件较小，但在其编译条件下无法执行调试功能。<br>Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候，已经配置，所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件，在没有安装Visual C++6.0的机器上不能运行，因为缺相应的DLL，除非选择use static dll when link。<br><br><strong>3. ASSERT和VERIFY有什么区别</strong><br>ASSERT里面的内容在Release版本中不编译，VERIFY里面的内容仍然翻译，但不再判断真假。所以后者更安全一点。<br>例如ASSERT(file.Open(strFileName))。<br>一旦到了Release版本中，这一行就忽略了，file根本就不Open()了，而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。<br><br><strong>4.Workspace和Project之间是什么样的关系</strong><br>每个Workspace可以包括几个project，但只有一个处于Active状态，各个project之间可以有依赖关系，在project的Setting..中可以设定，比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。<br><br><strong>5. 如何在非MFC程序中使用ClassWizard</strong><br>在工程目录下新建一个空的.RC文件，然后加入到工程中就可以了。<br><br><strong>6.如何设置断点</strong><br>按F9在当前光标处增加一个断点和取消一个断点。<br>另外，在编辑状态下，按Ctrl+B组合键，弹出断点设置对话框。然后单击【Condition&#8230;】按钮弹出设置断点条件的对话框进行设置。<br><br><strong>7.在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能</strong><br>这似乎是目前这个Visual C++ 6.0版本的一个bug，可按如下步骤使其正常，如再出现，可如法炮制：<br>(1)关闭Project<br>(2)删除&#8220;工程名.ncb&#8221;文件<br>(3)重新打开工程<br><br><strong>8.如何将一个通过ClassWizard生成的类彻底删除</strong><br>首先在工作区的FileView中选中该类的.h和.cpp文件，按delete删除，然后在文件管理器中将这两个文件删除，再运行ClassWizard，这时出现是否移走该类的提示，选择remove就可以了。<br><br><strong>9. 如何将在workspace中消失的类找出来</strong><br>打开该类对应的头文件，然后将其类名随便改一下，这个时候工作区就会出现新的类，再将这个类改回原来的名字就可以了。<br><br><strong>10. 如何清除所有的断点</strong><br>菜单【Edit】－&gt;【Breakpoints&#8230;】，打开&#8220;Breakpoints&#8221;对话框，单击【Remove All】按钮即可。快捷键是&#8220;Ctrl + Shift + F8&#8221;。<br><br><strong>11. 如何再ClassWizard中选择未列出的信息</strong><br>打开&#8220;ClassWizard&#8221;对话框，然后切换到&#8220;Class Info&#8221;页面。改变&#8220;Message filter&#8221;，如选择&#8220;Window&#8221;，&#8220;Message&#8221;页面就会出现Window的信息。<br><br><strong>12. 如何检测程序中的括号是否匹配</strong><br>把光标移动到需要检测的括号前面，按快捷键&#8220;Ctrl + ]&#8221;。如果括号匹配正确，光标就跳到匹配的括号处，否则光标不移动，并且机箱喇叭还会发出一声警告。<br><br><strong>13. 如何查看一个宏(或变量、函数)的定义</strong><br>把光标移动到要查看的一个宏上，就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单)，如果没有建立浏览文件，就会出现提示对话框，按【确定】按钮，然后就会跳到该宏(或变量、函数)定义的地方。<br><br><strong>14. 如何添加Lib文件到当前工程</strong><br>单击菜单【Project】－&gt;【Settings&#8230;】弹出&#8220;Project Setting&#8221;对话框，切换到&#8220;Link&#8221;标签页，在&#8220;Object/library modules&#8221;处输入Lib文件名称，不同的Lib之间用空格格开。<br><br><strong>15. 如何快速删除项目下的Debug文件夹中临时文件</strong><br>在工作区的FileView视图中选中对应的项目，单击右键弹出菜单，选择【Clean(selection only)】菜单即可。<br><br><strong>16. 如何快速生成一个现有工程除了工程名外完全相同的新工程</strong><br>在新建工程的&#8220;New&#8221;对话框中选择&#8220;Custom Appwizard&#8221;项，输入新工程的名字，单击【OK】按钮。出现&#8220;Custom AppWizard&#8221;项，输入新工程的名字，单击【OK】按钮。出现&#8220;Custom AppWizard－Step 1 of 2&#8221;对话框，选择&#8220;An existing Project&#8221;项，单击【Next】按钮。出现&#8220;Custom AppWizard－Step 2 of 2&#8221;对话框，选择现有工程的工程文件名，最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。<br>现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了，可以在Visual C++ 6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应的.awx和.pdb文件。<br><br><strong>17. 如何解决Visual C++ 6.0不正确连接的问题</strong><br>情景：明明改动了一个文件，却要把整个项目全部重新编译链接一次。刚刚链接好，一运行，又提示重新编译链接一次。<br>这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理：找到工程文件夹下的debug目录，将创建和修改时间都比系统时间的文件全部删除，然后再从新&#8220;Rebuild All&#8221;一次。<br><br><strong>18. 引起LNK2001的常见错误都有哪些</strong><br>遇到的LNK2001错误主要为：unresolved external symbol &#8220;symbol&#8221;<br>如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签，将产生此错误信息。<br>一般来说，发生错误的原因有两个：一是所引用的函数、变量不存在，拼写不正确或者使用错误；其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因：<br>&lt;1&gt;由于编码错误导致的LNK2001错误<br>(1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如，如果在C++源文件了内声明了一变量&#8220;var1&#8221;，却试图在另一个文件内以变量&#8220;var1&#8221;访问改变量。<br>(2)如果使用的内联函数是在.cpp文件内定义的，而不是在头文件内定义将导致LNK2001错误。<br>(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。<br>(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。<br>(5)要注意函数和变量的可公用性，只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。<br>&lt;2&gt;由于编译和联机的设置而造成的LNK2001错误<br>(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项，程序所需要的运行库和MFC时将得到又编译器写入目标文件模块，但除非在文件中明确包含这些库名，否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误<br>(2)如果没有为wWinMainCRTStartup设定程序入口，在使用Unicode和MFC时将出现&#8220;unresolved external on _WinMain@16&#8221;的LNK2001错误信息。<br>(3)使用/MD选项编译时，既然所有的运行库都被保留在动态链接库之内，源文件中对&#8220;func&#8221;的引用，在目标文件里即对&#8220;__imp__func&#8221;的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接，将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译，在使用MSVCxx.LIB链接时也会发生LNK2001错误。<br>(4)使用/ML选项编译时，如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。<br>(5)当编译调试版的应用程序时，如果采用发行版模态库进行链接也会产生LNK2001错误；同样，使用调试版模态库链接发行版应用程序时也会产生相同的错误。<br>(6)不同版本的库和编译器的混合使用也能产生问题，因为新版的库里可能包含早先的版本没有的符号和说明。<br>(7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C++库时打开了函数内联(/Ob1或/Ob2)，但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字)，只是将得到错误信息。为避免该问题的发生，应该在相应的头文件中用inline关键字标志为内联函数。<br>(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。<br><br><strong>19. 如何调试一个没有源码的exe文件调用的dll</strong><br>在Visual C++ 6.0中，进入&#8220;Project Setting&#8221;对话框然后选择Debug标签页。通常Visual Studio默认&#8220;executable for debug session&#8221;为可执行文件名，但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。<br><br><strong>20. Visual C++ 6.0工程中的项目文件都表示什么</strong><br>.opt：工程关于开发环境的参数文件。如工具条位置等信息。<br>.aps(AppStudio File)资源辅助文件，二进制格式，一般不用去管它。<br>.clw：ClassWizard信息文件，实际上是INI文件格式，有兴趣可以研究一下。有时候ClassWizard出了问题，手工修改CLW文件可以解决。如果此文件不存在的话，每次用ClassWizard的时候回提示是否重建。<br>.dsp(DevelopStudio Project)：项目文件，文本格式，不过不熟悉的不要手工修改。<br>.dsw(DevelopStudio Workspace)：是工作区文件，其他特点和.dsp差不多。<br>.plg：是编译信息文件，编译时的error和warning信息文件(实际上是一个html文件)，一般用处不大。在单击菜单【Tool】－&gt;【Option】弹出的对话框里面有个选项可以控制这个文件的生成。<br>.hpj(Help Project)：是生成帮助文件的工程，用microsoft Help Compiler可以处理。<br>.mdp(Microsoft DevStudio Project)：是旧版本的项目文件，如果要打开此文件的话，会提示你是否转换成新的.dsp格式。<br>.bsc：是用于浏览项目信息的，如果用Source Brower的话就必须有这个文件。如果不用这个功能的话，可以在Project Options里面去掉Generate Browse Info File，这样可以加快编译速度。<br>.map是执行文件的映象信息记录文件，除非对系统底层，这个文件一般用不着。<br>.pch(Pre-Compiled File)：是与编译文件，可以加快编译速度，但是文件非常大。<br>.pdb(Program Database)：记录了程序有关的一些数据和调试信息，在调试的时候可能有用。<br>.exp：只有在编译DLL的时候才会生成，记录了DLL文件的一些信息，一般也没有用。<br>.ncb：无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。 
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/57460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-07-29 20:05 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/07/29/57460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Scintilla 主要类和控件的消息</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/07/17/56458.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Thu, 17 Jul 2008 10:43:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/07/17/56458.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/56458.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/07/17/56458.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/56458.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/56458.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>主要类</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=284>
            <p><span>CellBuffer</span></p>
            </td>
            <td vAlign=top width=284>
            <p><span>保存文本，样式信息，恢复堆栈，标签，代码叠起结构等信息</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>ContractionState</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>Document</span></p>
            </td>
            <td vAlign=top width=284>
            <p><span>包含</span><span>CellBuffer</span><span>和一些高度抽象操作，管理样式处理。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>Editor</span></p>
            </td>
            <td vAlign=top width=284>
            <p><span>使用</span><span>ContractionState, Indicator, LineMarker, Style, ViewStyle</span><span>来显示文档</span><span>KeyMap</span><span>和</span><span>ContractionState</span><span>同样在这里使用。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>Indicator</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>LineMarker</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>Style</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>ViewStyle</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>KeyMap</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>ScintillaBase</span></p>
            </td>
            <td vAlign=top width=284>
            <p><span>Editor</span><span>的子类，增加了调用提示和自动完成等功能，使用类</span><span>CallTip</span><span>和</span><span>AutoComplete</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>CallTip</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=284>
            <p><span>AutoComplete</span></p>
            </td>
            <td vAlign=top width=284>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span>Scintilla</span><span>文档的每个字符都紧跟关联的样式信息。一个字节的字符信息和一个字节的样式信息作为一个单位。样式信息高</span><span>3</span><span>位是指示器，低</span><span>5</span><span>位是索引号。索引号索引一个存放样式的数组。这样就可以表示</span><span>32</span><span>种基础样式，几乎包含所有语言的样式。三个无关指示器可以一次显示语法错误，非法命名，和缩进错误。关于样式的位可以通过</span><span>SCI_SETSTYLEBITS</span><span>来改变最多其中</span><span>7</span><span>位，剩下的位用于指示器。</span></p>
<p><span>字符位置信息以</span><span>0</span><span>开始计数，至</span><span>nLen-1</span><span>，中文的字符是两个字符为一个文字，这样计数就有误了（</span><span>DBCS</span><span>）</span></p>
<p>&nbsp;</p>
<p><span>Scintilla</span><span>的消息都是以</span><span>SCI_GETxxx</span><span>或者</span><span>SCI_SETxxx</span><span>来命名的</span></p>
<p><span><span>一．</span></span><span>文本取回与修改</span></p>
<p><span>主要消息有：</span></p>
<p>&#160;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_185102 onclick="this.style.display='none'; Code_Closed_Text_185102.style.display='none'; Code_Open_Image_185102.style.display='inline'; Code_Open_Text_185102.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_185102 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_185102.style.display='none'; Code_Closed_Image_185102.style.display='inline'; Code_Closed_Text_185102.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_185102 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Code_Open_Text_185102 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SCI_GETTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETTEXT(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETSAVEPOINT<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETLINE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;line,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_REPLACESEL(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETREADONLY(</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;readOnly)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETREADONLY<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETTEXTRANGE(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,&nbsp;TextRange</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">tr)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_ALLOCATE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bytes,&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_ADDTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_ADDSTYLEDTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length,&nbsp;cell&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_APPENDTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_INSERTTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pos,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_CLEARALL<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_CLEARDOCUMENTSTYLE<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETCHARAT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;position)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETSTYLEAT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;position)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETSTYLEDTEXT(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,&nbsp;TextRange</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">tr)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETSTYLEBITS(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bits)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETSTYLEBITS<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_TARGETASUTF8(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_ENCODEDFROMUTF8(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">utf8,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">encoded)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETLENGTHFORENCODE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bytes)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></span></div>
<p>&nbsp;</p>
<p><span>1</span><span>）</span><span>SCI_GETTEXT(int length, char *text)</span></p>
<p><span>此函数可以取得控件中的字符串存到一个缓冲区，这样就可以保存文档了。流程是使用</span><code><span>SCI_GETLENGTH</span></code><code><span>获得字符串的长度然后根据取得的长度申请一个缓冲区，再利用该消息取得文本，然后就可以保存文本了，同时需要利用</span></code><code><span>SCI_SETSAVEPOINT</span></code><code><span>标记文本已保存了。</span></code><code></code></p>
<p><code>&nbsp;</code></p>
<p><code><span>做了例子果然是可以运行的，不知道作者是如何制作这样一个控件的。我对他的内部运行机制很感兴趣，想仔细看一些具体的代码，而不是仅仅使用它。另外发现</span></code><code><span>API</span></code><code><span>使用的字符是宽字符，这一点很令人讨厌。<br><br>另外获取处理函数的过程用了上次写的typedef的用法，改一下看上去就清晰多了<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">typedef&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">EditorSendFun)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ptr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EditorSendFun&nbsp;editsendmessage;</span></div>
</span></code>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/56458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-07-17 18:43 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/07/17/56458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中的强制类型转换[转]</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/07/14/56129.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Mon, 14 Jul 2008 13:32:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/07/14/56129.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/56129.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/07/14/56129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/56129.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/56129.html</trackback:ping><description><![CDATA[<p class=alt><span><span>标准c++中主要有四种强制转换类型运算符：&nbsp;&nbsp;&nbsp;</span></span><span>&nbsp;&nbsp;</span></p>
<p class=alt><span></span><span class=keyword>const_cast</span><span>，</span><span class=keyword>reinterpret_cast</span><span>，</span><span class=keyword>static_cast</span><span>，</span><span class=keyword>dynamic_cast</span><span>等等。&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>1）</span><span class=keyword>static_cast</span><span>&lt;T*&gt;(a)&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>将地址a转换成类型T，T和a必须是指针、引用、算术类型或枚举类型。&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>表达式</span><span class=keyword>static_cast</span><span>&lt;T*&gt;(a),&nbsp;a的值转换为模板中指定的类型T。在运行时转换过程中，不进行类型检查来确保转换的安全性。&nbsp;&nbsp;&nbsp;</span></p>
<p class=alt><span>例子：&nbsp;&nbsp;&nbsp;</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_8_14_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_14_Open_Text.style.display='none'; Codehighlighter1_8_14_Closed_Image.style.display='inline'; Codehighlighter1_8_14_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_14_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_14_Closed_Text.style.display='none'; Codehighlighter1_8_14_Open_Image.style.display='inline'; Codehighlighter1_8_14_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;B&nbsp;</span><span id=Codehighlighter1_8_14_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_8_14_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_40_46_Open_Image onclick="this.style.display='none'; Codehighlighter1_40_46_Open_Text.style.display='none'; Codehighlighter1_40_46_Closed_Image.style.display='inline'; Codehighlighter1_40_46_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_40_46_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_46_Closed_Text.style.display='none'; Codehighlighter1_40_46_Open_Image.style.display='inline'; Codehighlighter1_40_46_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;D&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;B&nbsp;</span><span id=Codehighlighter1_40_46_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_40_46_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f(B</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pb,&nbsp;D</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pd)&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_78_206_Open_Image onclick="this.style.display='none'; Codehighlighter1_78_206_Open_Text.style.display='none'; Codehighlighter1_78_206_Closed_Image.style.display='inline'; Codehighlighter1_78_206_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_78_206_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_78_206_Closed_Text.style.display='none'; Codehighlighter1_78_206_Open_Image.style.display='inline'; Codehighlighter1_78_206_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_78_206_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_78_206_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;D</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pd2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">D</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(pb);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;不安全,&nbsp;pb可能只是B的指针&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;B</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pb2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(pd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;安全的&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=""></span><span>&nbsp;&nbsp;</span></p>
<p class=""><span>2）</span><span class=keyword>dynamic_cast</span><span>&lt;T*&gt;(a)&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>表达式</span><span class=keyword>dynamic_cast</span><span>&lt;T*&gt;(a)&nbsp;将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型，该操作将返回一个空指针。&nbsp;&nbsp;&nbsp;</span></p>
<p class=alt><span>例子：&nbsp;&nbsp;&nbsp;</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_8_14_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_14_Open_Text.style.display='none'; Codehighlighter1_8_14_Closed_Image.style.display='inline'; Codehighlighter1_8_14_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_14_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_14_Closed_Text.style.display='none'; Codehighlighter1_8_14_Open_Image.style.display='inline'; Codehighlighter1_8_14_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A&nbsp;</span><span id=Codehighlighter1_8_14_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_8_14_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_29_35_Open_Image onclick="this.style.display='none'; Codehighlighter1_29_35_Open_Text.style.display='none'; Codehighlighter1_29_35_Closed_Image.style.display='inline'; Codehighlighter1_29_35_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_29_35_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_29_35_Closed_Text.style.display='none'; Codehighlighter1_29_35_Open_Image.style.display='inline'; Codehighlighter1_29_35_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;B&nbsp;</span><span id=Codehighlighter1_29_35_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_29_35_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f()&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_56_237_Open_Image onclick="this.style.display='none'; Codehighlighter1_56_237_Open_Text.style.display='none'; Codehighlighter1_56_237_Closed_Image.style.display='inline'; Codehighlighter1_56_237_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_56_237_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_56_237_Closed_Text.style.display='none'; Codehighlighter1_56_237_Open_Image.style.display='inline'; Codehighlighter1_56_237_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_56_237_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_56_237_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;A</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pa&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;B</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;B;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pv&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dynamic_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(pa);&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pv&nbsp;现在指向了一个类型为A的对象&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pv&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dynamic_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(pb);&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pv&nbsp;现在指向了一个类型为B的对象&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=alt></span><span></span>&nbsp;</p>
<p class=""><span>3）</span><span class=keyword>const_cast</span><span>&lt;T*&gt;(a)&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>去掉类型中的常量，除了</span><span class=keyword>const</span><span>或不稳定的变址数，T和a必须是相同的类型。&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>表达式</span><span class=keyword>const_cast</span><span>&lt;T*&gt;(a)被用于从一个类中去除以下这些属性：</span><span class=keyword>const</span><span>,&nbsp;</span><span class=keyword>volatile</span><span>,&nbsp;和&nbsp;__unaligned。&nbsp;&nbsp;&nbsp;</span></p>
<p class=alt><span>例子： &nbsp;&nbsp;</span></p>
<p class=""><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_8_14_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_14_Open_Text.style.display='none'; Codehighlighter1_8_14_Closed_Image.style.display='inline'; Codehighlighter1_8_14_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_14_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_14_Closed_Text.style.display='none'; Codehighlighter1_8_14_Open_Image.style.display='inline'; Codehighlighter1_8_14_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A&nbsp;</span><span id=Codehighlighter1_8_14_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_8_14_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f()&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_34_189_Open_Image onclick="this.style.display='none'; Codehighlighter1_34_189_Open_Text.style.display='none'; Codehighlighter1_34_189_Closed_Image.style.display='inline'; Codehighlighter1_34_189_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_34_189_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_34_189_Closed_Text.style.display='none'; Codehighlighter1_34_189_Open_Image.style.display='inline'; Codehighlighter1_34_189_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_34_189_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_34_189_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;A&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pa&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">const对象&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;A&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pb;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非const对象&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">pb&nbsp;=&nbsp;pa;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;这里将出错，不能将const对象指针赋值给非const对象&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;pb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;const_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(pa);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;现在OK了&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>..&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=""></span><span></span>&nbsp;</p>
<p class=alt><span>4）</span><span class=keyword>reinterpret_cast</span><span>&lt;T*&gt;(a)&nbsp;&nbsp;&nbsp;</span></p>
<p class=alt><span>任何指针都可以转换成其它类型的指针，T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针。&nbsp;&nbsp;&nbsp;</span></p>
<p class=alt><span>表达式</span><span class=keyword>reinterpret_cast</span><span>&lt;T*&gt;(a)能够用于诸如</span><span class=datatypes>char</span><span>*&nbsp;到&nbsp;</span><span class=datatypes>int</span><span>*，或者One_class*&nbsp;到&nbsp;Unrelated_class*等类似这样的转换，因此可能是不安全的。&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>例子：&nbsp;&nbsp;&nbsp;</span></p>
<p class=""><span>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_8_14_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_14_Open_Text.style.display='none'; Codehighlighter1_8_14_Closed_Image.style.display='inline'; Codehighlighter1_8_14_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_14_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_14_Closed_Text.style.display='none'; Codehighlighter1_8_14_Open_Image.style.display='inline'; Codehighlighter1_8_14_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A&nbsp;</span><span id=Codehighlighter1_8_14_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_8_14_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_29_35_Open_Image onclick="this.style.display='none'; Codehighlighter1_29_35_Open_Text.style.display='none'; Codehighlighter1_29_35_Closed_Image.style.display='inline'; Codehighlighter1_29_35_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_29_35_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_29_35_Closed_Text.style.display='none'; Codehighlighter1_29_35_Open_Image.style.display='inline'; Codehighlighter1_29_35_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;B&nbsp;</span><span id=Codehighlighter1_29_35_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_29_35_Open_Text><span style="COLOR: #000000">{&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f()&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_55_171_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_171_Open_Text.style.display='none'; Codehighlighter1_55_171_Closed_Image.style.display='inline'; Codehighlighter1_55_171_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_55_171_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_171_Closed_Text.style.display='none'; Codehighlighter1_55_171_Open_Image.style.display='inline'; Codehighlighter1_55_171_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_55_171_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_55_171_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;A</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pa&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pv&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;reinterpret_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(pa);&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pv&nbsp;现在指向了一个类型为B的对象，这可能是不安全的&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class="">&nbsp;<br>本文转自<a href="http://www.libing.net.cn/read.php?520">http://www.libing.net.cn/read.php?520</a></span></p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/56129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-07-14 21:32 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/07/14/56129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>typedef用法小结</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56051.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sun, 13 Jul 2008 14:33:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56051.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/56051.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56051.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/56051.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/56051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近看Scintillia的源代码，总看到typedef的身影，朋友也说autodesk的面试官曾说过不懂typedef很差劲。于是查了网上的资料，看了几种比较<br>
<p><span><span>容易出错的常用用法，做了一些整理。<br><br>一．</span></span><span>起别名的两种用法</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">）&nbsp;pInt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;&nbsp;&nbsp;pInt&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span><span>比如</span><span>pInt a,b;</span></p>
<p><span>第一种表示：</span><span> int*a;int*b;</span></p>
<p><span>第二种表示：</span><span> int*a,b;</span></p>
<p><span>所以第一种更像一个类型，第二种更像宏。</span></p>
<p>&nbsp;</p>
<p><span><span>二．</span></span><span>旧式代码中声明对象</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">typedef&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;tagPoint<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_25_50_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_50_Open_Text.style.display='none'; Codehighlighter1_25_50_Closed_Image.style.display='inline'; Codehighlighter1_25_50_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_25_50_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_50_Closed_Text.style.display='none'; Codehighlighter1_25_50_Open_Image.style.display='inline'; Codehighlighter1_25_50_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_25_50_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_25_50_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Int&nbsp;x;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Int&nbsp;y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">POINT;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>POINT&nbsp;a,b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span>&nbsp;</p>
<p><span><span>三．</span></span><span>代码简化</span></p>
<p><span>为复杂的声明定义一个新的简单的别名</span></p>
<p><span>方法：</span><span>在原来的声明里逐步用别名替换一部分复杂声明，如此循环，把带变量名的部分留到最后替换，得到的就是原声明的最简化版</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">typedef&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">PF)&nbsp;(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);</span></div>
<p><span>这个声明引入了</span><span> PF </span><span>类型作为函数指针的同义字，该函数有两个</span><span> const char * </span><span>类型的参数以及一个</span><span> int </span><span>类型的返回值。</span></span></p>
<p align=left><span></span>&nbsp;</p>
<p align=left><span>如果要使用下列形式的函数声明，那么上述这个</span><span> typedef </span><span>是不可或缺的：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">PF&nbsp;Register(PF&nbsp;pf);</span></div>
<p align=left></span></p>
<p align=left><span>Register() </span><span>的参数是一个</span><span> PF </span><span>类型的回调函数</span><span>，返回某个函数的地址</span><span>，其署名与先前注册的名字相同。如果不用</span><span> typedef</span><span>，那么代码是这样的：</p>
<p align=left></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">Register&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pf)(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)))(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);&nbsp;</span></div>
<p align=left></span></p>
<p align=left>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/56051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-07-13 22:33 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用Scintilla编辑控件</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56049.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sun, 13 Jul 2008 13:07:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56049.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/56049.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/56049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/56049.html</trackback:ping><description><![CDATA[&nbsp; 摘自Scintilla文档
<p><span><span>一．</span></span><span>如何在窗口中建立</span><span>Scintilla</span><span>编辑控件</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>载入动态链接库</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">hmod&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LoadLibrary(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SciLexer.DLL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(hmod</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">NULL)<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img id=Codehighlighter1_52_198_Open_Image onclick="this.style.display='none'; Codehighlighter1_52_198_Open_Text.style.display='none'; Codehighlighter1_52_198_Closed_Image.style.display='inline'; Codehighlighter1_52_198_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_52_198_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_52_198_Closed_Text.style.display='none'; Codehighlighter1_52_198_Open_Image.style.display='inline'; Codehighlighter1_52_198_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_52_198_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_52_198_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(hwndParent,<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;Scintilla&nbsp;DLL&nbsp;could&nbsp;not&nbsp;be&nbsp;loaded.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Error&nbsp;loading&nbsp;Scintilla</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_OK&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;MB_ICONERROR);<br></span><span style="COLOR: #008080">8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span></p>
<pre>
<pre><span></span></pre>
<span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>创建窗口（已经注册）</span></pre>
<pre>
<pre><span></span></pre>
<span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">hwndScintilla&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateWindowEx(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Scintilla</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">,&nbsp;WS_CHILD&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;WS_VISIBLE&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;WS_TABSTOP&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;WS_CLIPCHILDREN,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">,hwndParent,(HMENU)GuiID,&nbsp;hInstance,NULL);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
二．如何控制窗口类控件</span></pre>
<p><span>方法一：给控件发送消息和接受来自控件的响应</span></p>
<pre><span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SendMessage(hwndScintilla,sci_command,wparam,lparam);</span></div>
</span></pre>
<p><span>方法二：首先通过</span><span>SCI_GETDIRECTFUNCTION </span><span>和</span><span> SCI_GETDIRECTPOINTER</span><span>消息获取编辑控件回调函数的指针和第一个参数，接下来就可以直接使用编辑控件的消息处理函数了。</span></p>
<pre>
<pre><span></span></pre>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">fn)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ptr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(__cdecl&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">))SendMessage(hwndScintilla,SCI_GETDIRECTFUNCTION,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>ptr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
然后使用该回调函数：</pre>
<pre><span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">fn(ptr,sci_command,wparam,lparam);</span></div>
</span></pre>
<pre>三．如何接受响应</pre>
<pre>只要在父窗口消息处理函数中对<span>WM_NOTIFY</span>消息做相应处理</pre>
<pre><span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">NMHDR&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">lpnmhdr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>[<img src="http://www.cppblog.com/Images/dot.gif">]<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;WM_NOTIFY:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>lpnmhdr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(LPNMHDR)&nbsp;lParam;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(lpnmhdr</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">hwndFrom</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">hwndScintilla)<br><img id=Codehighlighter1_103_186_Open_Image onclick="this.style.display='none'; Codehighlighter1_103_186_Open_Text.style.display='none'; Codehighlighter1_103_186_Closed_Image.style.display='inline'; Codehighlighter1_103_186_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_103_186_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_103_186_Closed_Text.style.display='none'; Codehighlighter1_103_186_Open_Image.style.display='inline'; Codehighlighter1_103_186_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_103_186_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_103_186_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(lpnmhdr</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">code)<br><img id=Codehighlighter1_132_185_Open_Image onclick="this.style.display='none'; Codehighlighter1_132_185_Open_Text.style.display='none'; Codehighlighter1_132_185_Closed_Image.style.display='inline'; Codehighlighter1_132_185_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_132_185_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_185_Closed_Text.style.display='none'; Codehighlighter1_132_185_Open_Image.style.display='inline'; Codehighlighter1_132_185_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_132_185_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_132_185_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SCN_CHARADDED:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#8230;]<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>整个过程没有任何问题，做好后是这个样子的<a style="COLOR: #ff0000" href="http://www.cppblog.com/Files/szhoftuncun/LittleEdit.rar">Download</a>。<br>此时你会发现该控件你没有发送任何消息就已经具备了一定的功能，有redo undo操作，还有复制黏贴。</span></pre>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/56049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-07-13 21:07 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>近期学习计划</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53271.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 14 Jun 2008 12:05:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53271.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/53271.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/53271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/53271.html</trackback:ping><description><![CDATA[两本需要看的书<br>C++程序设计语言&nbsp;&nbsp; 经常看看思考思考习题认真对待。<br>算法导论&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要琢磨，更需要创造性的应用。<br><br>一些需要玩玩的小程序<br>简单文本编辑器&nbsp;&nbsp;&nbsp;&nbsp; 先把界面搞出来再实现功能<br>计算器<br><br><img src ="http://www.cppblog.com/szhoftuncun/aggbug/53271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-06-14 20:05 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++之父表达式计算例子</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53186.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Fri, 13 Jun 2008 16:24:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53186.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/53186.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/53186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/53186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53186.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/53186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-06-14 00:24 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/06/14/53186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【疑惑】小波变换的一点瑕疵</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/05/18/50220.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 17 May 2008 17:30:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/05/18/50220.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/50220.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/05/18/50220.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/50220.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/50220.html</trackback:ping><description><![CDATA[<br>
<div style="TEXT-ALIGN: center"><img alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/ying1.jpg"><br>图0<br></div>
<br>
<div style="TEXT-ALIGN: center"><img alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/a1.jpg"><br>图1.1<br></div>
<br>
<div style="TEXT-ALIGN: center"><img alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/a2.jpg"><br>图1.2<br></div>
<br>
<div style="TEXT-ALIGN: center"><img alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/b1.jpg"><br>图2.1<br></div>
<br>
<div style="TEXT-ALIGN: center"><br>
<div style="TEXT-ALIGN: left">
<div style="TEXT-ALIGN: center"><img alt="" src="http://www.cppblog.com/images/cppblog_com/szhoftuncun/b2.jpg"><br>图2.2<br></div>
<br><br><br>图0是原图，经过一次小波变换后变成图1.1，逆变换回来后是图1.2<br>看图1.2发现有些像素与原图不同<br>然后对图1.2经过一次小波变换变成图2.1，逆变换回来时图2.2<br>图2.2与原图十分相似<br><br>算法并没有不同<br>为什么会有这样的现象？<br>大家帮帮我哈。<br><br>ps：小波变换是有损的<br><br></div>
</div>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/50220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-05-18 01:30 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/05/18/50220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】构造可配置词法分析器【正文六&amp;七】</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47948.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Wed, 23 Apr 2008 12:26:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47948.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/47948.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47948.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/47948.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/47948.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47948.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/47948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-04-23 20:26 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】构造可配置词法分析器【正文五】</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47943.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Wed, 23 Apr 2008 11:50:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47943.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/47943.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/47943.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/47943.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47943.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/47943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-04-23 19:50 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】构造可配置词法分析器【正文四】</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47939.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Wed, 23 Apr 2008 10:34:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47939.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/47939.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/47939.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/47939.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47939.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/47939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-04-23 18:34 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】构造可配置词法分析器【正文三】</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47937.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Wed, 23 Apr 2008 10:11:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47937.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/47937.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/47937.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/47937.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47937.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/47937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-04-23 18:11 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/04/23/47937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】构造可配置词法分析器【正文二】</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47815.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Tue, 22 Apr 2008 06:26:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47815.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/47815.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/47815.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/47815.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47815.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/47815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-04-22 14:26 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】构造可配置词法分析器【正文一】陈梓瀚同学著</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47779.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Mon, 21 Apr 2008 16:19:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47779.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/47779.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/47779.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/47779.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47779.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/47779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-04-22 00:19 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/04/22/47779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识LSB信息隐藏算法</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/03/15/44559.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 15 Mar 2008 05:29:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/03/15/44559.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/44559.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/03/15/44559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/44559.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/44559.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/03/15/44559.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/44559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-03-15 13:29 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/03/15/44559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows程序设计（滚动条）</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/01/22/41675.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Tue, 22 Jan 2008 14:33:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/01/22/41675.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/41675.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/01/22/41675.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/41675.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/41675.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由于屏幕不够显示，滚动条成为必备品。我们也习以为常了，如果没有滚动条，我们的电脑生活就没那么轻松了^_^。要添加滚动条，我们必须知道客户区的信息，客户区是不断变化的，但是变化是就就有WM_SIZE消息，此时的lparam的高字节保存高度，低字节保存宽度。获取办法如下                                    caseWM_SIZE:&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/01/22/41675.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/41675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-01-22 22:33 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/01/22/41675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows编程(输出文字)</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/01/21/41565.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Mon, 21 Jan 2008 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/01/21/41565.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/41565.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/01/21/41565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/41565.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/41565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;显示器是由许多应用程序填充的，所以如何合理使用这一资源是至关重要的。有两种极端情况，一种是你的显示区域不够显示，一种是够显示但非常的多余，资源浪费。Windows程序只能对显示区域大小甚至字符的大小做很少的假定，必须使用Windows提供的功能来取得关于程序执行环境的信息。关于重新绘制在书中讲了许多，那是讲给从dos时代走过来的人的，我用惯了xp的人，很容易明白，显示区域是充满...&nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/01/21/41565.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/41565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-01-21 15:50 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/01/21/41565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows编程（窗口与消息）</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/01/19/41479.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Sat, 19 Jan 2008 12:03:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/01/19/41479.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/41479.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/01/19/41479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/41479.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/41479.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 窗口是屏幕上的矩形区域，消息窗口功能有限，因为我们不能添加四个以上的按钮以及菜单等，而且添加的按钮必须是windows提供的按钮，不能自定义。所以我们有必要自己创建一个多功能可自定义的窗口。自己的窗口创建窗口最重要的函数是CreateWindow，它可以创建重叠式窗口，弹出式窗口，子窗口等。而且可以自定义各种功能。                            ...&nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/01/19/41479.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/41479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-01-19 20:03 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/01/19/41479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows程序设计(开始)</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/01/18/41443.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Fri, 18 Jan 2008 14:05:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/01/18/41443.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/41443.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/01/18/41443.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/41443.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/41443.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/01/18/41443.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/41443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-01-18 22:05 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/01/18/41443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于内存模式[节选]</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/01/01/40195.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Tue, 01 Jan 2008 13:18:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/01/01/40195.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/40195.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/01/01/40195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/40195.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/40195.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2008/01/01/40195.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/40195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2008-01-01 21:18 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/01/01/40195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关系闭包运算</title><link>http://www.cppblog.com/szhoftuncun/archive/2007/11/12/36442.html</link><dc:creator>foxtail</dc:creator><author>foxtail</author><pubDate>Mon, 12 Nov 2007 06:25:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2007/11/12/36442.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/36442.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2007/11/12/36442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/36442.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/36442.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/szhoftuncun/archive/2007/11/12/36442.html'>阅读全文</a><img src ="http://www.cppblog.com/szhoftuncun/aggbug/36442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/szhoftuncun/" target="_blank">foxtail</a> 2007-11-12 14:25 <a href="http://www.cppblog.com/szhoftuncun/archive/2007/11/12/36442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>