﻿<?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>QQ:418104681
上帝要你死在追求完美的道路上</description><language>zh-cn</language><lastBuildDate>Sun, 23 Nov 2008 10:11:18 GMT</lastBuildDate><pubDate>Sun, 23 Nov 2008 10:11:18 GMT</pubDate><ttl>60</ttl><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>0</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>2</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>[zt]关于DLL的创建和使用</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/10/02/63170.html</link><dc:creator>沈臻豪(foxtail)</dc:creator><author>沈臻豪(foxtail)</author><pubDate>Thu, 02 Oct 2008 15:19:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/10/02/63170.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/63170.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/10/02/63170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/63170.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/63170.html</trackback:ping><description><![CDATA[通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一：<br>　　(1)Windows的系统目录：\windows\system；<br>　　(2)DOS中path所指出的任何目录；<br>　　(3)程序所在的目录。<br>　　一、动态链接库的结构<br><br>　　动态链接库中定义有两种函数：导出函数(export function)和内部函数(internal function)，<br>导出函数可以被其它模块调用，内部函数只能在库内部使用。我们在用C＋＋定制动态库文件时，<br>需要编写的就是包含导出函数表的模块定义文件(.DEF)和实现导出函数功能的C＋＋文件。下面以<br>Sample.dll为例介绍DEF文件和实现文件的结构。<br>　　1.模块定义文件(.DEF)是一个或多个用于描述DLL属性的模块语句组成的文本文件，每个DEF文<br>件至少必须包含以下模块定义语句：<br>　　&#183;第一个语句必须是LIBRARY语句，指出DLL的名字；<br>　　&#183;EXPORTS语句列出被导出函数的名字；<br>　　&#183;可以使用DESCRIPTION语句描述DLL的用途(此句可选)；<br>　　&#183;"；"对一行进行注释(可选)。<br>　　2.实现文件<br>　　实现入口表函数的cpp文件中，包含DLL入口点处理的API函数和导出函数的代码。<br>　　二、创建Sample.dll<br>　　 1.首先创建Sample.dll的工程,启动VC＋＋5.0按以下步骤生成DLL工程:<br>　　&#183;在选单中选择File\New\Project；<br>　　&#183;在工程列表中选择Win32 Dynamic－Link Library；<br>　　&#183;在Project Name中输入工程名:Sample；<br>　　&#183;单击Location右边按钮,选择c:\sample目录；<br>　　&#183;单击OK完成,至此已创建了Sample.dll的工程文件。<br>　　2.创建Sample.def文件：<br>　　&#183;在选单中选择File\New\Text File；<br>　　&#183;输入以下代码后保存文件名"Sample.def"：<br>　　 ;Sample.def<br>　　 ;指出DLL的名字Sample,链接器将这个名字放到DLL导入库中<br>　　 LIBRARY Sample<br>　　 ;定义导出函数ShowMe()为例<br><br>　　 EXPORTS<br>　　 ShowMe<br>　　 ;def文件结束<br>　　3.创建Sample.cpp<br>　　 .在选单中选择File\New\C＋＋ Source File项<br>　　 .输入以下代码后保存文件名"Sample.cpp"<br>　　 //Sample.cpp<br>　　 #include 〈windows.h〉<br>　　 int ShowMe(void);<br>　　 //DllEntryPoint为DLL入口点函数,负责初试化并终止DLL<br>　　 BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)<br>　　 { switch(dwReason)<br>　　 { case DLL-PROCESS-ATTACH:<br>　　 { break; }<br>　　 case DLL－PROCESS－DETACH:<br>　　 { break; } }<br>　　 return TRUE; }<br>　　 int ShowMe(void)<br>　　 { //蜂鸣器响一下<br>　　 MessageBeep((WORD)－1);<br>　　 MessageBox("你好!");<br>　　 return 1; }<br>　　4.编译DLL文件<br>　　从Build选单中选择Build Sample.DLL,产生Sample.DLL文件,以后就可以随时调用了。<br>　　三、在应用程序中调用DLL文件<br>　　在应用程序中要首先装入DLL后才能调用导出表中的函数,例如用MFC创建基于对话框的工<br>程Test,并在对话框上放置"Load"按钮,你就必须添加装载代码。<br>　　1.首先在TestDlg.cpp的首部添加变量设置代码：<br>　　//设置全局变量gLibSample用于存储DLL句柄<br>　　HINSTANCE gLibSample=NULL;<br>　　//第二个变量ShowMe是指向DLL库中ShowMe()函数的指针<br>　　typedef int( SHOWME)(void);<br><br>　　SHOWME ShowMe;<br>　　2.利用ClassWizard为"Load"按钮添加装载DLL的代码：<br>　　Void CTestDlg::OnLoadButton()<br>　　{ //要添加的代码如下<br>　　 if(gLibMyDLL!=NULL)<br>　　 { MessageBox("The Sample.DLL has already been load.");<br>　　 return; }<br>　　 //装载Sample.dll，未加路径，将在三个默认路径中寻找<br>　　 gLibSample=LoadLibrary("SAMPLE.DLL");<br>　　 //返回DLL中ShowMe()函数的地址<br>　　 ShowMe=(SHOWME)GetProcAddress(gLibSample,"ShowMe"); }<br>　　3.只要DLL装载成功,在应用程序中就可以直接调用ShowMe()函数（本程序在Windows 95,VC＋＋5.0中运行通过）。 <br><br>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/63170.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-02 23:19 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/10/02/63170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]软件开发金钥匙——写给毕业生的忠告</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/09/29/63052.html</link><dc:creator>沈臻豪(foxtail)</dc:creator><author>沈臻豪(foxtail)</author><pubDate>Mon, 29 Sep 2008 08:59:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/09/29/63052.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/63052.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/09/29/63052.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/63052.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/63052.html</trackback:ping><description><![CDATA[&#8220;又是一年毕业时&#8221;，看到一批批学子离开人生的象牙塔，走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志，不觉感叹万千&#8230;&#8230;本文是自己工作6年的经历沉淀或者经验提炼，希望对所有的软件工程师们有所帮助，早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议。
<p>　　1、 分享第一条经验：&#8220;学历代表过去、能力代表现在、学习力代表未来。&#8221;其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要：&#8220;重要的道理明白太晚将抱憾终生!&#8221;所以放在每一条，让刚刚毕业的朋友们早点看到哈!</p>
<p>　　2、 一定要确定自己的发展方向，并为此目的制定可行的计划。不要说什么，&#8220;我刚毕业，还不知道将来可能做什么?&#8221;，&#8220;跟着感觉走，先做做看&#8221;。因为，这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物?向管理方向走，成为职业经理人?先熟悉行业和领域，将来自立门户?还是先在行业里面混混，过几年转行做点别的?这很重要，它将决定你近几年、十年内&#8220;做什么事情才是在做正确的事情!&#8221;。</p>
<p>　　3、 软件开发团队中，技术不是万能的，但没有技术是万万不能的!在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基础。算我孤陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&#8220;高学历的牛人&#8221;(非技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&#8220;再也受不了啦!&#8221;四分五裂、各奔东西。那个项目的&#8220;成功度&#8221;大家可想而知了。</p>
<p>　　4、 详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。请牢记：&#8220;如果一个软件开发人员在1、2年内都没有更新过自己的知识，那么，其实他已经不再属于这个行业了。&#8221;不要告诉自己没有时间。来自时间管理领域的著名的&#8220;三八原则&#8221;告诫我们：另外的那8小时如何使用将决定你的人生成败!本人自毕业以来，平均每天实际学习时间超过2小时。</p>
<p>　　5、 书籍是人类进步的阶梯，对软件开发人员尤其如此。书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到&#8220;世外高人&#8221;，并不厌其烦地教你。对于花钱买书，我个人经验是：千万别买国内那帮人出的书!我买的那些家伙出的书，!00%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉。&#8220;拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。&#8221;只有将书本变成的自己智慧，才算是真正拥有了它。</p>
<p>　　6、 不要仅局限于对某项技术的表面使用上，哪怕你只是偶尔用一、二次。&#8220;对任何事物不究就里&#8221;是任何行业的工程师所不应该具备的素质。开发Windows应用程序，看看Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序;用VC++、Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&#8220;知其然且知其所以然&#8221;!</p>
<p>　　7、 在一种语言上编程，但别为其束缚了思想。&#8220;代码大全&#8221;中说：&#8220;深入一门语言编程，不要浮于表面&#8221;。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由，所以也没有哪门语言是&#8220;包治百病&#8221;的&#8220;灵丹妙药&#8221;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???&#8220;他山之石、可以攻玉&#8221;。</p>
<p>　　8、 养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面)。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。</p>
<p>　　9、 理论与实践并重，内外双修。工程师的内涵是：以工程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</p>
<p>　　10、心态有多开放，视野就有多开阔。不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思想，尽可能地与人交流与分享，或者传授给开发团队的成员。&#8220;与人交换苹果之后，每个人还是只有一个苹果;但交换思想之后，每个人都拥有两种思想&#8221;，道理大家都懂，但有多少人真正能做到呢?</p>
<p>　　11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。网络早已不再只是&#8220;虚拟世界&#8221;，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当他别人拿着合同找你合作，你却这也不会，那也不熟时，你将后悔莫及。</p>
<p>　　12、书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明： &#8220;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&#8221;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。可见，掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识，有空花时间看看，韬光养晦、未雨绸缪。</p>
<p>　　13、本文的总结与反思：</p>
<p><span style="COLOR: #ff0000">　　A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。</span></p>
<p style="COLOR: #ff0000">　　B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。</p>
<p style="COLOR: #ff0000">　　C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/63052.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-29 16:59 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/09/29/63052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目录与公告</title><link>http://www.cppblog.com/szhoftuncun/archive/2008/09/15/61838.html</link><dc:creator>沈臻豪(foxtail)</dc:creator><author>沈臻豪(foxtail)</author><pubDate>Mon, 15 Sep 2008 01:03:00 GMT</pubDate><guid>http://www.cppblog.com/szhoftuncun/archive/2008/09/15/61838.html</guid><wfw:comment>http://www.cppblog.com/szhoftuncun/comments/61838.html</wfw:comment><comments>http://www.cppblog.com/szhoftuncun/archive/2008/09/15/61838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/szhoftuncun/comments/commentRss/61838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/szhoftuncun/services/trackbacks/61838.html</trackback:ping><description><![CDATA[<p>为了更好地学习交流C++技术，虎子同学创建了CPP茶馆，欢迎大家聊天发贴<br><br><font color=#cc0000 size=2>QQ群一号：35660860</font> <br><font color=#cc0000 size=2>QQ群二号：40790936<br></font><br>点这里：<a href="http://groups.google.com/group/cppteahouse?hl=zh-CN">CPP茶馆总论坛</a> <br><br>@英语已经不仅仅是一门语言，它可以改变一个人的视野。 <br>************************************************************<br>目录与摘要<br>************************************************************<br>################<br>常用库的学习使用<br>################<br><br>1.[<a href="http://www.cppblog.com/szhoftuncun/archive/2008/09/07/61219.html">STL学习摘要之序列式容器]<br><br></a>##########<br>Project<br>##########<br>1.[<a href="http://www.cppblog.com/szhoftuncun/archive/2008/08/06/58183.html">俄罗斯方块][未完善]<br><br></a>2.[<a href="http://www.cppblog.com/szhoftuncun/archive/2008/11/09/66377.html">俄罗斯方块V1.0</a>]<br><br>3.[<a title=俄罗斯方块V1.2 href="http://www.cppblog.com/szhoftuncun/archive/2008/11/16/67025.html">俄罗斯方块V1.2</a>]<br><br>3.[<a href="http://www.cppblog.com/szhoftuncun/archive/2008/10/26/65052.html">MD5计算工具</a>]<br><br>4.<a href="http://www.cppblog.com/szhoftuncun/archive/2008/03/15/44559.html">[BMP位图操作类][基于LSB的数字图像水印]</a><br><br>#######<br>x86ASM<br>#######<br>1.[<a title=汇编学习测试例子 href="http://www.cppblog.com/szhoftuncun/category/5150.html">汇编学习测试例子</a>]<br><br>#######<br>Tips:<br>#######<br>1.[<a href="http://www.cppblog.com/szhoftuncun/archive/2007/08/11/29768.html">GCC编译选项和GDB的使用</a>]&nbsp;<br><br>2.[<a href="http://www.cppblog.com/szhoftuncun/archive/2008/08/20/59470.html">如何自己写Win32控件</a>&nbsp;]<br><br>3.[<a href="http://www.cppblog.com/szhoftuncun/archive/2008/07/13/56051.html">typedef用法小结]&nbsp; </a><br>************************************************************* </p>
<img src ="http://www.cppblog.com/szhoftuncun/aggbug/61838.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-15 09:03 <a href="http://www.cppblog.com/szhoftuncun/archive/2008/09/15/61838.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; PADD