<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Clingingboy</title><subtitle type="text">享受技术乐趣</subtitle><id>http://feed.cnblogs.com/blog/u/16497/rss</id><updated>2012-02-08T10:18:11Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/16497/rss"/><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html</id><title type="text">画自定义尺寸的圆角背景</title><summary type="text">首先准备一个png的圆角背景图 1.分三部分画，可以是”上，中，下”，也可以是“左，中，右” 注意的是圆角的宽度和高度 2.绘制的时候不要忘记设置ImageAttributes的绘制模...</summary><published>2012-01-29T14:09:00Z</published><updated>2012-01-29T14:09:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;首先准备一个png的圆角背景图&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209142689.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209147706.png" width="33" height="39" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;1.分三部分画，可以是”上，中，下”，也可以是“左，中，右”&lt;/p&gt;  &lt;p&gt;注意的是圆角的宽度和高度&lt;/p&gt;  &lt;p&gt;2.绘制的时候不要忘记设置&lt;span &gt;ImageAttributes的绘制模式,这样就可以画无限的高度和宽度&lt;/span&gt;&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;ImageAttributes imgAtt;&#xD;
imgAtt.SetWrapMode(WrapModeTileFlipY);&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br /&gt;绘制效果&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209148578.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209141086.png" width="190" height="39" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;源码Demo&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;DrawMargin(Graphics&amp;amp; g, Image* pImage, Rect&amp;amp; rcDst, Rect&amp;amp; rcSrc, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginLeft, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginRight, &#xD;
    &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginTop, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginBottom, BOOL bDrawCenter&lt;span style="color: green"&gt;/* = TRUE*/&lt;/span&gt;)&#xD;
{&#xD;
    &lt;span style="color: green"&gt;//ASSERT(pImage);&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nImgWidth = pImage-&amp;gt;GetWidth();&#xD;
    &lt;span style="color: blue"&gt;int &lt;/span&gt;nImgHeight = pImage-&amp;gt;GetHeight();&#xD;
    Rect rcImage(0, 0, nImgWidth, nImgHeight);&#xD;
    &lt;span style="color: green"&gt;//ASSERT(rcImage.Contains(rcSrc));&#xD;
&#xD;
    //ASSERT((rcSrc.Width &amp;gt; (nMarginLeft + nMarginRight)) &amp;amp;&amp;amp; (rcSrc.Height &amp;gt; (nMarginTop + nMarginBottom)));&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;((rcDst.Width &amp;lt;= (nMarginLeft + nMarginRight)) || (rcDst.Height &amp;lt;= (nMarginTop + nMarginBottom)))&#xD;
        g.DrawImage(pImage, rcDst, rcSrc.X, rcSrc.Y, rcSrc.Width, rcSrc.Height, UnitPixel);&#xD;
&#xD;
    ImageAttributes imgAtt;&#xD;
&#xD;
    &lt;span style="color: green"&gt;//上&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginTop)&#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginLeft)&#xD;
        {&#xD;
            Rect rcTopLeft(rcDst.X, rcDst.Y, nMarginLeft, nMarginTop);&#xD;
            g.DrawImage(pImage, rcTopLeft, rcSrc.X, rcSrc.Y, nMarginLeft, nMarginTop, UnitPixel);&#xD;
        }&#xD;
        Rect rcTop(rcDst.X + nMarginLeft, rcDst.Y, rcDst.Width - nMarginLeft - nMarginRight, nMarginTop);&#xD;
        imgAtt.SetWrapMode(WrapModeTileFlipX);&#xD;
        g.DrawImage(pImage, rcTop, rcSrc.X + nMarginLeft, rcSrc.Y, rcSrc.Width - nMarginLeft - nMarginRight, nMarginTop, UnitPixel, &amp;amp;imgAtt);&#xD;
        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginRight)&#xD;
        {&#xD;
            Rect rcTopRight(rcDst.GetRight() - nMarginRight, rcDst.Y, nMarginRight, nMarginTop);&#xD;
            g.DrawImage(pImage, rcTopRight, rcSrc.GetRight() - nMarginRight, rcSrc.Y, nMarginRight, nMarginTop, UnitPixel);&#xD;
        }&#xD;
    }&#xD;
    &#xD;
    &lt;span style="color: green"&gt;//中&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginLeft)&#xD;
    {&#xD;
        Rect rcLeft(rcDst.X, rcDst.Y + nMarginTop, nMarginLeft, rcDst.Height - nMarginTop - nMarginBottom);&#xD;
        imgAtt.SetWrapMode(WrapModeTileFlipY);&#xD;
        g.DrawImage(pImage, rcLeft, rcSrc.X, rcSrc.Y + nMarginTop, nMarginLeft, rcSrc.Height - nMarginTop - nMarginBottom, UnitPixel, &amp;amp;imgAtt);&#xD;
    }&#xD;
    &lt;span style="color: blue"&gt;if&lt;/span&gt;(bDrawCenter)&#xD;
    {&#xD;
        Rect rcCenter(rcDst.X + nMarginLeft, rcDst.Y + nMarginTop, rcDst.Width - nMarginLeft - nMarginRight, rcDst.Height - nMarginTop - nMarginBottom);&#xD;
        imgAtt.SetWrapMode(WrapModeTileFlipXY);&#xD;
        g.DrawImage(pImage, rcCenter, rcSrc.X + nMarginLeft, rcSrc.Y + nMarginTop, rcSrc.Width - nMarginLeft - nMarginRight, rcSrc.Height - nMarginTop - nMarginBottom, UnitPixel, &amp;amp;imgAtt);&#xD;
    }&#xD;
    &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginRight)&#xD;
    {&#xD;
        Rect rcRight(rcDst.GetRight() - nMarginRight, rcDst.Y + nMarginTop, nMarginRight, rcDst.Height - nMarginTop - nMarginBottom);&#xD;
        imgAtt.SetWrapMode(WrapModeTileFlipY);&#xD;
        g.DrawImage(pImage, rcRight, rcSrc.GetRight() - nMarginRight, rcSrc.Y + nMarginTop, nMarginRight, rcSrc.Height - nMarginTop - nMarginBottom, UnitPixel, &amp;amp;imgAtt);&#xD;
    }&#xD;
    &#xD;
    &lt;span style="color: green"&gt;//下&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginTop)&#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginLeft)&#xD;
        {&#xD;
            Rect rcBottomLeft(rcDst.X, rcDst.GetBottom() - nMarginBottom, nMarginLeft, nMarginBottom);&#xD;
            g.DrawImage(pImage, rcBottomLeft, rcSrc.X, rcSrc.GetBottom() - nMarginBottom, nMarginLeft, nMarginBottom, UnitPixel);&#xD;
        }&#xD;
        Rect rcBottom(rcDst.X + nMarginLeft, rcDst.GetBottom() - nMarginBottom, rcDst.Width - nMarginLeft - nMarginRight, nMarginBottom);&#xD;
        imgAtt.SetWrapMode(WrapModeTileFlipX);&#xD;
        g.DrawImage(pImage, rcBottom, rcSrc.X + nMarginLeft, rcSrc.GetBottom() - nMarginBottom, rcSrc.Width - nMarginLeft - nMarginRight, nMarginBottom, UnitPixel, &amp;amp;imgAtt);&#xD;
        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginRight)&#xD;
        {&#xD;
            Rect rcBottomRight(rcDst.GetRight() - nMarginRight, rcDst.GetBottom() - nMarginBottom, nMarginRight, nMarginBottom);&#xD;
            g.DrawImage(pImage, rcBottomRight, rcSrc.GetRight() - nMarginRight, rcSrc.GetBottom() - nMarginBottom, nMarginRight, nMarginBottom, UnitPixel);&#xD;
        }&#xD;
    }&#xD;
}&#xD;
&#xD;
&lt;span style="color: blue"&gt;void &lt;/span&gt;DrawMargin1(Graphics&amp;amp; g, Image* pImage, Rect&amp;amp; rcDst, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginLeft, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginRight, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginTop, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginBottom)&#xD;
{&#xD;
&#xD;
    &lt;span style="color: blue"&gt;int &lt;/span&gt;nImgWidth = pImage-&amp;gt;GetWidth();&#xD;
    &lt;span style="color: blue"&gt;int &lt;/span&gt;nImgHeight = pImage-&amp;gt;GetHeight();&#xD;
    Rect rcSrc(0, 0, nImgWidth, nImgHeight);&#xD;
&#xD;
    DrawMargin(g, pImage, rcDst, rcSrc, nMarginLeft, nMarginRight, nMarginTop, nMarginBottom, TRUE);&#xD;
}&#xD;
&lt;/span&gt;&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2331472.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html</id><title type="text">MFC中的一些问题记录</title><summary type="text">1.CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别 2.</summary><published>2012-01-09T14:59:00Z</published><updated>2012-01-09T14:59:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://blog.csdn.net/xjh_love_paopao/article/details/2666494"&gt;CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.csdn.net/lixiaosan/article/details/653563"&gt;【原】CListCtrl 使用技巧&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.vckbase.com/document/viewdoc/?id=1855"&gt;改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.csdn.net/hustli/article/details/19355"&gt;深度解析VC中的消息（上）&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc.aspx"&gt;What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR etc?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.csdn.net/sdeeds/article/details/6859530"&gt;关于WM_ERASEBKGND和WM_PAINT的深刻理解&lt;/a&gt;       &lt;br /&gt;关于重绘背景的理解：每次重绘，必须有一个背景色，默认情况下,windows处理了这个背景色消息。       &lt;br /&gt;这里有两个动作需要处理: 1.清除背景(注意不是背景色,可以理解为清除画布)2.然后重新绘制背景色       &lt;br /&gt;如果返回return true,则告诉系统已经自己处理过了，不需要系统来重绘背景色       &lt;br /&gt;参考opengl:&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2010/10/16/1853038.html"&gt;http://www.cnblogs.com/Clingingboy/archive/2010/10/16/1853038.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://baike.baidu.com/view/1226797.htm"&gt;InvalidateRect&lt;/a&gt; MFC的Invalidate方法默认重绘整个窗体 &lt;/li&gt;    &lt;li&gt;GDI+ 绘制超链接文本,定义&lt;span &gt;StringFormat 的&lt;/span&gt;SetLineAlignment       &lt;br /&gt;      &lt;pre &gt;&lt;span &gt;StringFormat stringFormat;&#xD;
stringFormat.SetLineAlignment(StringAlignmentCenter);&#xD;
stringFormat.SetFormatFlags(StringFormatFlagsLineLimit | StringFormatFlagsNoWrap);&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
    &lt;br /&gt;&lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&amp;#160; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://hi.baidu.com/sonmeika/blog/item/9b59462755773e00918f9d91.html"&gt;使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.cnblogs.com/GnagWang/archive/2010/09/12/1824394.html"&gt;关于WM_NCHITTEST消息&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/MFC/CustomWindow.aspx"&gt;http://www.codeproject.com/KB/MFC/CustomWindow.aspx&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/47e8a4649b6648d7c1c7463c.html"&gt;C++变量命名规则&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/menus/bcmenu.aspx"&gt;自绘菜单&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.cnblogs.com/Caiqinghua/archive/2008/12/25/1362411.html"&gt;WM_CTLCOLOR消息&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&amp;#160;&lt;a href="http://topic.csdn.net/u/20101115/22/4f15d24a-f77a-4298-91d5-9082a2b510d3.html"&gt;_tcslen(&amp;quot;.....&amp;quot;)和stlen(&amp;quot;.....&amp;quot;)函数有什么区别&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://blog.csdn.net/kusoul/article/details/5915091"&gt;InternetOpen具体三种方式的使用&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.cnblogs.com/carekee/articles/1940183.html"&gt;VC++得到任务栏的高度和位置的方法&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://topic.csdn.net/u/20080314/10/ace67938-c279-4a72-b41d-0592690d3701.html?895856764"&gt;任务栏位置&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.cnblogs.com/frogchao/archive/2010/12/15/1906644.html"&gt;SAFEARRAY使用实例&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.cnblogs.com/wubiyu/archive/2009/03/02/1401522.html"&gt;在COM中使用数组参数-SafeArray&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/549410232f60ddccda38a0c3.html"&gt;浅析C++内存分配方式&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://blog.csdn.net/liquanhai/article/details/6280276"&gt;目前比较热的GUI 总结&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html"&gt;画自定义尺寸的圆角背景&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms647996(VS.85).aspx"&gt;设置右键菜单某个项为粗体&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://topic.csdn.net/u/20090901/22/c4d66375-0d05-4ac8-979d-7cc4eb33bd18.html"&gt;悬浮窗右键菜单第二次无法自动隐藏的问题&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/95ccb97ea26925c52cc5bf72.html"&gt;SetWindowPos&lt;/a&gt; &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;&lt;a href="http://topic.csdn.net/t/20021212/19/1256253.html"&gt;DeleteMenu和RemoveMenu的区别&lt;/a&gt;&lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;1&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2317602.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html</id><title type="text">WinINet Asynchronous</title><summary type="text">先参考此文档http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html的第13页 demo参考 http://www.codeproj...</summary><published>2011-12-03T15:57:00Z</published><updated>2011-12-03T15:57:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;先参考此文档&lt;a href="http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html"&gt;http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html&lt;/a&gt;的第13页&lt;/p&gt;  &lt;p&gt;demo参考&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/IP/WinInetTest.aspx"&gt;http://www.codeproject.com/KB/IP/WinInetTest.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/IP/asynchttp.aspx"&gt;http://www.codeproject.com/KB/IP/asynchttp.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/IP/asyncwininet.aspx"&gt;http://www.codeproject.com/KB/IP/asyncwininet.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;关于WinHTTP和WinINet&lt;/p&gt;  &lt;p&gt;&lt;a href="http://alienchang.iteye.com/blog/1155248"&gt;http://alienchang.iteye.com/blog/1155248&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/awpatp/archive/2010/10/10/1847285.html"&gt;http://www.cnblogs.com/awpatp/archive/2010/10/10/1847285.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa384068.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa384068.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2275119.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html</id><title type="text">WinINet function(2)Request</title><summary type="text">参考此文档：http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html 参考:http://wenku.baidu.com/view/b...</summary><published>2011-11-27T14:06:00Z</published><updated>2011-11-27T14:06:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考此文档：&lt;a href="http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html"&gt;http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;参考:&lt;a href="http://wenku.baidu.com/view/b5364b87ec3a87c24028c438.html"&gt;http://wenku.baidu.com/view/b5364b87ec3a87c24028c438.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;InternetOpenUrl的内部&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.InternetConnect&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Opens an File Transfer Protocol (FTP), Gopher, or HTTP session for a given site.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.HttpOpenRequest&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Creates an HTTP request handle.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.HttpSendRequest&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sends the specified request to the HTTP server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.HttpQueryInfo&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Retrieves header information associated with an HTTP request.&lt;/p&gt;  &lt;p&gt;Demo&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;HINTERNET hInternet &lt;/span&gt;= &lt;span style="color: #010001"&gt;InternetOpen&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;HttpAuth Sample&amp;quot;&lt;/span&gt;,             &lt;span style="color: green"&gt;// app name&#xD;
        &lt;/span&gt;&lt;span style="color: #010001"&gt;INTERNET_OPEN_TYPE_PRECONFIG&lt;/span&gt;,  &lt;span style="color: green"&gt;// access type&#xD;
        &lt;/span&gt;&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,                          &lt;span style="color: green"&gt;// proxy server&#xD;
        &lt;/span&gt;0,                             &lt;span style="color: green"&gt;// proxy port&#xD;
        &lt;/span&gt;0);                            &lt;span style="color: green"&gt;// flags&#xD;
&#xD;
&lt;/span&gt;&lt;span style="color: #010001"&gt;HINTERNET hConnect &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;InternetConnect&lt;/span&gt;(&lt;span style="color: #010001"&gt;hInternet&lt;/span&gt;,&#xD;
                                    &lt;span style="color: #a31515"&gt;&amp;quot;www.microsoft.com&amp;quot;&lt;/span&gt;,&#xD;
                                    &lt;span style="color: #010001"&gt;INTERNET_INVALID_PORT_NUMBER&lt;/span&gt;,&#xD;
                                    &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&#xD;
                                    &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&#xD;
                                    &lt;span style="color: #010001"&gt;INTERNET_SERVICE_HTTP&lt;/span&gt;,&#xD;
                                    0,&#xD;
                                    0) ;&#xD;
&#xD;
&lt;span style="color: #010001"&gt;HINTERNET hHttpFile &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;HttpOpenRequest&lt;/span&gt;(&lt;span style="color: #010001"&gt;hConnect&lt;/span&gt;,&#xD;
                                        &lt;span style="color: #a31515"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;,&#xD;
                                        &lt;span style="color: #a31515"&gt;&amp;quot;/MSDN/MSDNINFO/&amp;quot;&lt;/span&gt;,&#xD;
                                        &lt;span style="color: #010001"&gt;HTTP_VERSION&lt;/span&gt;,&#xD;
                                        &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&#xD;
                                        0,&#xD;
                                        &lt;span style="color: #010001"&gt;INTERNET_FLAG_DONT_CACHE&lt;/span&gt;,&#xD;
                                        0) ;&#xD;
&lt;span style="color: #010001"&gt;BOOL bSendRequest &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;HttpSendRequest&lt;/span&gt;(&lt;span style="color: #010001"&gt;hHttpFile&lt;/span&gt;, &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;, 0, 0, 0);&#xD;
&#xD;
&lt;span style="color: green"&gt;// Get the length of the file.            &#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;char &lt;/span&gt;&lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;[32] ;&#xD;
&lt;span style="color: #010001"&gt;DWORD dwLengthBufQuery &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;);&#xD;
&lt;span style="color: #010001"&gt;BOOL bQuery &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;HttpQueryInfo&lt;/span&gt;(&lt;span style="color: #010001"&gt;hHttpFile&lt;/span&gt;,&#xD;
                              &lt;span style="color: #010001"&gt;HTTP_QUERY_CONTENT_LENGTH&lt;/span&gt;, &#xD;
                              &lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;, &#xD;
                              &amp;amp;&lt;span style="color: #010001"&gt;dwLengthBufQuery&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;) ;&#xD;
&#xD;
&lt;span style="color: green"&gt;// Convert length from ASCII string to a DWORD.&#xD;
&lt;/span&gt;&lt;span style="color: #010001"&gt;DWORD dwFileSize &lt;/span&gt;= (&lt;span style="color: #010001"&gt;DWORD&lt;/span&gt;)&lt;span style="color: #010001"&gt;atol&lt;/span&gt;(&lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;) ;&#xD;
&lt;span style="color: green"&gt;// Allocate a buffer for the file.   &#xD;
&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;char&lt;/span&gt;* &lt;span style="color: #010001"&gt;buffer &lt;/span&gt;= &lt;span style="color: blue"&gt;new char&lt;/span&gt;[&lt;span style="color: #010001"&gt;dwFileSize&lt;/span&gt;+1] ;&#xD;
&#xD;
&lt;span style="color: green"&gt;// Read the file into the buffer. &#xD;
&lt;/span&gt;&lt;span style="color: #010001"&gt;DWORD dwBytesRead &lt;/span&gt;;&#xD;
&lt;span style="color: #010001"&gt;BOOL bRead &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;InternetReadFile&lt;/span&gt;(&lt;span style="color: #010001"&gt;hHttpFile&lt;/span&gt;,&#xD;
                                &lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,&#xD;
                                &lt;span style="color: #010001"&gt;dwFileSize&lt;/span&gt;+1, &#xD;
                                &amp;amp;&lt;span style="color: #010001"&gt;dwBytesRead&lt;/span&gt;);&#xD;
&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;[&lt;span style="color: #010001"&gt;dwBytesRead&lt;/span&gt;] = 0 ;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;Other functions&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;HttpAddRequestHeaders&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Adds one or more HTTP request headers to the HTTP request handle.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;参考:&lt;a href="http://www.cnblogs.com/songsu/articles/1346782.html"&gt;http://www.cnblogs.com/songsu/articles/1346782.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;InternetSetCookie&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Creates a cookie associated with the specified URL.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;InternetGetCookie&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Retrieves the cookie for the specified URL.&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;BOOL res&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetSetCookie&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.microsoft.com&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;);&#xD;
&lt;span style="color: #010001"&gt;TCHAR cookie&lt;/span&gt;[1024];&#xD;
&lt;span style="color: #010001"&gt;DWORD leh&lt;/span&gt;;&#xD;
&lt;span style="color: #010001"&gt;res&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetGetCookie&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.microsoft.com&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&lt;span style="color: #010001"&gt;cookie&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;leh&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2265348.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html</id><title type="text">WinINet function(1)</title><summary type="text">一.Url相关函数 1.InternetCreateUrl Cracks a URL into its component parts. #define URL_STRING_TEST ...</summary><published>2011-11-27T02:48:00Z</published><updated>2011-11-27T02:48:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;一.Url相关函数&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.InternetCreateUrl&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Cracks a URL into its component parts.&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;#define &lt;/span&gt;&lt;span style="color: #010001"&gt;URL_STRING_TEST    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html&amp;quot;&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;&lt;span style="color: #010001"&gt;main&lt;/span&gt;()&#xD;
{   &#xD;
    &lt;span style="color: #010001"&gt;TCHAR szHostName&lt;/span&gt;[128];&#xD;
    &lt;span style="color: #010001"&gt;TCHAR szUrlPath&lt;/span&gt;[256];&#xD;
    &lt;span style="color: #010001"&gt;URL_COMPONENTS crackedURL&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;ZeroMemory&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;, &lt;span style="color: blue"&gt;sizeof &lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_COMPONENTS&lt;/span&gt;));&#xD;
    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;dwStructSize     &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof &lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_COMPONENTS&lt;/span&gt;);&#xD;
    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;lpszHostName     &lt;/span&gt;= &lt;span style="color: #010001"&gt;szHostName&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;dwHostNameLength &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;szHostName&lt;/span&gt;);&#xD;
    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;lpszUrlPath      &lt;/span&gt;= &lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;dwUrlPathLength  &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;);&#xD;
    &lt;span style="color: #010001"&gt;InternetCrackUrl&lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_STRING_TEST&lt;/span&gt;,(&lt;span style="color: #010001"&gt;DWORD&lt;/span&gt;)&lt;span style="color: #010001"&gt;strlen&lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_STRING_TEST&lt;/span&gt;),0,&amp;amp;&lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;);&#xD;
}&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;2.InternetCreateUrl&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Creates a URL from its component parts.&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;DWORD urlLength&lt;/span&gt;;&#xD;
&lt;span style="color: #010001"&gt;InternetCreateUrl&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;,&lt;span style="color: #010001"&gt;ICU_ESCAPE&lt;/span&gt;,&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;urlLength&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;3.InternetCanonicalizeUrl&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Canonicalizes a URL, which includes converting unsafe characters and spaces into escape sequences.&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;InternetCanonicalizeUrl&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.xxx.com/viewthread.php?action=printable&amp;amp;amp;tid=99     &amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;urlLength&lt;/span&gt;,&lt;span style="color: #010001"&gt;ICU_ENCODE_SPACES_ONLY&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;4.InternetCombineUrl&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Combines a base and relative URL into a single URL. &lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;InternetCombineUrl&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.xxx.com/&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;2256200.html&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;urlLength&lt;/span&gt;,&lt;span style="color: #010001"&gt;ICU_BROWSER_MODE&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;二.Internet基本应用相关函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;1.InternetOpen&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Initializes an application's use of the WinINet functions.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;2.InternetOpenUrl&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Opens a resource specified by a complete FTP, Gopher, or HTTP URL.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;3.InternetReadFile&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Reads data from a handle opened by the &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/internetopenurl.htm"&gt;&lt;b&gt;InternetOpenUrl&lt;/b&gt;&lt;/a&gt;, &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/ftpopenfile.htm"&gt;&lt;b&gt;FtpOpenFile&lt;/b&gt;&lt;/a&gt;, &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/gopheropenfile.htm"&gt;&lt;b&gt;GopherOpenFile&lt;/b&gt;&lt;/a&gt;, or &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/httpopenrequest.htm"&gt;&lt;b&gt;HttpOpenRequest&lt;/b&gt;&lt;/a&gt; function&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;4.InternetCloseHandle&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Closes a single Internet handle.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;应用1:打开因特网上指定的文件&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201111/201111271048285209.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201111/201111271048281588.png" width="685" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;&lt;span style="color: #010001"&gt;Download&lt;/span&gt;()&#xD;
{&#xD;
&#xD;
    &lt;span style="color: #010001"&gt;DWORD byteread&lt;/span&gt;=0;&#xD;
    &lt;span style="color: blue"&gt;char &lt;/span&gt;&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;[100];&#xD;
    &lt;span style="color: #010001"&gt;memset&lt;/span&gt;(&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,0,100);&#xD;
    &lt;span style="color: #010001"&gt;HINTERNET internetopen&lt;/span&gt;;&#xD;
&#xD;
&#xD;
    &lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetOpen&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Testing&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;INTERNET_OPEN_TYPE_PRECONFIG&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,0);&#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;==&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;)&#xD;
    { &#xD;
        &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Internet open failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&#xD;
        &lt;span style="color: blue"&gt;return&lt;/span&gt;;&#xD;
    }&#xD;
    &lt;span style="color: #010001"&gt;HINTERNET internetopenurl&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetOpenUrl&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,0,&lt;span style="color: #010001"&gt;INTERNET_FLAG_RELOAD&lt;/span&gt;,0);  &#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;==&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;)&#xD;
    { &#xD;
        &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Internet open url failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;; &#xD;
        &lt;span style="color: blue"&gt;goto &lt;/span&gt;&lt;span style="color: #010001"&gt;there&lt;/span&gt;;&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: #010001"&gt;BOOL hwrite&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;DWORD written&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;HANDLE createfile&lt;/span&gt;;&#xD;
    &lt;span style="color: #010001"&gt;createfile&lt;/span&gt;=&lt;span style="color: #010001"&gt;CreateFile&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;C://a.html&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;GENERIC_WRITE&lt;/span&gt;,0,0,&lt;span style="color: #010001"&gt;CREATE_ALWAYS&lt;/span&gt;,&lt;span style="color: #010001"&gt;FILE_ATTRIBUTE_NORMAL&lt;/span&gt;,0);&#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;createfile&lt;/span&gt;==&lt;span style="color: #010001"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;)&#xD;
    {  &#xD;
        &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Create File failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&#xD;
        &lt;span style="color: blue"&gt;goto &lt;/span&gt;&lt;span style="color: #010001"&gt;next&lt;/span&gt;;&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: #010001"&gt;BOOL internetreadfile&lt;/span&gt;;&#xD;
    &lt;span style="color: blue"&gt;while&lt;/span&gt;(1)&#xD;
    {&#xD;
        &lt;span style="color: #010001"&gt;internetreadfile&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetReadFile&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;,&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,&lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;),&amp;amp;&lt;span style="color: #010001"&gt;byteread&lt;/span&gt;);&#xD;
        &lt;span style="color: blue"&gt;if&lt;/span&gt;(&lt;span style="color: #010001"&gt;byteread&lt;/span&gt;==0)  &#xD;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;&#xD;
        &lt;span style="color: #010001"&gt;hwrite&lt;/span&gt;=&lt;span style="color: #010001"&gt;WriteFile&lt;/span&gt;(&lt;span style="color: #010001"&gt;createfile&lt;/span&gt;,&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,&lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;),&amp;amp;&lt;span style="color: #010001"&gt;written&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;);&#xD;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;hwrite&lt;/span&gt;==0)&#xD;
        {&#xD;
            &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Write to file failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&#xD;
            &lt;span style="color: blue"&gt;goto &lt;/span&gt;&lt;span style="color: #010001"&gt;here&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Finished downloading!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&#xD;
&#xD;
&lt;span style="color: #010001"&gt;here&lt;/span&gt;:&#xD;
    &lt;span style="color: #010001"&gt;CloseHandle&lt;/span&gt;(&lt;span style="color: #010001"&gt;createfile&lt;/span&gt;);&#xD;
&lt;span style="color: #010001"&gt;next&lt;/span&gt;: &#xD;
    &lt;span style="color: #010001"&gt;InternetCloseHandle&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;);&#xD;
&lt;span style="color: #010001"&gt;there&lt;/span&gt;:&#xD;
    &lt;span style="color: #010001"&gt;InternetCloseHandle&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;);&#xD;
&#xD;
}&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;三.连接检查函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;1.InternetCheckConnection&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Allows an application to check if a connection to the Internet can be established.&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;BOOL result&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetCheckConnection&lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_STRING_TEST&lt;/span&gt;,&lt;span style="color: #010001"&gt;FLAG_ICC_FORCE_CONNECTION&lt;/span&gt;,0);&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;2.InternetAttemptConnect&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Attempts to make a connection to the Internet.&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: #010001"&gt;BOOL result&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetAttemptConnect&lt;/span&gt;(0);&lt;/span&gt;&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2264882.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html</id><title type="text">effective C++ 第五章</title><summary type="text">第五章：实现 条款 27：尽量少做转型动作 1.转换一个explicit构造函数 class Widget {public: explicit Widget(int size); ...};void doSomeWork(const Widget&amp;amp; w);doSomeWork(Widget(15)); // create Widget ...</summary><published>2011-11-20T07:57:00Z</published><updated>2011-11-20T07:57:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;第五章：实现&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;条款 27：尽量少做转型动作&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1.转换一个&lt;span style="color: blue"&gt;explicit构造函数&lt;/span&gt;&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Widget {&#xD;
&lt;span style="color: blue"&gt;public&lt;/span&gt;:&#xD;
    &lt;span style="color: blue"&gt;explicit &lt;/span&gt;Widget(&lt;span style="color: blue"&gt;int &lt;/span&gt;size);&#xD;
    ...&#xD;
&#xD;
};&#xD;
&#xD;
&lt;span style="color: blue"&gt;void &lt;/span&gt;doSomeWork(&lt;span style="color: blue"&gt;const &lt;/span&gt;Widget&amp;amp; w);&#xD;
&#xD;
doSomeWork(Widget(15));                    &lt;span style="color: green"&gt;// create Widget from int&#xD;
&#xD;
// with function-style cast&#xD;
&#xD;
&lt;/span&gt;doSomeWork(&lt;span style="color: blue"&gt;static_cast&lt;/span&gt;&amp;lt;Widget&amp;gt;(15));       &lt;span style="color: green"&gt;// create Widget from int&#xD;
&#xD;
// with C++-style cast&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;2.不要在子类中转换基类调用(调用了一个副本对象)&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Window {                                &lt;span style="color: green"&gt;// base class&#xD;
&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&#xD;
&#xD;
    &lt;span style="color: blue"&gt;virtual void &lt;/span&gt;onResize() { ... }             &lt;span style="color: green"&gt;// base onResize impl&#xD;
&#xD;
    &lt;/span&gt;...&#xD;
&#xD;
};&#xD;
&#xD;
&lt;span style="color: blue"&gt;class &lt;/span&gt;SpecialWindow: &lt;span style="color: blue"&gt;public &lt;/span&gt;Window {          &lt;span style="color: green"&gt;// derived class&#xD;
&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&#xD;
&#xD;
    &lt;span style="color: blue"&gt;virtual void &lt;/span&gt;onResize() {                   &lt;span style="color: green"&gt;// derived onResize impl;&#xD;
&#xD;
        &lt;/span&gt;&lt;span style="color: blue"&gt;static_cast&lt;/span&gt;&amp;lt;Window&amp;gt;(*&lt;span style="color: blue"&gt;this&lt;/span&gt;).onResize();    &lt;span style="color: green"&gt;//wrong cast *this to Window,&#xD;
        &lt;/span&gt;Window::onResize();&lt;span style="color: green"&gt;//right&#xD;
        // then call its onResize;&#xD;
&#xD;
        // this doesn't work!&#xD;
        &lt;/span&gt;...                                       &lt;span style="color: green"&gt;// do SpecialWindow-&#xD;
&#xD;
    &lt;/span&gt;}                                           &lt;span style="color: green"&gt;// specific stuff&#xD;
    &lt;/span&gt;...&#xD;
};&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;3.dynamic_cast的替代方案&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;(1)直接使用子类,避免转型…貌似废话&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;之前：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Window { ... };&#xD;
&#xD;
&lt;span style="color: blue"&gt;class &lt;/span&gt;SpecialWindow: &lt;span style="color: blue"&gt;public &lt;/span&gt;Window {&#xD;
&#xD;
&lt;span style="color: blue"&gt;public&lt;/span&gt;:&#xD;
    &lt;span style="color: blue"&gt;void &lt;/span&gt;blink();&#xD;
    ...&#xD;
&#xD;
};&#xD;
&lt;span style="color: blue"&gt;typedef                                            &lt;/span&gt;&lt;span style="color: green"&gt;// see Item 13 for info&#xD;
    &lt;/span&gt;std::vector&amp;lt;std::tr1::shared_ptr&amp;lt;Window&amp;gt; &amp;gt; VPW;  &lt;span style="color: green"&gt;// on tr1::shared_ptr&#xD;
&lt;/span&gt;VPW winPtrs;&#xD;
...&#xD;
    &lt;span style="color: blue"&gt;for &lt;/span&gt;(VPW::iterator iter = winPtrs.begin();         &lt;span style="color: green"&gt;// undesirable code:&#xD;
        &lt;/span&gt;iter != winPtrs.end();                        &lt;span style="color: green"&gt;// uses dynamic_cast&#xD;
&#xD;
&lt;/span&gt;++iter) {&#xD;
&#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(SpecialWindow *psw = &lt;span style="color: blue"&gt;dynamic_cast&lt;/span&gt;&amp;lt;SpecialWindow*&amp;gt;(iter-&amp;gt;get()))&#xD;
        psw-&amp;gt;blink();&#xD;
}&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;之后：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;typedef &lt;/span&gt;std::vector&amp;lt;std::tr1::shared_ptr&amp;lt;SpecialWindow&amp;gt; &amp;gt; VPSW;&#xD;
VPSW winPtrs;&#xD;
...&#xD;
    &lt;span style="color: blue"&gt;for &lt;/span&gt;(VPSW::iterator iter = winPtrs.begin();        &lt;span style="color: green"&gt;// better code: uses&#xD;
&#xD;
        &lt;/span&gt;iter != winPtrs.end();                        &lt;span style="color: green"&gt;// no dynamic_cast&#xD;
&#xD;
&lt;/span&gt;++iter)&#xD;
    (*iter)-&amp;gt;blink();&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;2.在基类使用虚函数&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3.避免在循环中大量使用dynamic_cast&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;条款 29：为“异常安全”而努力是值得的&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;提供三种异常保证:&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1.基本承诺:如果异常被抛出，程序内的任何事物仍保持在有效状态下。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2.强烈保证：要么成功，要么失败。保持执行前后状态一致(通常以copy-and-swap实现)&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3.不抛掷保证：承诺绝不抛出异常。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;大部分函数都属于连带影响,所以很难道做到强烈保证,不抛掷保证也是如此,一旦函数复杂了,有连带影响就会如此.所以只能尽量提供基本承诺,并提供异常码.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;每个函数都处理异常是一个很繁琐的处理.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;条款 31：将文件间的编译依存关系降至最低&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;很常用的声明和定义分离开发,即每份代码都有一个接口声明和一份代码实现,个人不大喜欢这样.没必要每份代码都遵守这个规则,太死板了吧.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2256200.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225755.html</id><title type="text">Visual C++ 2011-10-21</title><summary type="text">熟悉熟悉api… 1.BOOL IsIconic( HWND hWnd ); The IsIconic function determines whether the specified ...</summary><published>2011-10-26T14:10:00Z</published><updated>2011-10-26T14:10:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225755.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225755.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;熟悉熟悉api…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.BOOL IsIconic( HWND hWnd ); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;IsIconic&lt;/strong&gt; function determines whether the specified window is minimized (iconic). &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.BOOL IsZoomed( HWND hWnd ); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;IsZoomed&lt;/strong&gt; function determines whether a window is maximized. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.HWND GetAncestor( HWND hwnd, UINT gaFlags ); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;GetAncestor&lt;/strong&gt; function retrieves the handle to the ancestor of the specified window. &lt;/p&gt; &lt;dt&gt;&lt;code&gt;GA_PARENT&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;Retrieves the parent window. This does not include the owner, as it does with the &lt;a href="http://127.0.0.1:47873/help/1-3556/ms.help?method=page&amp;amp;id=VS%7CWINUI%7C%7E%5CWINUI%5CWINDOWSUSERINTERFACE%5CWINDOWING%5CWINDOWS%5CWINDOWREFERENCE%5CWINDOWFUNCTIONS%5CGETPARENT.HTM&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=85&amp;amp;locale=EN-US&amp;amp;topicLocale=EN-US&amp;amp;embedded=true"&gt;GetParent&lt;/a&gt; function. &lt;/dd&gt;&lt;dt&gt;&lt;code&gt;GA_ROOT&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Retrieves the root window by walking the chain of parent windows. &lt;/dd&gt;&lt;dt&gt;&lt;code&gt;GA_ROOTOWNER&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Retrieves the owned root window by walking the chain of parent and owner windows returned by &lt;strong&gt;GetParent&lt;/strong&gt;.     &lt;p&gt;&lt;strong&gt;4.MoveWindow and &lt;a name="baidusnap0"&gt;&lt;/a&gt;&lt;b&gt;SetWindowPos&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;a title="http://apps.hi.baidu.com/share/detail/23103714" href="http://apps.hi.baidu.com/share/detail/23103714"&gt;http://apps.hi.baidu.com/share/detail/23103714&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;5.DeferWindowPos&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;该函数为特定的窗口指定一个新窗口位置，并将其输入由&lt;a href="mk:@MSITStore:C:%5CUsers%5C500288%5CDesktop%5CAPI32.CHM::/BeginDeferWindowPos.htm"&gt;BeginDeferWindowPos&lt;/a&gt;创建的结构，&lt;strong&gt;以便在&lt;/strong&gt;&lt;a href="mk:@MSITStore:C:%5CUsers%5C500288%5CDesktop%5CAPI32.CHM::/EndDeferWindowPos.htm"&gt;&lt;strong&gt;EndDeferWindowPos&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;函数执行期间更新(&lt;b&gt;SetWindowPos立即执行&lt;/b&gt;)&lt;/strong&gt;       &lt;br /&gt;&lt;/p&gt;    &lt;pre &gt;&lt;span &gt;&lt;span style="color: #050005"&gt;HDWP hdwp&lt;/span&gt;=::&lt;span style="color: #050005"&gt;BeginDeferWindowPos&lt;/span&gt;(1);&#xD;
::&lt;span style="color: #050005"&gt;DeferWindowPos&lt;/span&gt;(&lt;span style="color: #050005"&gt;hdwp&lt;/span&gt;,&lt;span style="color: #050005"&gt;m_pMainWnd&lt;/span&gt;-&amp;gt;&lt;span style="color: #050005"&gt;GetSafeHwnd&lt;/span&gt;(),&lt;span style="color: #050005"&gt;HWND_TOPMOST&lt;/span&gt;,0,0,100,100,&lt;span style="color: #050005"&gt;SWP_SHOWWINDOW&lt;/span&gt;);&#xD;
::&lt;span style="color: #050005"&gt;EndDeferWindowPos&lt;/span&gt;(&lt;span style="color: #050005"&gt;hdwp&lt;/span&gt;);&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;p&gt;&lt;strong&gt;6.&lt;a name="CascadeWindows,CascadeWindowsBynum"&gt;CascadeWindows&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
  &lt;p&gt;The &lt;strong&gt;CascadeWindows&lt;/strong&gt; function cascades the specified child windows of the specified parent window. (层叠方式排列窗口)&lt;/p&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;&lt;span style="color: #050005"&gt;CascadeWindows&lt;/span&gt;(&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;,&lt;span style="color: #050005"&gt;MDITILE_ZORDER&lt;/span&gt;,&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;,&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;,&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;);&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;p&gt;&lt;strong&gt;7.BringWindowToTop和&lt;a name="SetForegroundWindow"&gt;SetForegroundWindow&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
  &lt;p&gt;BringWindowToTop还是搞不懂…&lt;/p&gt;&#xD;
&#xD;
  &lt;p&gt;&lt;strong&gt;8.TileWindows&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
  &lt;p&gt;以平铺顺序排列窗口,与&lt;a name="CascadeWindows,CascadeWindowsBynum"&gt;CascadeWindows&lt;/a&gt;一样，都是属于排列窗体&lt;/p&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;&lt;span style="color: #050005"&gt;TileWindows&lt;/span&gt;(&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;,&lt;span style="color: #050005"&gt;MDITILE_HORIZONTAL&lt;/span&gt;,&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;,&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;,&lt;span style="color: #050005"&gt;NULL&lt;/span&gt;);&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &#xD;
&lt;/dd&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2225755.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225755.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225754.html</id><title type="text">数的乘方,简单背包,组合</title><summary type="text">数的乘方 2的8次方 4的4次方 8的2此方 利用以上思路来减少乘法次数,3次乘法就可以完成运算 注意点：用模来判断乘方的奇偶性，如果是奇数则再乘以x pu...</summary><published>2011-10-26T14:09:00Z</published><updated>2011-10-26T14:09:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225754.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225754.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;数的乘方&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201110/201110262208548269.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="捕获22" border="0" alt="捕获22" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201110/201110262208552206.png" width="119" height="54" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;2的8次方 &lt;/li&gt;    &lt;li&gt;4的4次方 &lt;/li&gt;    &lt;li&gt;8的2此方 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;利用以上思路来减少乘法次数,3次乘法就可以完成运算&lt;/p&gt;  &lt;p&gt;注意点：用模来判断乘方的奇偶性，如果是奇数则再乘以x&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;public static int &lt;/span&gt;&lt;span style="color: #050005"&gt;Power&lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;x&lt;/span&gt;, &lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;y&lt;/span&gt;)&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;y &lt;/span&gt;== 0)&#xD;
        &lt;span style="color: blue"&gt;return &lt;/span&gt;1;&#xD;
    &lt;span style="color: blue"&gt;else if &lt;/span&gt;(&lt;span style="color: #050005"&gt;y &lt;/span&gt;== 1)&#xD;
        &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #050005"&gt;x&lt;/span&gt;;&#xD;
    &lt;span style="color: blue"&gt;else if &lt;/span&gt;(&lt;span style="color: #050005"&gt;y &lt;/span&gt;== 2)&#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #050005"&gt;x &lt;/span&gt;* &lt;span style="color: #050005"&gt;x&lt;/span&gt;;&#xD;
    }&#xD;
    &lt;span style="color: blue"&gt;else if &lt;/span&gt;(&lt;span style="color: #050005"&gt;y &lt;/span&gt;% 2 == 0)&#xD;
    {&#xD;
        &lt;span style="color: #050005"&gt;y &lt;/span&gt;= &lt;span style="color: #050005"&gt;y &lt;/span&gt;/ 2;&#xD;
        &lt;strong&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #050005"&gt;Power&lt;/span&gt;(&lt;span style="color: #050005"&gt;x &lt;/span&gt;* &lt;span style="color: #050005"&gt;x&lt;/span&gt;, &lt;span style="color: #050005"&gt;y&lt;/span&gt;);&#xD;
&lt;/strong&gt;    }&#xD;
    &lt;span style="color: blue"&gt;else&#xD;
        &lt;strong&gt;return &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #050005"&gt;x &lt;/span&gt;* &lt;span style="color: #050005"&gt;Power&lt;/span&gt;(&lt;span style="color: #050005"&gt;x &lt;/span&gt;* &lt;span style="color: #050005"&gt;x&lt;/span&gt;, &lt;span style="color: #050005"&gt;y &lt;/span&gt;/ 2);&lt;/strong&gt;&#xD;
}&#xD;
&#xD;
 &lt;span style="color: blue"&gt;static void &lt;/span&gt;&lt;span style="color: #050005"&gt;Main&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] &lt;span style="color: #050005"&gt;args&lt;/span&gt;)&#xD;
 {&#xD;
     &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.&lt;span style="color: #050005"&gt;WriteLine&lt;/span&gt;(&lt;span style="color: #050005"&gt;Power&lt;/span&gt;(2, 8));&#xD;
 }&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;简单背包问题&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;从11,8,7,6,5凑满20放到包里&lt;/p&gt;&#xD;
&#xD;
&lt;ol&gt;&#xD;
  &lt;li&gt;从包中取出与20比较,如果可以容纳的话就继续加 &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;否则的话则放弃该元素试图放下一个元素. &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;内部数组到了尽头需要索引+1继续尝试填充 &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;如果到了数组尽头还是没凑满，那么尝试从头开始(索引+1)即头元素11换成8 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;&lt;span style="color: #050005"&gt;knapsack3&lt;/span&gt;(&lt;span style="color: blue"&gt;int&lt;/span&gt;[] &lt;span style="color: #050005"&gt;values&lt;/span&gt;, &lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;total&lt;/span&gt;)&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #050005"&gt;limit &lt;/span&gt;= 0;&#xD;
    &lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #050005"&gt;length &lt;/span&gt;= &lt;span style="color: #050005"&gt;values&lt;/span&gt;.&lt;span style="color: #050005"&gt;Length&lt;/span&gt;;&#xD;
&#xD;
    &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;i &lt;/span&gt;= 0; &lt;span style="color: #050005"&gt;i &lt;/span&gt;&amp;lt; &lt;span style="color: #050005"&gt;length&lt;/span&gt;; &lt;span style="color: #050005"&gt;i&lt;/span&gt;++)&#xD;
    {&#xD;
        &lt;span style="color: #050005"&gt;limit &lt;/span&gt;= &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;];&#xD;
        &lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;inner &lt;/span&gt;= &lt;span style="color: #050005"&gt;i &lt;/span&gt;+ 1;&#xD;
&#xD;
        &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #050005"&gt;index &lt;/span&gt;= &lt;span style="color: #050005"&gt;inner&lt;/span&gt;; &lt;span style="color: #050005"&gt;index &lt;/span&gt;&amp;lt; &lt;span style="color: #050005"&gt;length&lt;/span&gt;; &lt;span style="color: #050005"&gt;index&lt;/span&gt;++)&#xD;
        {&#xD;
            &lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #050005"&gt;weight &lt;/span&gt;= &lt;span style="color: #050005"&gt;limit &lt;/span&gt;+ &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;index&lt;/span&gt;];&#xD;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;total &lt;/span&gt;== &lt;span style="color: #050005"&gt;weight&lt;/span&gt;)&#xD;
                &lt;span style="color: blue"&gt;return&lt;/span&gt;;&#xD;
            &lt;span style="color: blue"&gt;else if &lt;/span&gt;(&lt;span style="color: #050005"&gt;total &lt;/span&gt;&amp;gt; &lt;span style="color: #050005"&gt;weight&lt;/span&gt;)&#xD;
                &lt;span style="color: #050005"&gt;limit &lt;/span&gt;+= &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;index&lt;/span&gt;];&#xD;
&#xD;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;index &lt;/span&gt;== (&lt;span style="color: #050005"&gt;length &lt;/span&gt;- 1) &amp;amp;&amp;amp; &lt;span style="color: #050005"&gt;inner &lt;/span&gt;&amp;lt; &lt;span style="color: #050005"&gt;length&lt;/span&gt;)&#xD;
            {&#xD;
                &lt;span style="color: #050005"&gt;limit &lt;/span&gt;= &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;];&#xD;
                &lt;span style="color: #050005"&gt;index &lt;/span&gt;= &lt;span style="color: #050005"&gt;inner&lt;/span&gt;++;&#xD;
            }&#xD;
        }&#xD;
    }&#xD;
}&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;递归版本&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;分成两个部分的循环&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;public static int &lt;/span&gt;&lt;span style="color: #050005"&gt;knapsack&lt;/span&gt;(&lt;span style="color: blue"&gt;int&lt;/span&gt;[] &lt;span style="color: #050005"&gt;values&lt;/span&gt;, &lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;limit&lt;/span&gt;, &lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;start&lt;/span&gt;, &lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;inside&lt;/span&gt;)&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #050005"&gt;length &lt;/span&gt;= &lt;span style="color: #050005"&gt;values&lt;/span&gt;.&lt;span style="color: #050005"&gt;Length&lt;/span&gt;;&#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;start &lt;/span&gt;== &lt;span style="color: #050005"&gt;length&lt;/span&gt;) &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #050005"&gt;limit&lt;/span&gt;;&#xD;
&#xD;
    &lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #050005"&gt;temp &lt;/span&gt;= &lt;span style="color: #050005"&gt;limit&lt;/span&gt;;&#xD;
&#xD;
    &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #050005"&gt;i &lt;/span&gt;= &lt;span style="color: #050005"&gt;start&lt;/span&gt;; &lt;span style="color: #050005"&gt;i &lt;/span&gt;&amp;lt; &lt;span style="color: #050005"&gt;length&lt;/span&gt;; &lt;span style="color: #050005"&gt;i&lt;/span&gt;++)&#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;inside &lt;/span&gt;== 1)&#xD;
        {&#xD;
            &lt;span style="color: green"&gt;//inner loop&#xD;
            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.&lt;span style="color: #050005"&gt;Write&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.&lt;span style="color: #050005"&gt;Format&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;{0},&amp;quot;&lt;/span&gt;, &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;]));&#xD;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;limit &lt;/span&gt;- &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;] == 0)&#xD;
            {&#xD;
                &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.&lt;span style="color: #050005"&gt;WriteLine&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;success&amp;quot;&lt;/span&gt;);&#xD;
                &lt;span style="color: blue"&gt;return &lt;/span&gt;0;&#xD;
            }&#xD;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;limit &lt;/span&gt;- &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;] &amp;gt; 0)&#xD;
                &lt;span style="color: #050005"&gt;limit &lt;/span&gt;-= &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;];&#xD;
        }&#xD;
        &lt;span style="color: blue"&gt;else&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: green"&gt;//outer loop&#xD;
            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.&lt;span style="color: #050005"&gt;WriteLine&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.&lt;span style="color: #050005"&gt;Format&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;{0},&amp;quot;&lt;/span&gt;, &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;]));&#xD;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(0 == &lt;span style="color: #050005"&gt;knapsack&lt;/span&gt;(&lt;span style="color: #050005"&gt;values&lt;/span&gt;, &lt;span style="color: #050005"&gt;limit &lt;/span&gt;- &lt;span style="color: #050005"&gt;values&lt;/span&gt;[&lt;span style="color: #050005"&gt;i&lt;/span&gt;], &lt;span style="color: #050005"&gt;i &lt;/span&gt;+ 1, 1))&#xD;
                &lt;span style="color: blue"&gt;break&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #050005"&gt;inside &lt;/span&gt;== 1)&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.&lt;span style="color: #050005"&gt;WriteLine&lt;/span&gt;();&#xD;
        &lt;span style="color: #050005"&gt;knapsack&lt;/span&gt;(&lt;span style="color: #050005"&gt;values&lt;/span&gt;, &lt;span style="color: #050005"&gt;temp&lt;/span&gt;, &lt;span style="color: #050005"&gt;start &lt;/span&gt;+ 1, 1);&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #050005"&gt;limit&lt;/span&gt;;&#xD;
}&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;test&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;span style="color: blue"&gt;static void &lt;/span&gt;&lt;span style="color: #050005"&gt;Main&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] &lt;span style="color: #050005"&gt;args&lt;/span&gt;)&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;int&lt;/span&gt;[] &lt;span style="color: #050005"&gt;values &lt;/span&gt;= {11,8,7,6,5 };&#xD;
    &lt;span style="color: #050005"&gt;knapsack&lt;/span&gt;(&lt;span style="color: #050005"&gt;values&lt;/span&gt;, 20, 0,0);&#xD;
}&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;组合&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;看此贴&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://wenku.baidu.com/view/59ad20c5bb4cf7ec4afed0a5.html" href="http://wenku.baidu.com/view/59ad20c5bb4cf7ec4afed0a5.html"&gt;http://wenku.baidu.com/view/59ad20c5bb4cf7ec4afed0a5.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2225754.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/10/26/2225754.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/09/22/2185489.html</id><title type="text">二叉树的非递归遍历</title><summary type="text">非递归实现二叉树的前序/后序/中序遍历 中序遍历 // arr[1] // arr[2] ...</summary><published>2011-09-22T12:47:00Z</published><updated>2011-09-22T12:47:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/09/22/2185489.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/09/22/2185489.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;非递归实现二叉树的前序/后序/中序遍历&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;中序遍历&lt;/strong&gt;&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;        &lt;span style="color: green"&gt;//                 arr[1]&#xD;
        //       arr[2]               arr[3] &#xD;
        // arr[4]    arr[5]      arr[6]    &#xD;
        //       arr[7]  arr[8]&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;如上数据,&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;以栈来代替递归实现,输出为4,2,(遍历右元素7,5,8).那么就要想办法以上面的方法入栈4,2,7,5,8的反序8,5,7,2,4&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;左节点出栈后的下个节点肯定是其父节点,右节点(在没有子节点的情况下)出栈后下个节点肯定是根左节点(如节点4的下个节点是节点2, 节点8的下个节点是节点1)&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;step 1 遍历左节点,入栈&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;step 2 出栈,然后遍历该节点的右节点回到step1&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;以下为demo:&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;        &lt;span style="color: green"&gt;//                 arr[1]&#xD;
        //       arr[2]                &#xD;
        // arr[4]    arr[5]         &#xD;
        //     arr[7]    arr[8]&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;push:1,2,4 &#xD;
  &lt;br /&gt;pop:4 &#xD;
&#xD;
  &lt;br /&gt;push:7 &#xD;
&#xD;
  &lt;br /&gt;pop:7 &#xD;
&#xD;
  &lt;br /&gt;pop:2 &#xD;
&#xD;
  &lt;br /&gt;push:5 &#xD;
&#xD;
  &lt;br /&gt;pop:5 &#xD;
&#xD;
  &lt;br /&gt;push:8 &#xD;
&#xD;
  &lt;br /&gt;pop:8 &#xD;
&#xD;
  &lt;br /&gt;pop:1&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;总结:&lt;/p&gt;&#xD;
&#xD;
&lt;ol&gt;&#xD;
  &lt;li&gt;遍历全部左节点 &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;pop一个节点,push右节点 &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;回到step1 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;先序遍历&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;与中序遍历类似,把输出的地方改为Push的位置就可以了,因为先序总是以根节点开始,然后再访问左右节点&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;后序遍历&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;ol&gt;&#xD;
  &lt;li&gt;push:1,2,4 &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;pop:4&amp;#160; {prev:2,cur=4} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;push:5 {prev:4,cur=2} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;push:7 {prev:2,cur=5} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;pop:7 {prev:5,cur=7} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;push:8 {prev:7,cur=5} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;pop:8 {prev:5,cur=8} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;pop:5 {prev:8,cur=5} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;pop:2 {prev:5,cur=2} &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;… &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&#xD;
&lt;p&gt;后序遍历比较麻烦一些.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;按照以下规则来记忆:&lt;/p&gt;&#xD;
&#xD;
&lt;ol&gt;&#xD;
  &lt;li&gt;当节点为叶节点时出栈 &lt;/li&gt;&#xD;
&#xD;
  &lt;li&gt;左节点出栈后,继续出栈右节点,再出栈自身节点,如果没有右节点则出栈自身节点 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&#xD;
&lt;p&gt;使用双栈实现:应该说是最简单的&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;pop一个节点到一个栈,然后push左右节点到另一个栈&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;不贴代码,代码下面有&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;参考此贴:&lt;a title="http://www.cnblogs.com/MichaelYin/archive/2010/12/23/1915316.html" href="http://www.cnblogs.com/MichaelYin/archive/2010/12/23/1915316.html"&gt;http://www.cnblogs.com/MichaelYin/archive/2010/12/23/1915316.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://www.cnblogs.com/Jax/archive/2009/12/28/1633691.html" href="http://www.cnblogs.com/Jax/archive/2009/12/28/1633691.html"&gt;http://www.cnblogs.com/Jax/archive/2009/12/28/1633691.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;关于递归算法和非递归算法的区别和转换的文章&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://wenku.baidu.com/view/0c2409c55fbfc77da269b1c8.html" href="http://wenku.baidu.com/view/0c2409c55fbfc77da269b1c8.html"&gt;http://wenku.baidu.com/view/0c2409c55fbfc77da269b1c8.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2185489.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/09/22/2185489.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/09/19/2181876.html</id><title type="text">最近吸收的html &amp;amp;&amp;amp; CSS 知识</title><summary type="text">IE的hasLayout http://baike.baidu.com/view/2945869.htm http://msdn.microsoft.com/en-us/libr...</summary><published>2011-09-19T14:45:00Z</published><updated>2011-09-19T14:45:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/09/19/2181876.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/09/19/2181876.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;IE的hasLayout&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a title="http://baike.baidu.com/view/2945869.htm" href="http://baike.baidu.com/view/2945869.htm"&gt;http://baike.baidu.com/view/2945869.htm&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/bb250481%28v=vs.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/bb250481%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb250481%28v=vs.85%29.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms533776%28v=vs.85%29.aspx" href="http://msdn.microsoft.com/en-us/library/ms533776%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms533776%28v=vs.85%29.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://haslayout.net" href="http://haslayout.net"&gt;http://haslayout.net&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;打败 IE 的葵花宝典：CSS Bug Table&lt;/p&gt;  &lt;p&gt;&lt;a title="http://ued.alipay.com/wd/2010/07/28/ie-beat-the-holy-canon-css-bug-table/" href="http://ued.alipay.com/wd/2010/07/28/ie-beat-the-holy-canon-css-bug-table/"&gt;http://ued.alipay.com/wd/2010/07/28/ie-beat-the-holy-canon-css-bug-table/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;css hack&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a title="http://sofish.de/1064" href="http://sofish.de/1064"&gt;http://sofish.de/1064&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://sofish.de/1331" href="http://sofish.de/1331"&gt;http://sofish.de/1331&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;HTML:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;base标签&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w3school.com.cn/tags/tag_base.asp"&gt;http://www.w3school.com.cn/tags/tag_base.asp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;可以参见&lt;a title="http://www.etao.com/" href="http://www.etao.com/"&gt;http://www.etao.com/&lt;/a&gt; 首页的base标签&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;贴近页脚&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.cssstickyfooter.com/cn/using-sticky-footer-code.html" href="http://www.cssstickyfooter.com/cn/using-sticky-footer-code.html"&gt;http://www.cssstickyfooter.com/cn/using-sticky-footer-code.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CSS中的行为——expression &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.blueidea.com/tech/site/2006/3705.asp" href="http://www.blueidea.com/tech/site/2006/3705.asp"&gt;http://www.blueidea.com/tech/site/2006/3705.asp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font style="font-weight: bold"&gt;CSS下拉菜单&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.duote.com/tech/5/12078.html" href="http://www.duote.com/tech/5/12078.html"&gt;http://www.duote.com/tech/5/12078.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2181876.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/09/19/2181876.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
