<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_沧桑不尽</title><subtitle type="text">无穷的沧桑,不尽的落叶</subtitle><id>http://feed.cnblogs.com/blog/u/59200/rss</id><updated>2012-02-07T11:21:38Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/59200/rss"/><entry><id>http://www.cnblogs.com/20090802/archive/2011/03/11/1981355.html</id><title type="text">二叉树的先序遍历的递归和非递归</title><summary type="text">//队列非递归遍历需要template&lt;class NodeType&gt;class Stack{public:Stack(){nIndex = 0;}~Stack(){}//入栈void Push(NodeType *p){ arr[nIndex] = p; ++nIndex;}//获取栈顶元素NodeType *Top(){ --nIndex; if (nIndex&lt;0) { nIndex = 0; return NULL; } return arr[nIndex];}bool IsEmpty(){ return nIndex == 0;}priva</summary><published>2011-03-11T05:40:00Z</published><updated>2011-03-11T05:40:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2011/03/11/1981355.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2011/03/11/1981355.html"/><content type="html">&lt;div class="cnblogs_Highlighter"&gt;&lt;pre class="brush:cpp;gutter:false;"&gt;//队列非递归遍历需要template&amp;lt;class NodeType&amp;gt;class Stack{public:Stack(){nIndex = 0;}~Stack(){}//入栈void Push(NodeType *p){arr[nIndex] = p;++nIndex;}//获取栈顶元素NodeType *Top(){--nIndex;if (nIndex&amp;lt;0){nIndex = 0;return NULL;}return arr[nIndex];}bool IsEmpty(){return nIndex == 0;}private:NodeType *arr[100];int nIndex;//栈顶的位置};struct Node {int nData;struct Node *pLchild;struct Node *pRchild;};//递归遍历void DG_BianLi(Node *pTree){if (!pTree){return;}printf("%d ",pTree-&amp;gt;nData);DG_BianLi(pTree-&amp;gt;pLchild);DG_BianLi(pTree-&amp;gt;pRchild);}//非递归遍历void FDG_BianLi(Node *pTree){Node *pNode = pTree;Stack&amp;lt;Node&amp;gt; stack;while(pNode || !stack.IsEmpty()){if (pNode){printf("%d ",pNode-&amp;gt;nData);stack.Push(pNode);pNode = pNode-&amp;gt;pLchild;}else{pNode = stack.Top();pNode = pNode-&amp;gt;pRchild;}}}int _tmain(int argc, _TCHAR* argv[]){//创建一个小树Node node[5] = {{1,NULL,NULL},{2,NULL,NULL},{3,NULL,NULL},{4,NULL,NULL},{5,NULL,NULL}};node[0].pLchild = &amp;amp;node[1];node[0].pRchild = &amp;amp;node[4];node[1].pLchild = &amp;amp;node[2];node[2].pRchild = &amp;amp;node[3];//DG_BianLi(node);FDG_BianLi(node);getchar();return 0;}&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/20090802/aggbug/1981355.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/20090802/archive/2011/03/11/1981355.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2011/03/11/1980588.html</id><title type="text">100位数字相加</title><summary type="text">int _tmain(int argc, _TCHAR* argv[]){char num1[100] = {'1'};char num2[100] = {'2'};char sum[101] = {0};for (int i=0;i&lt;100;++i){ num1[i] = '1'; num2[i] = '9';}int nJinWei = 0;int nTmpSum = 0;for (int i=0;i&lt;100;++i){ nTmpSum = (num1[i] - '0') + (</summary><published>2011-03-11T02:57:00Z</published><updated>2011-03-11T02:57:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2011/03/11/1980588.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2011/03/11/1980588.html"/><content type="html">&lt;div class="cnblogs_Highlighter"&gt;&lt;pre class="brush:cpp;gutter:false;"&gt;int _tmain(int argc, _TCHAR* argv[]){char num1[100] = {'1'};char num2[100] = {'2'};char sum[101] = {0};for (int i=0;i&amp;lt;100;++i){num1[i] = '1';num2[i] = '9';}int nJinWei = 0;int nTmpSum = 0;for (int i=0;i&amp;lt;100;++i){nTmpSum = (num1[i] - '0') + (num2[i]-'0') + nJinWei;nJinWei = nTmpSum / 10;sum[i] = nTmpSum % 10;}sum[100] = nJinWei;for (int i=1;i&amp;lt;=101;i++){printf("%d",sum[101-i]);}getchar();return 0;}&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/20090802/aggbug/1980588.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/20090802/archive/2011/03/11/1980588.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/12/30/1921333.html</id><title type="text">C语言的可变参数一点研究</title><summary type="text">可变参数对我多少有点诱惑，当初一开始学习C的时候，就被它迷惑了，我自己写的函数都是定参的，当时以我的功力，断是费上三天三夜功夫也搞不定可变参数。在汇编的课开完之后，其实对c的一些技巧已经不稀奇了，C毕竟是C，而不像C++有太多的语法规定和编译器规定。昨天头热，想再来看看这个变参，也许可以偶尔在工作上用一下。参数是靠堆栈来保存的，其实看看堆栈就知道怎么来获取的了，那获取变参应该就简单了：1.在堆栈中获取数据2.将这些数据转换成参数的值。加之C中已经有人做了这么几个宏：代码对于这些宏，对于不同的平台定义是不一样的，但作用都是一样一样的。我写了几行代码看了下堆栈代码断点到f函数被调用那行，转到汇编下</summary><published>2010-12-30T01:03:00Z</published><updated>2010-12-30T01:03:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/12/30/1921333.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/12/30/1921333.html"/><content type="html">&lt;p&gt;可变参数对我多少有点诱惑，当初一开始学习C的时候，就被它迷惑了，我自己写的函数都是定参的，当时以我的功力，断是费上三天三夜功夫也搞不定可变参数。&lt;/p&gt;&lt;p&gt;在汇编的课开完之后，其实对c的一些技巧已经不稀奇了，C毕竟是C，而不像C++有太多的语法规定和编译器规定。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;昨天头热，想再来看看这个变参，也许可以偶尔在工作上用一下。&lt;/p&gt;&lt;p&gt;参数是靠堆栈来保存的，其实看看堆栈就知道怎么来获取的了，那获取变参应该就简单了：1.在堆栈中获取数据2.将这些数据转换成参数的值。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;加之C中已经有人做了这么几个宏：&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('417f72aa-0dd8-495d-9644-3fc21ae2826a')"&gt;&lt;img id="code_img_closed_417f72aa-0dd8-495d-9644-3fc21ae2826a" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /&gt;&lt;img id="code_img_opened_417f72aa-0dd8-495d-9644-3fc21ae2826a" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('417f72aa-0dd8-495d-9644-3fc21ae2826a',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /&gt;&lt;div id="cnblogs_code_open_417f72aa-0dd8-495d-9644-3fc21ae2826a" class="cnblogs_code_hide"&gt;&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; va_start _crt_va_start&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; va_arg _crt_va_arg&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; va_end _crt_va_end&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt; A guess at the proper definitions for other platforms &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) &amp;amp; ~(sizeof(int) - 1) )&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; _crt_va_end(ap)      ( ap = (va_list)0 )&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt; _ADDRESSOF(v)   ( &amp;amp;(v) )&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;对于这些宏，对于不同的平台定义是不一样的，但作用都是一样一样的。&lt;/p&gt;&lt;p&gt;我写了几行代码看了下堆栈&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('0dfe49df-b3a9-43c6-8b07-d588d6fc03a5')"&gt;&lt;img id="code_img_closed_0dfe49df-b3a9-43c6-8b07-d588d6fc03a5" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /&gt;&lt;img id="code_img_opened_0dfe49df-b3a9-43c6-8b07-d588d6fc03a5" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('0dfe49df-b3a9-43c6-8b07-d588d6fc03a5',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /&gt;&lt;div id="cnblogs_code_open_0dfe49df-b3a9-43c6-8b07-d588d6fc03a5" class="cnblogs_code_hide"&gt;&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;#include &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;stdafx.h&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;stdarg.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; f(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; n,...)&lt;br /&gt;{&lt;br /&gt;     va_list arglist;&lt;br /&gt;     va_start(arglist,n);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; nArg &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; va_arg(arglist,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;     va_end(arglist);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; _tmain(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; argc, _TCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt; argv[])&lt;br /&gt;{&lt;br /&gt;    f(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0x2&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;断点到f函数被调用那行，转到汇编下，可看到参数的入栈顺序，当然这里的调用约定是__cdecl,慢慢压栈，观察栈的变化，然后在跟踪进f看参数怎么出栈的。&lt;/p&gt;&lt;p&gt;其实一般可变参数不需要栈的，但是如果一个函数连一个定参都没有的话，那就不行的了va_的几个宏只能是根据最后一个定参的地址确定其他的地址的，如果没有一个定参，那么这几个宏，将无用武之地了，这个时候，可以直接在f中获取寄存器的esp即可，当然这样的函数也可能没有多大意义，而且可以被随意加个参数替代。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/20090802/aggbug/1921333.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/20090802/archive/2010/12/30/1921333.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/10/14/1851207.html</id><title type="text">VC 开发设置控件TAB键的顺序</title><summary type="text">按Ctrl+D快捷键 即可。</summary><published>2010-10-14T06:03:00Z</published><updated>2010-10-14T06:03:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/10/14/1851207.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/10/14/1851207.html"/><content type="html">&lt;p&gt;按Ctrl+D快捷键 即可。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/20090802/aggbug/1851207.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/20090802/archive/2010/10/14/1851207.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/09/17/1829283.html</id><title type="text">界面美化．CStatic控件的美化</title><summary type="text">静态控件也是比较常用的控件，在VS开发环境中用的应该挺频繁的吧。其实mfc中实现对窗口美化，主要依赖于重绘。static控件也是个窗口，windows为其留有自绘的权利，可以设置其样式为SS_OWNERDRAW,Windows就会把其绘制权利交给我们的代码，怎么绘制就看我们的代码了。mfc中更好的一种方式就是消息反射，省的自己来做这一步操作了，我们重载CStatic中的DrawItem方法，进行自...</summary><published>2010-09-17T06:17:00Z</published><updated>2010-09-17T06:17:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/09/17/1829283.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/09/17/1829283.html"/><content type="html">&lt;p&gt;静态控件也是比较常用的控件，在VS开发环境中用的应该挺频繁的吧。&lt;/p&gt;&lt;p&gt;其实mfc中实现对窗口美化，主要依赖于重绘。static控件也是个窗口，windows为其留有自绘的权利，可以设置其样式为SS_OWNERDRAW,Windows就会把其绘制权利交给我们的代码，怎么绘制就看我们的代码了。mfc中更好的一种方式就是消息反射，省的自己来做这一步操作了，我们重载CStatic中的DrawItem方法，进行自绘，基本就可以了。其实如果自己在OnPaint里画也是可以的（对于任何控件窗口都可以的，只是麻烦或者有其他的问题）。&lt;/p&gt;&lt;p&gt;我们可以给CStatic中加入背景图片，画成按钮样式，等等，可以模拟出其他的控件（像CButton），如果CStatic要响应事件我们可以加上SS_NOTIFY样式，这样父窗口就会把消息传递到CStatic里面来，要怎么处理就看我们了。&lt;/p&gt;&lt;p&gt;下面看下具体怎么做：&lt;/p&gt;&lt;p&gt;第一要设置继承CStatic类，我们自己写一个Static类，我给他起了CSkinStatic的名字。&lt;/p&gt;&lt;p&gt;第二，设置其样式为SS_OWNERDRAW,设置样式可以在Static控件创建前后都可以，但要在其显示前，我这里在CSkinStatic::PreSubclassWindow()中进行设置&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div onclick="cnblogs_code_show('7411d71a-3bd5-4518-9c42-08ff395e9e5c')" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div class="cnblogs_code_hide" id="cnblogs_code_open_7411d71a-3bd5-4518-9c42-08ff395e9e5c"&gt;&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; CSkinStatic::PreSubclassWindow()&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: 在此添加专用代码和/或调用基类&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    DWORD dwStyle &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetStyle();&lt;br /&gt;    SetWindowLong(GetSafeHwnd(),GWL_STYLE,dwStyle &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; SS_OWNERDRAW  );&lt;br /&gt;    CStatic::PreSubclassWindow();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第三，就是重载DrawItem，然后在里面想怎么画就怎么画了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div onclick="cnblogs_code_show('96c449df-f5ec-4657-a828-da07c49f2c6e')" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div class="cnblogs_code_hide" id="cnblogs_code_open_96c449df-f5ec-4657-a828-da07c49f2c6e"&gt;&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; CSkinStatic::DrawItem(LPDRAWITEMSTRUCT &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;lpDrawItemStruct&lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    CRect rcWnd;&lt;br /&gt;    GetWindowRect(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;rcWnd);&lt;br /&gt;    ScreenToClient(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;rcWnd);&lt;br /&gt;    CString strText;&lt;br /&gt;    GetWindowText(strText);&lt;br /&gt;    &lt;br /&gt;    CBitmap bmp;&lt;br /&gt;    bmp.LoadBitmap(IDB_BITMAP1);&lt;br /&gt;    BITMAP bmpInfo;&lt;br /&gt;    bmp.GetBitmap(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;bmpInfo);&lt;br /&gt;    CDC &lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;pdc &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetWindowDC();&lt;br /&gt;    CDC dcMem;&lt;br /&gt;    dcMem.CreateCompatibleDC(pdc);&lt;br /&gt;    CBitmap bmpBg;&lt;br /&gt;    bmpBg.CreateCompatibleBitmap(pdc,rcWnd.Width(),rcWnd.Height());&lt;br /&gt;    dcMem.SelectObject(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;bmpBg);&lt;br /&gt;&lt;br /&gt;    CDC dcDraw;&lt;br /&gt;    dcDraw.CreateCompatibleDC(pdc);&lt;br /&gt;    dcDraw.SelectObject(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;bmp);&lt;br /&gt;    dcMem.StretchBlt(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,rcWnd.Width(),rcWnd.Height(),&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;dcDraw,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);&lt;br /&gt;&lt;br /&gt;    CFont font;&lt;br /&gt;    VERIFY(font.CreateFont(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;12&lt;/span&gt;&lt;span style="color: #000000;"&gt;,                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nHeight&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,                         &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nWidth&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,                         &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nEscapement&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,                         &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nOrientation&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        FW_NORMAL,                 &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nWeight&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        FALSE,                     &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; bItalic&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        FALSE,                     &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; bUnderline&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,                         &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; cStrikeOut&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        ANSI_CHARSET,              &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nCharSet&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        OUT_DEFAULT_PRECIS,        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nOutPrecision&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        CLIP_DEFAULT_PRECIS,       &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nClipPrecision&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        DEFAULT_QUALITY,           &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nQuality&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        DEFAULT_PITCH &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; FF_SWISS,  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; nPitchAndFamily&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;宋体&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));                 &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; lpszFacename&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    dcMem.SelectObject(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;font);&lt;br /&gt;    dcMem.SetBkMode(TRANSPARENT);&lt;br /&gt;    dcMem.SetTextColor(RGB(&lt;/span&gt;&lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;    dcMem.DrawText(strText,&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;rcWnd,DT_CENTER);&lt;br /&gt;    pdc&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BitBlt(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,rcWnd.Width(),rcWnd.Height(),&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;dcMem,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,SRCCOPY);&lt;br /&gt;&lt;br /&gt;    bmp.DeleteObject();&lt;br /&gt;    ReleaseDC(pdc);&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这个绘图稍有点麻烦，大致是这样的 先创建内存两个内存DC一个作为画布，另一个负责引入图片，再拉伸拷贝到画布DC上，最后画布DC全部拷贝到窗口DC上。这主要是防止贴图和写文字不同步，造成有图无字，也避免了一个内存DC造成的字体拉伸。运用了网上盛传的双缓冲。&lt;/p&gt;&lt;p&gt;经过我们自己的代码处理后，可以看看Static成什么样了&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/img/xhk/201009/2010091714062036.png" /&gt;&lt;/p&gt;&lt;p&gt;当然可以自己画个渐变色出来。不过个人觉得还是贴图方便。&lt;/p&gt;&lt;p&gt;Static控件的美化比较简单，没有什么多的消息要进行处理。不过要想设置个性的，也得需要几个状态变量，多个图片吧。&lt;/p&gt;&lt;p&gt;基本的东西都很好做，如果想做好点细腻点，总会有点麻烦的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/20090802/aggbug/1829283.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/20090802/archive/2010/09/17/1829283.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/09/17/1829192.html</id><title type="text">桌面开发 界面美化</title><summary type="text">闲了一段时间，现在想把这段时间收获的一点东西记下来，也做为自己的笔记吧。 想了想就写点桌面开发时，美化界面的一点想法与收获吧。 简单对几种窗口重绘。 网上有很多的资料，但都是零散的，而且别转抄的已经很不完善了。自己总结下，留得以后用吧。当然如果对谁看了有用了那就更好了。</summary><published>2010-09-17T05:12:00Z</published><updated>2010-09-17T05:12:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/09/17/1829192.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/09/17/1829192.html"/><content type="html">&lt;p&gt;闲了一段时间，现在想把这段时间收获的一点东西记下来，也做为自己的笔记吧。&lt;/p&gt; &lt;p&gt;想了想就写点桌面开发时，美化界面的一点想法与收获吧。&lt;/p&gt; &lt;p&gt;简单对几种窗口重绘。&lt;/p&gt; &lt;p&gt;网上有很多的资料，但都是零散的，而且别转抄的已经很不完善了。自己总结下，留得以后用吧。当然如果对谁看了有用了那就更好了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/20090802/aggbug/1829192.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/20090802/archive/2010/09/17/1829192.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/03/20/1690572.html</id><title type="text">《C语言到底能干什么》1.14  简单的整蛊——窗口抖动程序的实现</title><summary type="text">一次朋友曾给我传了个有趣的程序，单击后振动的窗口飘来飘去，其实也就是不停地移动窗口，后来分析后，才知道原来只是移动当前活动的窗口而已，想想这个也很好现，就是获得当前活动的窗口，然后用MoveWindow函数去改变它的位置不就可以了，原来还以为这个程序有什么特别的呢，后来想也没什么了，这节我们来写个这样的程序，我也不想复杂的实现，就简单点。/********************WobbleWnd...</summary><published>2010-03-20T10:04:00Z</published><updated>2010-03-20T10:04:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/03/20/1690572.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/03/20/1690572.html"/><content type="text">一次朋友曾给我传了个有趣的程序，单击后振动的窗口飘来飘去，其实也就是不停地移动窗口，后来分析后，才知道原来只是移动当前活动的窗口而已，想想这个也很好现，就是获得当前活动的窗口，然后用MoveWindow函数去改变它的位置不就可以了，原来还以为这个程序有什么特别的呢，后来想也没什么了，这节我们来写个这样的程序，我也不想复杂的实现，就简单点。/********************WobbleWnd...</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/03/12/1683900.html</id><title type="text">《C语言到底能干什么》的一点说明</title><summary type="text">《C语言到底能干什么》本是我最痛苦的时候所作，实在是生不如死，但人要珍爱自己的生命，我这点本能还是有的。于是就转移精力地写这了这个系列文章，在学校时完成了一部分，原来发在自己的网站上，后面空间到期，也无钱去养一个网站，就消失了，而后发现博客园不错，工作后，就在闲暇的时候，把文章慢慢往上面贴，得一些朋友的支持，也得到了不好唾骂，说我这个是win32 api编程，看windows程序设计就可以了。估计...</summary><published>2010-03-11T16:06:00Z</published><updated>2010-03-11T16:06:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/03/12/1683900.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/03/12/1683900.html"/><content type="text">《C语言到底能干什么》本是我最痛苦的时候所作，实在是生不如死，但人要珍爱自己的生命，我这点本能还是有的。于是就转移精力地写这了这个系列文章，在学校时完成了一部分，原来发在自己的网站上，后面空间到期，也无钱去养一个网站，就消失了，而后发现博客园不错，工作后，就在闲暇的时候，把文章慢慢往上面贴，得一些朋友的支持，也得到了不好唾骂，说我这个是win32 api编程，看windows程序设计就可以了。估计...</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/03/05/1679389.html</id><title type="text">1.10   菜单的高级操作和快捷菜单的编程</title><summary type="text">TrackPopupMenu函数功能：该函数在指定位置显示快捷菜单，并跟踪菜单项的选择。快捷菜单可出现在屏幕上的任何位置。函数原型：BOOL TrackPopupMenu（HMENU hMenu，UINT uFlags，int x，int y，int nReserved，HWND hWnd，CONST RECT”prcRect）；参数hMenu：被显示的快捷菜单的句柄。...</summary><published>2010-03-05T11:47:00Z</published><updated>2010-03-05T11:47:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/03/05/1679389.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/03/05/1679389.html"/><content type="text">TrackPopupMenu函数功能：该函数在指定位置显示快捷菜单，并跟踪菜单项的选择。快捷菜单可出现在屏幕上的任何位置。函数原型：BOOL TrackPopupMenu（HMENU hMenu，UINT uFlags，int x，int y，int nReserved，HWND hWnd，CONST RECT”prcRect）；参数hMenu：被显示的快捷菜单的句柄。...</content></entry><entry><id>http://www.cnblogs.com/20090802/archive/2010/03/03/1677544.html</id><title type="text">1.9   让菜单和快捷键起作用</title><summary type="text">先做个广告：个人架设了论坛http://www.crazyctime.com/，欢迎各位热爱C/C++编程技术的朋友进来交流学习LoadAccelerators函数功能：调入加速键表。该函数调入指定的加速键表。函数原型：HACCEL LoadAccelerators（HINSTANCE hlnstance，LPCTSTR lpTableName）；参数：hlnstance:模块的一...</summary><published>2010-03-03T13:50:00Z</published><updated>2010-03-03T13:50:00Z</updated><author><name>沧桑不尽</name><uri>http://www.cnblogs.com/20090802/</uri></author><link rel="alternate" href="http://www.cnblogs.com/20090802/archive/2010/03/03/1677544.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/20090802/archive/2010/03/03/1677544.html"/><content type="text">先做个广告：个人架设了论坛http://www.crazyctime.com/，欢迎各位热爱C/C++编程技术的朋友进来交流学习LoadAccelerators函数功能：调入加速键表。该函数调入指定的加速键表。函数原型：HACCEL LoadAccelerators（HINSTANCE hlnstance，LPCTSTR lpTableName）；参数：hlnstance:模块的一...</content></entry></feed>
