﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-hoodlum1980 ( 發發 ) 的技术博客</title><link>http://www.cnblogs.com/hoodlum1980/</link><description>——ZJU: 百十载，求是魂，求是创新（领域：c/c++, c#, .NET, Compact Framework, WinCE，Matlab，PhotoShop，数字图像处理，电力系统自动化，继电保护）</description><language>zh-cn</language><lastBuildDate>Sun, 07 Sep 2008 22:55:34 GMT</lastBuildDate><pubDate>Sun, 07 Sep 2008 22:55:34 GMT</pubDate><ttl>60</ttl><item><title>我的C语言合集</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/08/19/1271678.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Tue, 19 Aug 2008 12:43:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/08/19/1271678.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1271678.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/08/19/1271678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1271678.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1271678.html</trackback:ping><description><![CDATA[摘要: <img src="http://www.cnblogs.com/images/cnblogs_com/hoodlum1980/chessboard.jpg" class="desc_img"/>这里主要是我最近一段时间在中国编程论坛中发表的C语言板块的帖子和回帖等，主要选取了我个人发表的一些原创C语言代码（全部采用TC2.0进行编译），有少量属于我的一部分研究和学习过程中写的非原创性代码在说明文件中有注明，还有很多比较优秀的我收集的代码，因为并非我的原创而不位于该压缩包内。OUTPUT文件夹中有一部分代码的编译结果，对代码这里就不再一一讲解了。&nbsp;&nbsp;<a href='http://www.cnblogs.com/hoodlum1980/archive/2008/08/19/1271678.html'>阅读全文</a><img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1271678.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42134/" target="_blank">[新闻]JavaScript将成Silverlight的最大对手?</a>]]></description></item><item><title>windows程序开发中c++和c#的对照(2)</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/08/14/1268229.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Thu, 14 Aug 2008 14:41:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/08/14/1268229.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1268229.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/08/14/1268229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1268229.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1268229.html</trackback:ping><description><![CDATA[<p><strong>（1）已知一个位图句柄（HBITMAP），如何获取位图的宽度和高度？</strong></p>
<p>在C#中非常简单，只需要直接访问bitmap.Width和Height属性即可。</p>
<p>在Platform SDK中，<font face="Verdana">GetBitmapDimensionEx是不能完成这个功能的（它需要事先调用SetBitmapDimensionEx），</font></p>
<p>而使用GetObject函数来获取GDIOBJECT的信息，如下代码：</p>
<p>&nbsp;</p>
<p>&nbsp;HBITMAP hBitmap;</p>
<p>&nbsp;BITMAP bminfo;</p>
<p><font face="Verdana">&nbsp;GetObject(hBitmap, sizeof(BITMAP), &amp;bminfo);</font></p>
<p>&nbsp;</p>
<p>&nbsp;从 bminfo.<font face="Verdana">bmWidth 以及 bmHeight属性可以得到。</font></p>
<p>&nbsp;</p>
<p><strong>（2）如何从一个本地文件路径加载一个HBITMAP？</strong></p>
<p>&nbsp;</p>
<p>LoadBitmap可以从HINSTANCE中加载位图资源，但是无法从文件名中加载。要完成这个任务，需要使用LoadImage。</p>
<p>例如：</p>
<p>char* strFileName="c:\\a.bmp";</p>
<p>HBITMAP <font face="Verdana">hBitmap= (HBITMAP)LoadImage(NULL, strFileName, IMAGE_BITMAP,0,0,LR_LOADFROMFILE);</font></p>
<p>&nbsp;</p>
<p>但LoadImage函数只能加载BMP文件，无法成功加载JPG格式。如果要加载JPG格式，应使用OleLoadPicturePath获取一个IPicture接口对象，调用其Render函数在指定的DC进行绘制。</p>
<p>&nbsp;</p>
<p><strong>（3）如何使ActiveX控件重绘？</strong></p>
<p>要使在IE中的ActiveX控件，可以调用this-&gt;<font face="Verdana">FireViewChange();</font></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (to be continued...)</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1268229.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42133/" target="_blank">[新闻]没有谷歌就活不下去的四个网站</a>]]></description></item><item><title>[非原创]树和图的遍历</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/08/10/1264642.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Sun, 10 Aug 2008 05:57:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/08/10/1264642.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1264642.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/08/10/1264642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1264642.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1264642.html</trackback:ping><description><![CDATA[摘要:       本文分析了系统设计师教程中的数据结构章节的部分代码，并分析和图解了对树和图两种基本数据结构的遍历。&nbsp;&nbsp;<a href='http://www.cnblogs.com/hoodlum1980/archive/2008/08/10/1264642.html'>阅读全文</a><img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1264642.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42132/" target="_blank">[新闻]Google 10周岁生日</a>]]></description></item><item><title>发布一个用于WinCE的矢量图控件</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/08/07/1262524.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Wed, 06 Aug 2008 20:18:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/08/07/1262524.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1262524.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/08/07/1262524.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1262524.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1262524.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 发布一个在wince操作系统下，采用.net compact framework 1.0 ( c#)开发的矢量图控件，我于2007年3月份集中一个月的经历完成了它。当然，它的前身是2005年12月我写的第一个矢量图控件，在后来我在此基础上改进了很多地方，针对具体应用做了重新设计并集中精力把它完成，由于属于再次设计，因此它的架构设计和编码中凝聚了我此前开发中的经验和积累，它是我当时最满意的一个模块，对它的架构和可维护性以及运行性能都感到令我感到非常满意，可以说代表了我当时的最高水平。当然从今天来看里面还有一些缺点和经验不足之处。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子代码我命名为GisCtl，是因为它原本是希望完成GIS的功能，但是实际上距离GIS还有一定的距离和偏差。该模块的底层算法和全部编码全部是我独自设计，这其中涉及了一系列图形捕捉算法，图元几何变换和逆变换，图层管理，缩略图，视图参数缓存环形队列，文件格式定义和IO等等。在编写该模块中的一些算法时我积累了很厚的演算草稿纸，用到了很多数学和几何知识，当然也感谢飘渺水云间BBS上ZOL版一些热心网友的支持和对我的解答。在编写这个模块时，涉及到一些设计模式，数据结构，算法的应用，比如鼠标在图上点击选择对象时，有一系列判别算法。比如图元和链接对象采用了是类似flyweight模式以节省内存（在我的另一篇随笔《图元几何变换与flyweight模式》中有讲解），比如视图缓存采用了环形的数据结构（在《环形视图堆栈》中有讲述），比如导航图采用了观察者（订阅）模式。该模块的使用方法集中在例子里，这里就不再叙述了。文档说明还暂时不能提供。目前该模块能读写我的自定义格式图形文件，以及mif格式文件。由于需求，该控件没有包装例如用鼠标创建，拖曳，变换对象的操作，但可以用代码来实现这些功能。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个模块属于我实际工作的项目的一部分。我希望它能发挥更大的价值，而不仅仅是沉寂。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该模块文件名是LineViewCtl.dll, 命名控件是LineViewLib;该dll位于压缩包内，项目中也附带了两个从实际系统中导出的图形文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在模拟器中运行的效果图：（由于模拟器不支持中文，所以中文没能正确显示）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="534" alt="" src="http://www.cnblogs.com/images/cnblogs_com/hoodlum1980/LineViewCtl_01.jpg" width="340" border="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 范例代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Verdana">http://files.cnblogs.com/hoodlum1980/JRL_GisCtlDemo.rar</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a title="GisCtlDemo.rar" href="http://files.cnblogs.com/hoodlum1980/JRL_GisCtlDemo.rar">GisCtlDemo.rar</a>&nbsp;</p>
<img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1262524.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42131/" target="_blank">[新闻]祝Google 10周岁生日快乐</a>]]></description></item><item><title>显示SendMessage和PostMessage的区别</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/07/15/1243715.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Tue, 15 Jul 2008 15:16:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/07/15/1243715.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1243715.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/07/15/1243715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1243715.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1243715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是一个小的例子在于演示SendMessage和PostMessage的区别，其区别简单来说，就是前者会等待对方的窗口过程返回，后者则仅仅给对方的消息队列中投放一个消息立即返回，不会阻塞。因此两个函数的返回值不同，前者为窗口过程的返回值（LRESULT），后者仅投递消息，因此仅返回BOOL表示是否投递成功。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="121" alt="" src="http://www.cnblogs.com/images/cnblogs_com/hoodlum1980/TestSendMessage.jpg" width="548" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源代码下载链接（VC6）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a title="http://www.cnblogs.com/Files/hoodlum1980/SendMsgTest.rar" href="http://www.cnblogs.com/Files/hoodlum1980/SendMsgTest.rar">http://www.cnblogs.com/Files/hoodlum1980/SendMsgTest.rar</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1243715.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42130/" target="_blank">[新闻]Google十年市值达1500亿美元 创造奇迹</a>]]></description></item><item><title>[c++]访MSN浮出窗口的示例</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/07/12/1241260.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Fri, 11 Jul 2008 23:01:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/07/12/1241260.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1241260.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/07/12/1241260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1241260.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1241260.html</trackback:ping><description><![CDATA[【声明】严格来讲，这篇文章不属于我的原创。我在这里参考了codeproject上的国外作者的模仿MSN浮出窗口的C#代码。换句话说，可以认为我把C#代码翻译成了C++代码。另外，为了简化代码，CloseButton我没有采用自己绘制，而是用一个ImageButton来代替。<br />
<br />
效果如图所示：<br />
<img height="173" alt="" src="http://www.cnblogs.com/images/cnblogs_com/hoodlum1980/notifywnd02.jpg" width="324" border="0" /><br />
<br />
<br />
窗口浮出时，停靠于屏幕右下角的位置，这里我借用了博客园的图标（仅用作范例），该窗口主要由用户自定义绘制完成。同时，为了防止浮出窗口夺取焦点，<span class="clsLiteral">SWP_NOACTIVATE</span>标识似乎有时候并没有很好的符合预期，因此我在重设窗口位置的前后强行设置了前台窗口。<br />
<br />
<img height="161" alt="" src="http://www.cnblogs.com/images/cnblogs_com/hoodlum1980/notifywnd01.jpg" width="232" border="0" /><br />
<br />
该示例的源代码（VC6.0 + Windows Platform SDK)下载：<br />
<a href="http://www.cnblogs.com/Files/hoodlum1980/JRL.NotifyWndDemo.rar">http://www.cnblogs.com/Files/hoodlum1980/JRL.NotifyWndDemo.rar</a> 
<img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1241260.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42129/" target="_blank">[新闻]GMail:回过头来支持IE6</a>]]></description></item><item><title>windows程序开发中c++和c#的对照</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/07/04/1235669.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Fri, 04 Jul 2008 06:54:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/07/04/1235669.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1235669.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/07/04/1235669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1235669.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1235669.html</trackback:ping><description><![CDATA[&nbsp;有的选项可能仅提供C++和Windows Platform SDK中的方法（API）：<br />
<strong>（1）将窗口设为顶层窗口：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c++：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Verdana">//[注意]：BringWindowToTop( hwnd )不会使窗口成为TopMost窗口！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetWindowPos(hDlg,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); //忽略x，y，cx，cy参数</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c#：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form1.TopMost=true;<br />
<strong>（2）设置窗口透明度：<br />
</strong><font face="Verdana">&nbsp;&nbsp;&nbsp; //将窗口设置为图层窗口样式<br />
&nbsp;&nbsp;&nbsp; SetWindowLong(hDlg,GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;//设置alpha值，从0~255<br />
&nbsp;&nbsp;&nbsp;BYTE alpha=200;<br />
&nbsp;&nbsp; <font face="Verdana">SetLayeredWindowAttributes(hDlg,0, alpha, LWA_ALPHA);</font><br />
<br />
<strong>(3)已知一个窗口句柄，获取窗口所在程序的HINSTANCE：</strong><br />
<font face="Verdana">HINSTANCE hInstance = (HINSTANCE)GetWindowLong(m_hParentWnd, GWL_HINSTANCE);</font><br />
<br />
<strong>（4）获取光标位置：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL&nbsp;GetCursorPos(LPPOINT&nbsp;<em>lpPoint</em>);<br />
<br />
<strong>（5）使对话框中的某个TextBox(或其他控件)具有输入焦点：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWND&nbsp;SetFocus(HWND&nbsp;<em>hWnd</em>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果该方法不能工作，则可以模拟发送一个鼠标点击的消息给该控件：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);//表示于客户区坐标（0，0）处单击<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMessage(hWnd, WM_LBUTTONUP, 0, 0);<br />
<br />
<strong>（6）使对话框定时关闭：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在对话框窗口过程中，在对话框初始化消息分支中安装和设定一个定时器，在WM_TIMER消息分支中调用EndDialog。<br />
<br />
<strong>（7）使一个菜单灰化或者重新使能：</strong><br />
<pre class="clsSyntax">    设置：BOOL&nbsp;EnableMenuItem(HMENU&nbsp;<em>hMenu</em>, UINT&nbsp;<em>uIDEnableItem</em>,&nbsp;UINT&nbsp;<em>uEnable</em>);</pre>
<pre class="clsSyntax">&nbsp;&nbsp;&nbsp;&nbsp;查询：UINT&nbsp;GetMenuState(HMENU&nbsp;<em>hMenu</em>, UINT&nbsp;<em>uId</em>,&nbsp;UINT&nbsp;<em>uFlags)</em>;</pre>
<strong>（8）获取对话框中的CheckBox是否被选中，设置CheckBox的状态：</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查询：if ( IsDlgButtonChecked(hDlg, nIDButton) == BST_CHECKED) ...<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 设置：BOOL CheckDlgButton(HWND&nbsp;<em>hDlg</em>,&nbsp;int&nbsp;<em>nIDButton</em>,&nbsp;UINT&nbsp;<em>uCheck)</em>;<br />
<br />
<strong>（9）获取对话框中的文本输入框填写的数字：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT&nbsp;GetDlgItemInt(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;<em>hDlg</em>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;<em>nIDDlgItem</em>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;*<em>lpTranslated</em>,&nbsp;&nbsp;//告知调用方是否转换成功<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;<em>bSigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否需要考虑负号。</em><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取对话框控件的文本：<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;GetDlgItemText(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;<em>hDlg</em>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;<em>nIDDlgItem</em>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;<em>lpString</em>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;<em>nMaxCount</em><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
<strong>（10）如何处理对话框中的TreeView控件的选择节点变化，节点展开，节点折叠等事件：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对话框中的控件上发生事件时，通常会给它们的父窗口发送WM_NOTIFY消息。&nbsp;&nbsp;&nbsp;&nbsp;
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LRESULT OnNotify(WORD uMsg, WORD wParam, LONG lParam, BOOL&amp; bHandled)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPNMHDR hdr=(LPNMHDR)lParam;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Notification code. This member can be a control-specific notification code or it <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; can be one of the common notification codes.&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font face="Verdana">if(hdr-&gt;code==TVN_SELCHANGED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//树节点发生改变<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;else if(hdr-&gt;code==TVN_ITEMEXPANDED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define TVE_COLLAPSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0001<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;#define TVE_EXPAND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0002<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;#define TVE_TOGGLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0003<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</font></p>
<strong>（11）如果计算SYSTEMTIME加上一段时间后的SYSTEMTIME：</strong><br />
<div class="cnblogs_code"><img id="Code_Closed_Image_231810" onclick="this.style.display='none'; Code_Closed_Text_231810.style.display='none'; Code_Open_Image_231810.style.display='inline'; Code_Open_Text_231810.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_231810" style="display: none" onclick="this.style.display='none'; Code_Open_Text_231810.style.display='none'; Code_Closed_Image_231810.style.display='inline'; Code_Closed_Text_231810.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_231810" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code_AddSeconds</span><span id="Code_Open_Text_231810" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">typedef&nbsp;union&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;FILETIME&nbsp;fileTime;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">文件时间</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ULONGLONG&nbsp;uint64;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">64-bit&nbsp;unsigned&nbsp;integer.</span><span style="color: #008000"><br />
</span><span style="color: #000000">}&nbsp;UNION_FILETIME;<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">为一个系统时间增加指定的秒数</span><span style="color: #008000"><br />
</span><span style="color: #000000">BOOL&nbsp;AddSeconds(CONST&nbsp;SYSTEMTIME&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">lpSrcTime,&nbsp;SYSTEMTIME&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">lpDestTime,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;seconds)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;UNION_FILETIME&nbsp;uFileTime;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;SystemTimeToFileTime(lpSrcTime,&nbsp;(LPFILETIME)</span><span style="color: #000000">&amp;</span><span style="color: #000000">uFileTime))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;FALSE;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在文件时间上加上指定的分钟（转化为。。）&nbsp;文件时间的单位0.0000001&nbsp;sec,&nbsp;(10^(-7)&nbsp;sec)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">判断分钟的符号</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(seconds</span><span style="color: #000000">&gt;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uFileTime.uint64&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;UInt32x32To64(seconds,</span><span style="color: #800080">10000000</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uFileTime.uint64&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;UInt32x32To64(</span><span style="color: #000000">-</span><span style="color: #000000">seconds,</span><span style="color: #800080">10000000</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;FileTimeToSystemTime((FILETIME</span><span style="color: #000000">*</span><span style="color: #000000">)</span><span style="color: #000000">&amp;</span><span style="color: #000000">uFileTime,&nbsp;lpDestTime);<br />
}</span></span></div>
<br />
<strong>（12）获取用户最近一次鼠标键盘输入到现在的时间（用户离开电脑的时间）：</strong><br />
<p style="margin-bottom: 0pt; margin-left: 13.85pt; margin-right: 0.9pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'MS Shell Dlg'">&nbsp;&nbsp;&nbsp;&nbsp;LASTINPUTINFO lastInput;</span></p>
<p style="margin-bottom: 0pt; margin-left: 13.85pt; margin-right: 0.9pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'MS Shell Dlg'">&nbsp;&nbsp;&nbsp; lastInput.cbSize = sizeof(lastInput);&nbsp; //important，donot forget！</span></p>
<p style="margin-bottom: 0pt; margin-left: 13.85pt; margin-right: 0.9pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'MS Shell Dlg'">&nbsp;&nbsp;&nbsp; GetLastInputInfo(&amp;lastInput);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'MS Shell Dlg'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwTicksSinceLastInput&nbsp;&nbsp; = GetTickCount() - lastInput.dwTime;&nbsp;&nbsp; （单位：毫秒）<br />
</span></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 备注：GetTickCount：获取自开机到现在的毫秒数。<br />
<br />
<strong>（13）防止一个程序运行多个进程实例：通过创建mutex对象来判断当前是否已经有进程在运行；</strong>
<div class="cnblogs_code"><img id="Code_Closed_Image_043826" onclick="this.style.display='none'; Code_Closed_Text_043826.style.display='none'; Code_Open_Image_043826.style.display='inline'; Code_Open_Text_043826.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_043826" style="display: none" onclick="this.style.display='none'; Code_Open_Text_043826.style.display='none'; Code_Closed_Image_043826.style.display='inline'; Code_Closed_Text_043826.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_043826" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code_Mutex</span><span id="Code_Open_Text_043826" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">打开mutex，参数：request&nbsp;full&nbsp;access，handle&nbsp;not&nbsp;inheritable，object&nbsp;name</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;hMutex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OpenMutex(MUTEX_ALL_ACCESS,&nbsp;FALSE,&nbsp;WINLOCK_MUTEX_NAME);<br />
&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(hMutex&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)<br />
&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">说明系统中尚无本进程，进程退出后系统自动销毁该对象<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建mutex，参数：no&nbsp;security&nbsp;descriptor，mutex&nbsp;not&nbsp;owned，object&nbsp;name</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;hMutex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreateMutex(NULL,&nbsp;FALSE,&nbsp;WINLOCK_MUTEX_NAME);<br />
&nbsp;}<br />
&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">退出</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #800080">0</span><span style="color: #000000">);<br />
&nbsp;}<br />
</span></span></div>
<strong>（14）<font face="Verdana">控制窗口是否在任务栏显示一个按钮</font>：<br />
<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;a. 通过设定对话框的样式实现：<br />
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;显示：创建一个没有OWNER的窗口，并设置WS_EX_APPWINDOW&nbsp;扩展样式；<br />
&nbsp;&nbsp;&nbsp;&nbsp;不显示：创建一个没有OWNER的窗口，并设置WS_EX_TOOLWINDOW&nbsp;扩展样式；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;b. 通过任务栏的COM对象来实现：<br />
</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_142241" onclick="this.style.display='none'; Code_Closed_Text_142241.style.display='none'; Code_Open_Image_142241.style.display='inline'; Code_Open_Text_142241.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_142241" style="display: none" onclick="this.style.display='none'; Code_Open_Text_142241.style.display='none'; Code_Closed_Image_142241.style.display='inline'; Code_Closed_Text_142241.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_142241" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code_TaskbarList</span><span id="Code_Open_Text_142241" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ITaskbarList</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pTaskbarList;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CoCreateInstance(CLSID_TaskbarList,&nbsp;NULL,&nbsp;CLSCTX_INPROC_SERVER,&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_ITaskbarList,&nbsp;(</span><span style="color: #0000ff">void</span><span style="color: #000000">**</span><span style="color: #000000">)</span><span style="color: #000000">&amp;</span><span style="color: #000000">pTaskbarList);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;pTaskbarList</span><span style="color: #000000">-&gt;</span><span style="color: #000000">HrInit();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(bShowInTaskbar)&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在任务栏显示按钮</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTaskbarList</span><span style="color: #000000">-&gt;</span><span style="color: #000000">AddTab(hWnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在任务栏隐藏按钮</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTaskbarList</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DeleteTab(hWnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;pTaskbarList</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Release();</span></span></div>
<p>&nbsp;<br />
<strong>（15）如何在通知栏（System Notify Area）放置一个图标（NotifyIcon）：<br />
</strong></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_133027" onclick="this.style.display='none'; Code_Closed_Text_133027.style.display='none'; Code_Open_Image_133027.style.display='inline'; Code_Open_Text_133027.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_133027" style="display: none" onclick="this.style.display='none'; Code_Open_Text_133027.style.display='none'; Code_Closed_Image_133027.style.display='inline'; Code_Closed_Text_133027.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_133027" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code_Shell_NotifyIcon</span><span id="Code_Open_Text_133027" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">NOTIFYICONDATA&nbsp;m_NotifyData;<br />
<br />
HICON&nbsp;hicon&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadIcon(hInstance,MAKEINTSOURCE(IDI_TRAYICONID));<br />
m_NotifyData.cbSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(NOTIFYICONDATA&nbsp;);</span><span style="color: #008000">//</span><span style="color: #008000">字节大小</span><span style="color: #008000"><br />
</span><span style="color: #000000">m_NotifyData.hIcon&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hicon;</span><span style="color: #008000">//</span><span style="color: #008000">图标句柄</span><span style="color: #008000"><br />
</span><span style="color: #000000">m_NotifyData.hWnd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hwnd;</span><span style="color: #008000">//</span><span style="color: #008000">窗口句柄</span><span style="color: #008000"><br />
</span><span style="color: #000000">m_NotifyData.uID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">图标ID</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;WM_TRAYICON&nbsp;(WM_USER+120)</span><span style="color: #000000"><br />
m_NotifyData.uCallbackMessage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WM_TRAYICON;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">产生的消息</span><span style="color: #008000"><br />
</span><span style="color: #000000">strcpy(m_NotifyData.szTip,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Icon's&nbsp;Tip&nbsp;Text</span><span style="color: #800000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">鼠标在图标上悬停时的ToolTip&nbsp;Text</span><span style="color: #008000"><br />
</span><span style="color: #000000">m_NotifyData.uFlags&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NIF_MESSAGE</span><span style="color: #000000">|</span><span style="color: #000000">NIF_TIP</span><span style="color: #000000">|</span><span style="color: #000000">NIF_ICON;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设置要修改哪些属性</span><span style="color: #008000"><br />
</span><span style="color: #000000">Shell_NotifyIcon(NIM_ADD,&nbsp;(PNOTIFYICONDATA)</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_NotifyData);</span><span style="color: #008000">//</span><span style="color: #008000">添加</span></span></div>
<p></font><strong>&nbsp;(16)如何关闭或者注销计算机：<br />
</strong>用户进程启动以后通常不具有关机权限，因此要关闭计算机，首先需要调整我们的进程的权限，获取关机权限：</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_134304" onclick="this.style.display='none'; Code_Closed_Text_134304.style.display='none'; Code_Open_Image_134304.style.display='inline'; Code_Open_Text_134304.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_134304" style="display: none" onclick="this.style.display='none'; Code_Open_Text_134304.style.display='none'; Code_Closed_Image_134304.style.display='inline'; Code_Closed_Text_134304.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_134304" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code_ExitWindowsEx</span><span id="Code_Open_Text_134304" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000">//</span><span style="color: #008000">关闭计算机</span><span style="color: #008000"><br />
</span><span style="color: #000000">LRESULT&nbsp;ShutDown()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hToken;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;TOKEN_PRIVILEGES&nbsp;tkp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hProcess;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;err;<br />
&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;lpMsgBuf;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前进程的句柄</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;hProcess</span><span style="color: #000000">=</span><span style="color: #000000">GetCurrentProcess();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取调整权限和查询权限的token</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(OpenProcessToken(hProcess,&nbsp;TOKEN_ADJUST_PRIVILEGES&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;TOKEN_QUERY,&nbsp;&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hToken))&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;open&nbsp;and&nbsp;check&nbsp;the&nbsp;privileges&nbsp;for&nbsp;to&nbsp;perform&nbsp;the&nbsp;actions<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;#define&nbsp;SE_SHUTDOWN_NAME&nbsp;TEXT("SeShutdownPrivilege")</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LookupPrivilegeValue(NULL,&nbsp;SE_SHUTDOWN_NAME,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">tkp.Privileges[</span><span style="color: #800080">0</span><span style="color: #000000">].Luid);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.PrivilegeCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(AdjustTokenPrivileges(hToken,&nbsp;FALSE,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">tkp,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;(PTOKEN_PRIVILEGES)NULL,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">adjust&nbsp;the&nbsp;privilege&nbsp;to&nbsp;perform&nbsp;the&nbsp;action，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">现在我们的进程已经具有了权限！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">关机</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExitWindowsEx(EWX_SHUTDOWN</span><span style="color: #000000">|</span><span style="color: #000000">EWX_POWEROFF</span><span style="color: #000000">|</span><span style="color: #000000">EWX_FORCE,</span><span style="color: #800080">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">注销<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重启<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,</span><span style="color: #800000">"</span><span style="color: #800000">无法关机</span><span style="color: #800000">"</span><span style="color: #000000">,</span><span style="color: #800000">"</span><span style="color: #800000">HanTing&nbsp;Hotels</span><span style="color: #800000">"</span><span style="color: #000000">,MB_OK);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetLastError();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(err)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;将错误代码转换成文本</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormatMessage(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FORMAT_MESSAGE_ALLOCATE_BUFFER&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;FORMAT_MESSAGE_FROM_SYSTEM,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">dwFlags</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">lpSource</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">dwMessageId&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAKELANGID(LANG_NEUTRAL,&nbsp;SUBLANG_DEFAULT),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">dwLanguageId&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPTSTR)</span><span style="color: #000000">&amp;</span><span style="color: #000000">lpMsgBuf,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">lpBuffer&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">nSize</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Arguments</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,(LPTSTR)lpMsgBuf,&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">,&nbsp;MB_OK</span><span style="color: #000000">|</span><span style="color: #000000">MB_ICONERROR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocalFree(lpMsgBuf);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">没有错误出现,&nbsp;结束自身进程</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(</span><span style="color: #800080">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #800080">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">;<br />
}</span></span></div>
<p><strong>(17）如何在注册表中写入一个键值：</strong></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_135356" onclick="this.style.display='none'; Code_Closed_Text_135356.style.display='none'; Code_Open_Image_135356.style.display='inline'; Code_Open_Text_135356.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_135356" style="display: none" onclick="this.style.display='none'; Code_Open_Text_135356.style.display='none'; Code_Closed_Image_135356.style.display='inline'; Code_Closed_Text_135356.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_135356" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code_RegSetValueEx</span><span id="Code_Open_Text_135356" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000">//</span><span style="color: #008000">--------------------------<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;write&nbsp;a&nbsp;keyvalue<br />
</span><span style="color: #008000">//</span><span style="color: #008000">--------------------------</span><span style="color: #008000"><br />
</span><span style="color: #000000">HKEY&nbsp;hKey;<br />
LONG&nbsp;result;<br />
DWORD&nbsp;dwType</span><span style="color: #000000">=</span><span style="color: #000000">REG_SZ;</span><span style="color: #008000">//</span><span style="color: #008000">C字符串</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;lpData[</span><span style="color: #800080">128</span><span style="color: #000000">];<br />
DWORD&nbsp;cbData</span><span style="color: #000000">=</span><span style="color: #000000">strlen(value)</span><span style="color: #000000">+</span><span style="color: #800080">1</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">设置字符串时，size必须要包含结尾的\0</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(RegOpenKey(HKEY_LOCAL_MACHINE,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">keyName</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hKey)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;ERROR_SUCCESS)<br />
{<br />
&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果键不存在，则创建它</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(RegCreateKey(HKEY_LOCAL_MACHINE,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">keyName</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hKey)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;ERROR_SUCCESS)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;FALSE;<br />
}<br />
result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;RegSetValueEx(hKey,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">valueName</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;dwType,&nbsp;(VOID</span><span style="color: #000000">*</span><span style="color: #000000">)lpData,&nbsp;cbData);<br />
RegCloseKey(hKey);<br />
<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">--------------------------<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;query&nbsp;a&nbsp;keyvalue<br />
</span><span style="color: #008000">//</span><span style="color: #008000">--------------------------</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(RegOpenKey(HKEY_LOCAL_MACHINE,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">keyName</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hKey)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;ERROR_SUCCESS)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;FALSE;<br />
}<br />
result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;RegQueryValueEx(hKey,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">valueName</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">dwType,&nbsp;lpData,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">cbData);<br />
RegCloseKey(hKey);<br />
</span></span></div>
<img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1235669.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42128/" target="_blank">[新闻]Google十年大变样</a>]]></description></item><item><title>[c#]可在任意位置弹出的BalloonTip</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/05/10/1191515.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Sat, 10 May 2008 11:46:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/05/10/1191515.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1191515.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/05/10/1191515.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1191515.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1191515.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BalloonTip通常出现在位于屏幕右下角的Tray（成为通知栏，或系统托盘）的Icon上，比如用户插拔USB设备时的气泡提示。该函数位于Shell32中，是通过调用下面这个API函数实现的， BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA lpdata ); 该函数用于控制对TrayIcon进行控制，可以弹出BalloonTip。然后却只能局限于Tray位置。而在QQ的聊天对话框中，我们发现如果不输入内容而试图发送消息时，就会在按钮上弹出这样的Tip。为此，我在C#中写了一个类似的窗口，可以在任意位置浮出，效果如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img style="font-family: " height="368" alt="" src="http://www.cnblogs.com/images/cnblogs_com/hoodlum1980/BalloonTipDemo.jpg" width="416" border="0" />
<pre></pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是测试程序的截图。在实现时，略微参考了codeproject上的仿MSN浮出窗口的代码。其涉及的主要麻烦是，为了提供足够灵活的接口，应该如何处理窗口上各个元素布局。为了简单期间，这里仅仅提供了&#8220;箭头&#8221;位于右下角的布局方式。（很显然该箭头一共可以有8个停靠位置）。<br />
&nbsp;&nbsp;&nbsp;&nbsp; （1）在弹出时，不夺走其他窗口焦点。为此使用了API的ShowWindow函数： ShowWindow(this.Handle, SW_SHOWNOACTIVATE); <br />
&nbsp;&nbsp;&nbsp;&nbsp; （2）窗体上一共包含4项主要内容：图标，标题，内容文本，关闭按钮。用户可以配置他们，例如选择图标（可以由外部设置或者使用内置图标），是否显示关闭按钮，是否自动关闭（如果把TimeoutMilliSeconds属性设为负数则不会自动关闭，只能通过CloseButton关闭），各种颜色，字体等。另提供一个BalloonClick事件，通知外部用户点击事件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）绘制CloseButton的位图时，由于图中具有透明色，因此需要在绘制时指定透明色，相当于蒙版的作用。否则透明色会被绘制到窗体上导致窗体透明那个。<br />
&nbsp;&nbsp;&nbsp;&nbsp; （4）弹出该窗口，主要使用ShowAt（）函数。里面需要一些参数。如果需要进一步设置其他属性，可以单独进行设置。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源代码的下载链接：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.cnblogs.com/Files/hoodlum1980/JDL.UILib_BalloonTip_VS7.rar">http://www.cnblogs.com/Files/hoodlum1980/JDL.UILib_BalloonTip_VS7.rar</a> 
 <img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1191515.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42127/" target="_blank">[新闻]谷歌十年创新路</a>]]></description></item><item><title>关于编译时的warning treated as error</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/03/04/1090634.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Tue, 04 Mar 2008 12:08:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/03/04/1090634.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1090634.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/03/04/1090634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1090634.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1090634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译器提示：warning treated as error，然后某个文件未生成，build中断。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是因为项目选项中把warning级别设置为了较高的级别导致的，某些warning被当作error，从而不能生成。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解决方法是在解决方案窗口中选中项目，右键点击project，选择&#8220;属性&#8221;，在弹出的对话框中，选择左侧TreeView中的&#8220;Configuration Properties&#8221;-&gt;&#8220;C/C++l&#8221;-&gt;&#8220;General&#8221;节点，在右侧有&#8220;Treat Warnings As Errors&#8221;（将警告当作错误对待）选项。我们把该项该为NO即可。即把相应命令行的"/WX"改为"/W"。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相应的编译选项如下：（参考MSDN）<br />
<div class="tableSection"><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>/w</strong>&nbsp;&nbsp;&nbsp; 禁止所有警告&nbsp;<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/W</strong>n&nbsp;&nbsp; 指定显示的最高等级警告。有效等级是0~4。0级禁止所有警告。4级显示所有警告。<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/Wall</strong> 使能所有警告。<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/WX</strong>&nbsp;&nbsp; 视所有警告为错误。<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/w</strong>ln&nbsp; 将某个指定警告视为某个级别。第一个参数是新的级别，第二个参数是警告号码。例如/w14326 使 C4326成为1级警告。<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/wd</strong>n&nbsp; 禁止某特定警告。n是警告号。例如, /wd4326 禁止C4326警告。<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/we</strong>n&nbsp; 将某个指定警告视为错误。n是警告号。例如, /we4326 把 C4326 视为错误。<br />
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>/wo</strong>n&nbsp; 某警告仅仅报告一次。例如：wo4326使C4326仅仅报告一次。</font></div>
<img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1090634.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42126/" target="_blank">[新闻]十年回顾：Google的互联网经济</a>]]></description></item><item><title>对Photoshop高斯模糊滤镜的算法总结</title><link>http://www.cnblogs.com/hoodlum1980/archive/2008/03/03/1088567.html</link><dc:creator>hoodlum1980</dc:creator><author>hoodlum1980</author><pubDate>Mon, 03 Mar 2008 03:44:00 GMT</pubDate><guid>http://www.cnblogs.com/hoodlum1980/archive/2008/03/03/1088567.html</guid><wfw:comment>http://www.cnblogs.com/hoodlum1980/comments/1088567.html</wfw:comment><comments>http://www.cnblogs.com/hoodlum1980/archive/2008/03/03/1088567.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/hoodlum1980/comments/commentRss/1088567.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hoodlum1980/services/trackbacks/1088567.html</trackback:ping><description><![CDATA[摘要: <img src="http://images.cnblogs.com/cnblogs_com/hoodlum1980/guasswin004.jpg" class="desc_img"/>摘要： 最近有感于部分网友对高斯模糊滤镜的研究，本文将对高斯模糊中半径值的含义以及高斯模糊模板尺寸的疑惑做出总结和解答。&nbsp;&nbsp;<a href='http://www.cnblogs.com/hoodlum1980/archive/2008/03/03/1088567.html'>阅读全文</a><img src ="http://www.cnblogs.com/hoodlum1980/aggbug/1088567.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42123/" target="_blank">[新闻]Google 10周年大事记</a>]]></description></item></channel></rss>