﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我住包子山-随笔分类-C++</title><link>http://www.cppblog.com/gohan/category/935.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 01 Jul 2008 15:44:58 GMT</lastBuildDate><pubDate>Tue, 01 Jul 2008 15:44:58 GMT</pubDate><ttl>60</ttl><item><title>for循环在条件语句中遍历字符串常量</title><link>http://www.cppblog.com/gohan/archive/2008/06/30/54941.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Mon, 30 Jun 2008 02:40:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/06/30/54941.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/54941.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/06/30/54941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/54941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/54941.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; 这样利用字符串常量的方法我还是第一次见到，有点意思吧。最初的程序源自<a href="http://discuss.joelonsoftware.com/default.asp?interview.11.648182" target="_blank">这里</a>，那个程序中不同的字符表示putchar循环执行的次数不同，下标奇偶决定了打印!还是空格。可以根据这样的方法构造一个打印几种字符组成的像素图形。</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">#include &lt;cstdio&gt;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #0000ff;">int</span> main()</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">{</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">    <span style="color: #0000ff;">int</span> a,b,c;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">    <span style="color: #0000ff;">for</span> (c=b=10;a=<span style="color: #006080;">"VAMSI PERI,TFy!QJu ROo TNn(ROo)SLq SLq ULo+ UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^ NBELPeHBFHT}TnALVlBLOFAkHFOuFETp HCStHAUFAgcEAelclcn^r^r\\tZvYxXy T|S~Pn SPm SOn TNn ULo0ULo#ULo-W Hq!WFs XDt!"</span> [b++];)</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">        <span style="color: #0000ff;">for</span>(; a-- &gt; 64 ; )</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">            putchar ( ++c==90 ? c=10:33^b&amp;1);</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">}</pre>
</div>
</div>
<p>&nbsp;&nbsp; 照着这样的方法写了个打印字符串的东西，可以按照指定长度换行。</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">#include &lt;cstdio&gt;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #0000ff;">int</span> main()</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">{</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">    <span style="color: #0000ff;">int</span> a,b,c;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">    <span style="color: #0000ff;">for</span> (c=b=0;a=<span style="color: #006080;">"www.cppblog.com/gohan        this is a test"</span>[b++];)</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">        <span style="color: #0000ff;">if</span>(a!=<span style="color: #006080;">'\0'</span>)</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">            putchar ( ++c==30 ? c=0,b--,10:a);</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">    putchar(10);</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">}</pre>
</div>
</div>
<p>&nbsp;&nbsp; 最后这个是打印一个自己构造的ASC字符，这里构造的是我的名字 </p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">#include &lt;cstdio&gt;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #0000ff;">int</span> main()</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">{</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">    <span style="color: #0000ff;">int</span> a,b,c;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">    <span style="color: #0000ff;">for</span> (c=0,b=0;a=<span style="color: #006080;">"@u@GFLB[@DBJDDFEDEFD@CBBDBBDBBBDBBBCBCBDBC@BBDBBBDBBBDBBBCBCBDBD@CFDDDBDBDGABDBE@v"</span>[b++];)</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">        <span style="color: #0000ff;">for</span>(; a-- &gt; 64 ; )</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;">            putchar ( ++c==54 ? c=0,10:33^b&amp;1);</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">}</pre>
</div>
</div>
<p>&nbsp;</p>
<br>
<p>执行效果如图<img style="border: 0px none ;" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/for_8AB1/image_fa684c31-8888-411d-a5f3-8b78be7c54c2.png" align="left" border="0" height="137" width="509"></p>
<br>
<p><br></p>
<br>
<p><br></p>
<br>
<p><br></p>
<p><br></p><img src ="http://www.cppblog.com/gohan/aggbug/54941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-06-30 10:40 <a href="http://www.cppblog.com/gohan/archive/2008/06/30/54941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32命令行应用，ReadConsoleInput()得到键盘VK_CODE</title><link>http://www.cppblog.com/gohan/archive/2008/05/23/50817.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Thu, 22 May 2008 16:08:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/05/23/50817.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/50817.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/05/23/50817.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/50817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/50817.html</trackback:ping><description><![CDATA[<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="212" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/ea02b9b086ac_14D84/image_ac262c63-9d15-4cce-9682-be9aa7bb922f.png" width="269" align="right" border="0"></p> <p>&nbsp;&nbsp;&nbsp; ReadConsoleInput是一个Win32 API，&nbsp; 声明如下：</p> <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 54%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,'Courier New',courier,monospace; height: 142px; background-color: #f4f4f4"> <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">BOOL ReadConsoleInput(</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">  HANDLE hConsoleInput, <span style="color: #008000">//输入句柄</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">  PINPUT_RECORD lpBuffer, <span style="color: #008000">//指向INPUT_RECORD结构体(数组)的指针</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">  DWORD nLength, <span style="color: #008000">//上面那个结构体的大小</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">  LPDWORD lpNumberOfEventsRead <span style="color: #008000">//实际读入输入内容的个数</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">);</pre></div></div>
<p>&nbsp;&nbsp;&nbsp; 我把读入的功能写在这个助手类中，ReadConsoleInput的得到VK_CODE的方法可以看ReadKeyDown和ReadKeyPush两个函数，它们的效果略有点不同。右图是效果截图，按ESC跳出循环。助手类以后还可以添加颜色控制位置控制等功能，只要你想，目的就是为了简化API调用。</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #cc6633">#pragma</span> once</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">#include &lt;Windows.h&gt;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">class</span> GohanConsoleHelper</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">{</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    HANDLE _hIn;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    HANDLE _hOut;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    INPUT_RECORD _InRec;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    DWORD _NumRead;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">public</span>:</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    WORD VKey;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    GohanConsoleHelper(<span style="color: #0000ff">void</span>){</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        _hIn = GetStdHandle(STD_INPUT_HANDLE);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        _hOut = GetStdHandle(STD_OUTPUT_HANDLE);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        VKey=0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    <span style="color: #0000ff">bool</span> ReadOneInput()</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">return</span> 0!=ReadConsoleInput(_hIn,&amp;_InRec,1,&amp;_NumRead);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    <span style="color: #0000ff">bool</span> ReadOneInput(INPUT_RECORD&amp; InRec)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">return</span> 0!=ReadConsoleInput(_hIn,&amp;InRec,1,&amp;_NumRead);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    DWORD ReadKeyDown()</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">if</span>(!ReadConsoleInput(_hIn,&amp;_InRec,1,&amp;_NumRead))</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">            <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">if</span>(_InRec.EventType!=KEY_EVENT)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">            <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">if</span>(_InRec.Event.KeyEvent.bKeyDown &gt; 0)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">            <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        VKey = _InRec.Event.KeyEvent.wVirtualKeyCode;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        <span style="color: #0000ff">return</span> VKey;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    DWORD ReadKeyPush()</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        <span style="color: #0000ff">if</span>(!ReadConsoleInput(_hIn,&amp;_InRec,1,&amp;_NumRead))</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">            <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        <span style="color: #0000ff">if</span>(_InRec.EventType!=KEY_EVENT)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">            <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        <span style="color: #0000ff">if</span>(_InRec.Event.KeyEvent.bKeyDown == 0)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">            <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        VKey = _InRec.Event.KeyEvent.wVirtualKeyCode;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">return</span> VKey;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">public</span>:</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    ~GohanConsoleHelper(<span style="color: #0000ff">void</span>){}</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">};</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">&nbsp;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">&nbsp;</pre></div></div>
<p>&nbsp;</p>
<p>main所在文件内容</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">#include &lt;windows.h&gt;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">#include &lt;iostream&gt;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">#include <span style="color: #006080">"GohanConsoleHelper.h"</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">using</span> <span style="color: #0000ff">namespace</span> std;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">int</span> main()</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">{</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    GohanConsoleHelper gch;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    <span style="color: #0000ff">while</span> (<span style="color: #0000ff">true</span>)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        <span style="color: #0000ff">if</span>(gch.ReadKeyPush()!=0) <span style="color: #008000">//使用ReadKeyDown()捕获按键弹起的VK_CODE</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">        {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">            <span style="color: #0000ff">if</span>(gch.VKey != VK_ESCAPE)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">                cout&lt;&lt;<span style="color: #006080">"VK_CODE == "</span>&lt;&lt;gch.VKey&lt;&lt;endl;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">            <span style="color: #0000ff">else</span> {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">                cout&lt;&lt;<span style="color: #006080">"Bye~~"</span>&lt;&lt;endl;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">                <span style="color: #0000ff">break</span>;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">            }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">        }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">}</pre></div></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 在命令行得到VK_CODE可以干许多事情了，可以写个在Win32命令行下的小游戏，俄罗斯方块啊什么的，呵呵，不过画面稍微好点的就搞不了了，因为毕竟win32命令行分辨率太低了。</p>
<p>&nbsp;&nbsp; 忘了放出参考的资料：</p>
<p><a title="http://adrianxw.dk/" href="http://adrianxw.dk/">http://adrianxw.dk/</a> 比较全面的Win32命令行教程</p><img src ="http://www.cppblog.com/gohan/aggbug/50817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-05-23 00:08 <a href="http://www.cppblog.com/gohan/archive/2008/05/23/50817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>向Vista学习，实现XP下重命名文件忽略选取扩展名</title><link>http://www.cppblog.com/gohan/archive/2008/05/17/50122.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Fri, 16 May 2008 18:05:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/05/17/50122.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/50122.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/05/17/50122.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/50122.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/50122.html</trackback:ping><description><![CDATA[<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="129" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/VistaXP_105A/image_1bf4b754-9e02-4945-9552-b70650bc5dbe.png" width="124" align="right" border="0">&nbsp;&nbsp; 这两天对于HOOK的技术有了一个入门的学习，用过vista的同学会发现vista重命名一个文件比如vista.exe，他会自动选中vista忽略掉扩展名，带来比较方便的用户体验，学了一些hook我也想试试xp下能不能做这样的事情。于是参考一些文章，勉强实现了，有一点儿缺陷（请看最后）。</p> <p>&nbsp;&nbsp; 经过观察我发现重命名时，资源管理器会向他的子窗口listview发送一个LVM_EDITLABELA的控制消息，所以我使用了WH_CALLWNDPROCRET类型的全局挂钩，这个挂钩可以在sendmessage结束以后处理传送和返回的数据。发送了LVM_EDITLABELA消息后，会在lParam得到一个编辑窗口的句柄，只需之后对这个窗口发送EM_SETSEL控制消息就能够改变重命名时候的高亮区域。hook回调函数如下：</p> <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4"> <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> <span style="color: #0000ff">static</span> LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span> {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>     <span style="color: #0000ff">if</span>(nCode &lt; 0)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>     {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>         CallNextHookEx(hook,nCode,wParam,lParam);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>         <span style="color: #0000ff">return</span> 0;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>     }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>     LPCWPRETSTRUCT msg = (LPCWPRETSTRUCT) lParam;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>     <span style="color: #0000ff">if</span>(msg-&gt;message == LVM_EDITLABELA || msg-&gt;message == LVM_EDITLABELW)</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>     {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>         GetClassName(msg-&gt;hwnd,className,255);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span>         GetWindowText(msg-&gt;hwnd,wndName,255);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span>         <span style="color: #0000ff">if</span>(0==_tcscmp(className,_TEXT(<span style="color: #006080">"SysListView32"</span>)))</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>         {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span>             <span style="color: #0000ff">if</span>(0==_tcscmp(wndName,_TEXT(<span style="color: #006080">"FolderView"</span>)))</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  16:</span>             {</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  17:</span>                 hEditWnd = (HWND)msg-&gt;lResult;</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  18:</span>                 GetWindowText(hEditWnd,className,255);<span style="color: #008000">//暂时放入className</span></pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  19:</span>                 SendMessage(hEditWnd,EM_SETSEL,0,findDot(className));</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  20:</span>             }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  21:</span>         }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  22:</span>     }</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  23:</span>     <span style="color: #0000ff">return</span> CallNextHookEx(hook,nCode,wParam,lParam);</pre><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,'Courier New',courier,monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  24:</span> }</pre></div></div>
<p>&nbsp;</p>
<p>className与wndName是两个TCHAR数组，从hwnd获取信息存在那里进行判断是否为Shell中的listview，避免在其它使用listview的应用程序里会进行之后的处理。</p>
<p>&nbsp;&nbsp; 工程文件下载，<a href="http://www.cppblog.com/Files/gohan/HookDemoSrc.rar" target="_blank">点这里</a></p>
<p>&nbsp;&nbsp; 程序下载，<a href="http://www.cppblog.com/Files/gohan/GRenamer.rar" target="_blank">点这里</a></p>
<p>&nbsp;&nbsp; 使用方法，编译以后直接运行GRnamer就可以，如果不想用了，从任务管理器把它关闭，没有做trayicon之类的东西，因为只是个demo。</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="48" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/VistaXP_105A/image_11463743-357a-4d42-ac50-b9eeb0b9fa1d.png" width="165" align="left" border="0">&nbsp;&nbsp; 最后说一下缺陷，缺陷就是这样做没有办法判断文件与文件夹的区别，所以会有如图的效果，我自己没有想到解决的方法，请达人们指点。：） </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 参考的文章：</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms632589(VS.85).aspx" target="_blank">msdn Hooks</a> hook的全部参考</p>
<p><a href="http://www.codeproject.com/KB/DLL/hooks.aspx" target="_blank">codeproject Hooks and DLLs</a> 我的hook dll都是照着它写的。</p><img src ="http://www.cppblog.com/gohan/aggbug/50122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-05-17 02:05 <a href="http://www.cppblog.com/gohan/archive/2008/05/17/50122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让VS2005中的fstream支持中文路径文件打开</title><link>http://www.cppblog.com/gohan/archive/2008/05/11/49488.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Sat, 10 May 2008 17:30:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/05/11/49488.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/49488.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/05/11/49488.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/49488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/49488.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; 前几天发了这篇《<a href="http://www.cppblog.com/gohan/archive/2008/05/09/49303.html" target="_blank">用fstream对二进制文件的读写</a>》，有朋友指出了VS2005的fstream对于中文路径支持不好的bug。我想大概是因为VS2005更加重视了对字符串的全球化支持，所以鼓励我们使用unicode编码的字符串，对于MBCS之类的支持可能就疏忽了吧。</p>
<p>&nbsp;&nbsp; 我搜索了一下这个问题的解决，参考了如下资料写了演示代码。</p>
<ul>
    <li><a href="http://www.cppblog.com/mythma/archive/2006/06/09/8349.html" target="_blank">fstream 和 中文路径</a>&nbsp; c++博客 </li>
    <li><a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=371229&amp;SiteID=1" target="_blank">About unicode settings in visual studio 2005, it really puzzled me a lot</a> ms forum  </li>
    <li><a href="http://msdn.microsoft.com/en-us/library/9dzxxx2c(VS.80).aspx" target="_blank">MSDN</a></li>
</ul>
<p>&nbsp;&nbsp; 我综合了以上的内容，总结了3种方法，能够较好解决大家的困扰，包括可能无法使用cout的问题。</p>
<div>
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   1:</span> <span style="color: #008000;">/********************************************************************</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   2:</span> <span style="color: #008000;">    created:    2008/05/10</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   3:</span> <span style="color: #008000;">    created:    10:5:2008   23:56</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   4:</span> <span style="color: #008000;">    filename:     k:\sj\fstreamTest\fstreamTest\main.cpp</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   5:</span> <span style="color: #008000;">    file path:    k:\sj\fstreamTest\fstreamTest</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   6:</span> <span style="color: #008000;">    file base:    main</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   7:</span> <span style="color: #008000;">    file ext:    cpp</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   8:</span> <span style="color: #008000;">    author:        Gohan</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   9:</span> <span style="color: #008000;">*********************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  10:</span> #include &lt;tchar.h&gt;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  11:</span> #include &lt;fstream&gt;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  12:</span> #include &lt;iostream&gt;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  13:</span> <span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  14:</span> <span style="color: #0000ff;">int</span> main()</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  15:</span> {</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  16:</span>     <span style="color: #008000;">/************************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  17:</span>     <span style="color: #008000;">/* 方法1，使用_TEXT()宏定义将字符串常量指定为TCHAR*类型                 */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  18:</span>     <span style="color: #008000;">/* 如果是我，首选此类型                                                 */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  19:</span>     <span style="color: #008000;">/************************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  20:</span>     fstream file;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  21:</span>     file.open(_TEXT(<span style="color: #006080;">"c:\\测试\\测试文本.txt"</span>));</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  22:</span>     cout&lt;&lt;file.rdbuf();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  23:</span>     file.close();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  24:</span>&nbsp; </pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  25:</span>     <span style="color: #008000;">/************************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  26:</span>     <span style="color: #008000;">/* 方法2，使用STL中的locale类的静态方法指定全局locale                   */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  27:</span>     <span style="color: #008000;">/* 使用该方法以后,cout可能不能正常输出中文，十分蹊跷                    */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  28:</span>     <span style="color: #008000;">/* 我发现了勉强解决的方法：不要在还原区域设定前用cout或wcout 输出中文   */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  29:</span>     <span style="color: #008000;">/* 否则后果就是还原区域设定后无法使用cout wcout输出中文                 */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  30:</span>     <span style="color: #008000;">/************************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  31:</span>     locale::global(locale(<span style="color: #006080;">""</span>));<span style="color: #008000;">//将全局区域设为操作系统默认区域</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  32:</span>     file.open(<span style="color: #006080;">"c:\\测试\\测试文本2.txt"</span>);<span style="color: #008000;">//可以顺利打开文件了</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  33:</span>     locale::global(locale(<span style="color: #006080;">"C"</span>));<span style="color: #008000;">//还原全局区域设定</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  34:</span>     cout&lt;&lt;file.rdbuf();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  35:</span>     file.close();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  36:</span>&nbsp; </pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  37:</span>     <span style="color: #008000;">/************************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  38:</span>     <span style="color: #008000;">/* 方法3，使用C函数setlocale，不能用cout输出中文的问题解决方法同上      */</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  39:</span>     <span style="color: #008000;">/************************************************************************/</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  40:</span>     setlocale(LC_ALL,<span style="color: #006080;">"Chinese-simplified"</span>);<span style="color: #008000;">//设置中文环境</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  41:</span>     file.open(<span style="color: #006080;">"c:\\测试\\测试文本3.txt"</span>);<span style="color: #008000;">//可以顺利打开文件了</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  42:</span>     setlocale(LC_ALL,<span style="color: #006080;">"C"</span>);<span style="color: #008000;">//还原</span></pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  43:</span>     cout&lt;&lt;file.rdbuf();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">  44:</span>     file.close();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">  45:</span> }</pre>
</div>
</div>
<div>&nbsp; 补充一下，第一种方法，如果不是静态字符串当作路径的话，记得传入TCHAR*类型字符串作为路径，应该就没问题了。<a href="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/VS2005fstream_10ED/image_7.png"><img style="border: 0px none ;" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/VS2005fstream_10ED/image_thumb_2.png" border="0" height="131" width="429"></a> </div>
<div>&nbsp;</div><img src ="http://www.cppblog.com/gohan/aggbug/49488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-05-11 01:30 <a href="http://www.cppblog.com/gohan/archive/2008/05/11/49488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用fstream对二进制文件的读写</title><link>http://www.cppblog.com/gohan/archive/2008/05/09/49303.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Fri, 09 May 2008 06:41:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/05/09/49303.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/49303.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/05/09/49303.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/49303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/49303.html</trackback:ping><description><![CDATA[<p>这里介绍使用fstream这个类完成这个任务，fstream在输入输出方面比较全能。 </p>
<p>操作系统通过二进制文件格式存储大量文件。一般不指定二进制文件操作的I/O操作是面向文本的，用来读写特定编码的文本。本文介绍用C++的fstream类读写二进制文件。 </p>
<p>读写数据以这个WebSite结构体为例  </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Struct for C++ File I/O binary file sample</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   1:</span> <span style="color: #0000ff;">struct</span> WebSites</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   2:</span> {</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   3:</span>      <span style="color: #0000ff;">char</span> SiteName[100];</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   4:</span>      <span style="color: #0000ff;">int</span> Rank;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   5:</span> };</pre>
</div>
</div>
<h4>写操作</h4>
<p>&nbsp;&nbsp;&nbsp; 注意事项
</p>
<ul>
    <li>要写的文件需要用到输出模式标志 ios::out和二进制操作模式标志ios::binary。
    </li>
    <li>write()函数需要两个参数.第一个参数是char*类型用来指定需要写入的数据， 第二个参数是int类型指定写入多少个字节.
    </li>
    <li>最后记得要用close()结束. </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Sample for C++ File I/O binary file write </p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   1:</span> <span style="color: #0000ff;">void</span> write_to_binary_file(WebSites p_Data)</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   2:</span> {</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   3:</span>     fstream binary_file(<span style="color: #006080;">"c:\\test.dat"</span>,ios::<span style="color: #0000ff;">out</span>|ios::binary|ios::app); </pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   4:</span>     binary_file.write(reinterpret_cast&lt;<span style="color: #0000ff;">char</span> *&gt;(&amp;p_Data),<span style="color: #0000ff;">sizeof</span>(WebSites));</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   5:</span>     binary_file.close();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   6:</span> } </pre>
</div>
</div>
<p>上面的例子把一个WebSites的对象追加进了c:\test.dat之中，ios::app是追加方式操作文件的标志。
</p>
<p>上面的write函数，需要第一个参数为char*类型，所以用 reinterpret_cast转换将这个对象地址转换成char*类型.
</p>
<p>读操作
</p>
<p>&nbsp;&nbsp; 跟上面的操作流程类似. 唯一不同在于使用输入模式标志ios::in, 使用read()方法.
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Sample for C++ File I/O binary file read </p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   1:</span> <span style="color: #0000ff;">void</span> read_from_binary_file()</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   2:</span> {</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   3:</span>     WebSites p_Data;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   4:</span>     fstream binary_file(<span style="color: #006080;">"c:\\test.dat"</span>,ios::binary|ios::<span style="color: #0000ff;">in</span>);</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   5:</span>     binary_file.read(reinterpret_cast&lt;<span style="color: #0000ff;">char</span> *&gt;(&amp;p_Data),<span style="color: #0000ff;">sizeof</span>(WebSites));</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   6:</span>     binary_file.close();</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   7:</span>     cout&lt;&lt;p_Data.SiteName&lt;&lt;endl;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #606060;">   8:</span>     cout&lt;&lt;<span style="color: #006080;">"Rank :"</span>&lt;&lt; p_Data.Rank&lt;&lt;endl;</pre>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"><span style="color: #606060;">   9:</span> } </pre>
</div>
</div>
<p>本文只是关于文件io流的一些基础介绍，一些高级操作比如seek，检查文件指针的有效性等等，也是需要学习的，这里就不多说了。
</p>
<p><a href="http://www.codersource.net/cpp_file_io_binary.html" target="_blank">文章来源</a>&nbsp; 我只是做一个简短的翻译</p><img src ="http://www.cppblog.com/gohan/aggbug/49303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-05-09 14:41 <a href="http://www.cppblog.com/gohan/archive/2008/05/09/49303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取给定路径的图标，演示SHGetFileInfo用法</title><link>http://www.cppblog.com/gohan/archive/2008/05/02/48617.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Thu, 01 May 2008 20:54:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/05/02/48617.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/48617.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/05/02/48617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/48617.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/48617.html</trackback:ping><description><![CDATA[<div class="code" style="font-size: 9pt; font-family: consolas"><span style="color: #008000"><font color="#000000">基于上次那个</font><a href="http://www.cppblog.com/gohan/archive/2008/04/24/47993.html" target="_blank"><font color="#000000">SHBrowseForFolder用法的演示代码</font></a></span></div> <div class="code" style="font-size: 9pt; font-family: consolas"><span style="color: #008000"><font color="#000000">建立的仍然是Win32 命令行的工程，所以入口点为main(),需要手动获取HINSTANCE结构。程序在WINXP+VS2005测试通过</font><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="145" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/SHGetFileInfo_3B22/image_3.png" width="199" align="right" border="0"></span></div> <div class="code" style="font-size: 9pt; font-family: consolas"><span style="color: #008000">/********************************************************************<br>&nbsp; created:&nbsp; 2008/05/02<br>&nbsp; created:&nbsp; 2:5:2008&nbsp;&nbsp; 3:40</span></div> <div class="code" style="font-size: 9pt; font-family: consolas"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main.cpp<br>&nbsp; author:&nbsp;&nbsp;&nbsp; Gohan <br>&nbsp; purpose:&nbsp; 演示SHBrowseForFolder用法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 演示SHGetFileInfo获取路径图标&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 演示Picture Box在SDK里的使用方法</span></div> <div class="code" style="font-size: 9pt; font-family: consolas"><span style="color: #008000">*********************************************************************/<br></span><span style="color: #0000ff">#include</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">&lt;Windows.h&gt;<br></span><span style="color: #0000ff">#include</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">&lt;ShlObj.h&gt;<br></span><span style="color: #0000ff">#include</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"resource.h"<br></span><span style="color: #000000">HICON</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">g_icon</span><span style="color: #000000">; <br></span><span style="color: #000000">RECT</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">g_rect</span><span style="color: #000000">;<br></span><span style="color: #000000">TCHAR</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">g_path</span><span style="color: #000000">[</span><span style="color: #000000">MAX_PATH</span><span style="color: #000000">];<br></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">OnInitDlg</span><span style="color: #000000">(</span><span style="color: #000000">HWND</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">hwnd</span><span style="color: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">GetWindowRect</span><span style="color: #000000">(</span><span style="color: #000000">GetDlgItem</span><span style="color: #000000">(</span><span style="color: #000000">hwnd</span><span style="color: #000000">, </span><span style="color: #000000">IDC_ICON1</span><span style="color: #000000">), &amp;</span><span style="color: #000000">g_rect</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">MapWindowPoints</span><span style="color: #000000">(</span><span style="color: #000000">NULL</span><span style="color: #000000">, </span><span style="color: #000000">hwnd</span><span style="color: #000000">, (</span><span style="color: #000000">LPPOINT</span><span style="color: #000000">) &amp;</span><span style="color: #000000">g_rect</span><span style="color: #000000">, 2);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">DestroyWindow</span><span style="color: #000000">(</span><span style="color: #000000">GetDlgItem</span><span style="color: #000000">(</span><span style="color: #000000">hwnd</span><span style="color: #000000">, </span><span style="color: #000000">IDC_ICON1</span><span style="color: #000000">));<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">SetDlgItemText</span><span style="color: #000000">(</span><span style="color: #000000">hwnd</span><span style="color: #000000">,</span><span style="color: #000000">IDC_PATH</span><span style="color: #000000">,</span><span style="color: #000000">g_path</span><span style="color: #000000">);<br>}<br></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">OnPaint</span><span style="color: #000000">(</span><span style="color: #000000">HWND</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">hwnd</span><span style="color: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">PAINTSTRUCT</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">ps</span><span style="color: #000000">;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">HDC</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">hdc</span><span style="color: #000000"> = </span><span style="color: #000000">BeginPaint</span><span style="color: #000000">(</span><span style="color: #000000">hwnd</span><span style="color: #000000">, &amp;</span><span style="color: #000000">ps</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">DrawIcon</span><span style="color: #000000">(</span><span style="color: #000000">hdc</span><span style="color: #000000">,</span><span style="color: #000000">g_rect</span><span style="color: #000000">.</span><span style="color: #000000">left</span><span style="color: #000000">,</span><span style="color: #000000">g_rect</span><span style="color: #000000">.</span><span style="color: #000000">left</span><span style="color: #000000">,</span><span style="color: #000000">g_icon</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">EndPaint</span><span style="color: #000000">(</span><span style="color: #000000">hwnd</span><span style="color: #000000">,&amp;</span><span style="color: #000000">ps</span><span style="color: #000000">);<br>}<br></span><span style="color: #000000">BOOL</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">CALLBACK</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">DlgProc</span><span style="color: #000000"> (</span><span style="color: #000000">HWND</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">hDlg</span><span style="color: #000000">, </span><span style="color: #000000">UINT</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">message</span><span style="color: #000000">, <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; </span><span style="color: #000000">WPARAM</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">wParam</span><span style="color: #000000">, </span><span style="color: #000000">LPARAM</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">lParam</span><span style="color: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">switch</span><span style="color: #000000"> (</span><span style="color: #000000">message</span><span style="color: #000000">)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">WM_INITDIALOG</span><span style="color: #000000"> :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">OnInitDlg</span><span style="color: #000000">(</span><span style="color: #000000">hDlg</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">TRUE</span><span style="color: #000000"> ;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">WM_PAINT</span><span style="color: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">OnPaint</span><span style="color: #000000">(</span><span style="color: #000000">hDlg</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">TRUE</span><span style="color: #000000">;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">WM_COMMAND</span><span style="color: #000000"> :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">switch</span><span style="color: #000000"> (</span><span style="color: #000000">LOWORD</span><span style="color: #000000"> (</span><span style="color: #000000">wParam</span><span style="color: #000000">))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">IDOK</span><span style="color: #000000"> :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">IDCANCEL</span><span style="color: #000000"> :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">EndDialog</span><span style="color: #000000"> (</span><span style="color: #000000">hDlg</span><span style="color: #000000">, 0) ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">TRUE</span><span style="color: #000000"> ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">break</span><span style="color: #000000"> ;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">FALSE</span><span style="color: #000000"> ;<br>}<br></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">main</span><span style="color: #000000">()<br>{<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">HINSTANCE</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">hInstance</span><span style="color: #000000"> = (</span><span style="color: #000000">HINSTANCE</span><span style="color: #000000">)</span><span style="color: #000000">GetModuleHandle</span><span style="color: #000000">(</span><span style="color: #000000">NULL</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">BROWSEINFO</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">bi</span><span style="color: #000000">;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">ZeroMemory</span><span style="color: #000000">(&amp;</span><span style="color: #000000">bi</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #000000">BROWSEINFO</span><span style="color: #000000">));<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">LPMALLOC</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">pMalloc</span><span style="color: #000000">;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">LPITEMIDLIST</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">pidl</span><span style="color: #000000"> = </span><span style="color: #000000">SHBrowseForFolder</span><span style="color: #000000">(&amp;</span><span style="color: #000000">bi</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">pidl</span><span style="color: #000000"> != </span><span style="color: #000000">NULL</span><span style="color: #000000">)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">SHGetPathFromIDList</span><span style="color: #000000">(</span><span style="color: #000000">pidl</span><span style="color: #000000">,</span><span style="color: #000000">g_path</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">SHFILEINFO</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">sfi</span><span style="color: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">ZeroMemory</span><span style="color: #000000">(&amp;</span><span style="color: #000000">sfi</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #000000">SHFILEINFO</span><span style="color: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">SHGetFileInfo</span><span style="color: #000000">(</span><span style="color: #000000">g_path</span><span style="color: #000000">,0,&amp;</span><span style="color: #000000">sfi</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #000000">SHFILEINFO</span><span style="color: #000000">),</span><span style="color: #000000">SHGFI_ICON</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">g_icon</span><span style="color: #000000"> = </span><span style="color: #000000">sfi</span><span style="color: #000000">.</span><span style="color: #000000">hIcon</span><span style="color: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">DialogBox</span><span style="color: #000000"> (</span><span style="color: #000000">hInstance</span><span style="color: #000000">, </span><span style="color: #000000">MAKEINTRESOURCE</span><span style="color: #000000">(</span><span style="color: #000000">IDD_DIALOG1</span><span style="color: #000000">), 0, </span><span style="color: #000000">DlgProc</span><span style="color: #000000">) ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//MessageBox(NULL,path,TEXT("Choose"),MB_OK);<br></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">SUCCEEDED</span><span style="color: #000000">(</span><span style="color: #000000">SHGetMalloc</span><span style="color: #000000">(&amp;</span><span style="color: #000000">pMalloc</span><span style="color: #000000">)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">pMalloc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Free</span><span style="color: #000000">(</span><span style="color: #000000">pidl</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">pMalloc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Release</span><span style="color: #000000">();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">else<br></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">MessageBox</span><span style="color: #000000">(</span><span style="color: #000000">NULL</span><span style="color: #000000">,</span><span style="color: #000000">TEXT</span><span style="color: #000000">(</span><span style="color: #800000">"</span><span style="color: #000000">),</span><span style="color: #000000">TEXT</span><span style="color: #000000">(</span><span style="color: #800000">"Choose"</span><span style="color: #000000">),</span><span style="color: #000000">MB_OK</span><span style="color: #000000">);<br>&nbsp;&nbsp;&nbsp; }<br>}<br><span style="color: #008000">/************************************************************************/<br>/* resource.h&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;&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>/************************************************************************/<br></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">IDD_DIALOG1</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; 101<br></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">IDC_PATH</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;&nbsp;&nbsp;&nbsp; 1001<br></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">IDC_ICON1</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;&nbsp;&nbsp; 1002<br></span><span style="color: #008000">/************************************************************************/<br>/* demo.rc Microsoft Visual C++ generated resource script.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>/************************************************************************/<br></span><span style="color: #0000ff">#include</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"resource.h"<br></span><span style="color: #0000ff">#include</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"afxres.h"<br></span><span style="color: #008000">/////////////////////////////////////////////////////////////////////////////<br>//<br>// Dialog<br>//<br><br></span><span style="color: #000000">IDD_DIALOG1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">DIALOGEX</span><span style="color: #000000"> 0, 0, 126, 83<br></span><span style="color: #000000">STYLE</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">DS_SETFONT</span><span style="color: #000000"> | </span><span style="color: #000000">DS_MODALFRAME</span><span style="color: #000000"> | </span><span style="color: #000000">DS_FIXEDSYS</span><span style="color: #000000"> | </span><span style="color: #000000">DS_CENTER</span><span style="color: #000000"> | </span><span style="color: #000000">WS_POPUP<br>FONT</span><span style="color: #000000"> 8, </span><span style="color: #800000">"MS Shell Dlg"</span><span style="color: #000000">, 400, 0, 0x1<br></span><span style="color: #000000">BEGIN<br></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">DEFPUSHBUTTON</span><span style="color: #000000">&nbsp;&nbsp; </span><span style="color: #800000">"确定"</span><span style="color: #000000">,</span><span style="color: #000000">IDOK</span><span style="color: #000000">,69,7,50,14<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">PUSHBUTTON</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #800000">"取消"</span><span style="color: #000000">,</span><span style="color: #000000">IDCANCEL</span><span style="color: #000000">,69,24,50,14<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">CONTROL</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #800000">""</span><span style="color: #000000">,</span><span style="color: #000000">IDC_ICON1</span><span style="color: #000000">,</span><span style="color: #800000">"Static"</span><span style="color: #000000">,</span><span style="color: #000000">SS_WHITEFRAME</span><span style="color: #000000"> | </span><span style="color: #000000">SS_REALSIZEIMAGE</span><span style="color: #000000">,13,10,20,20,</span><span style="color: #000000">WS_EX_TRANSPARENT<br></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">LTEXT</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #800000">"静态"</span><span style="color: #000000">,</span><span style="color: #000000">IDC_PATH</span><span style="color: #000000">,14,44,89,21,0,</span><span style="color: #000000">WS_EX_CLIENTEDGE<br>END<br><br><br></span><span style="color: #008000">/////////////////////////////////////////////////////////////////////////////<br></span></div><img src ="http://www.cppblog.com/gohan/aggbug/48617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-05-02 04:54 <a href="http://www.cppblog.com/gohan/archive/2008/05/02/48617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浏览文件夹对话框，演示SHBrowseForFolder用法</title><link>http://www.cppblog.com/gohan/archive/2008/04/24/47993.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Thu, 24 Apr 2008 05:15:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/04/24/47993.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/47993.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/04/24/47993.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/47993.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/47993.html</trackback:ping><description><![CDATA[<div class="code" style="font-size: 9pt; font-family: consolas;"><a href="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/SHBrowseForFolder_BA3A/image_2.png"><img style="border: 0px none ;" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/SHBrowseForFolder_BA3A/image_thumb.png" align="right" border="0" height="240" width="244"></a> </div>
<div class="code" style="font-size: 9pt; font-family: consolas;"><span style="color: #008000;">/********************************************************************<br>&nbsp; created:&nbsp; 2008/04/24<br>&nbsp; created:&nbsp; 24:4:2008&nbsp;&nbsp; 12:47<br>&nbsp; author:&nbsp;&nbsp;&nbsp; Gohan <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://feed.feedsky.com/gohan<br>&nbsp; purpose:&nbsp; 演示SHBrowseForFolder用法<br>*********************************************************************/<br></span><span style="color: #0000ff;">#include</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">&lt;Windows.h&gt;<br></span><span style="color: #0000ff;">#include</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">&lt;ShlObj.h&gt;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">main</span><span style="color: #000000;">()<br>{<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">BROWSEINFO</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">bi</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">ZeroMemory</span><span style="color: #000000;">(&amp;</span><span style="color: #000000;">bi</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #000000;">BROWSEINFO</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">LPMALLOC</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">pMalloc</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">LPITEMIDLIST</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">pidl</span><span style="color: #000000;"> = </span><span style="color: #000000;">SHBrowseForFolder</span><span style="color: #000000;">(&amp;</span><span style="color: #000000;">bi</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">TCHAR</span><span style="color: #000000;"> * </span><span style="color: #000000;">path</span><span style="color: #000000;"> = </span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">TCHAR</span><span style="color: #000000;">[</span><span style="color: #000000;">MAX_PATH</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">pidl</span><span style="color: #000000;"> != </span><span style="color: #000000;">NULL</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">SHGetPathFromIDList</span><span style="color: #000000;">(</span><span style="color: #000000;">pidl</span><span style="color: #000000;">,</span><span style="color: #000000;">path</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">MessageBox</span><span style="color: #000000;">(</span><span style="color: #000000;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">path</span><span style="color: #000000;">,</span><span style="color: #000000;">TEXT</span><span style="color: #000000;">(</span><span style="color: #800000;">"Choose"</span><span style="color: #000000;">),</span><span style="color: #000000;">MB_OK</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">SUCCEEDED</span><span style="color: #000000;">(</span><span style="color: #000000;">SHGetMalloc</span><span style="color: #000000;">(&amp;</span><span style="color: #000000;">pMalloc</span><span style="color: #000000;">)))</span><span style="color: #008000;">//pidl指向的对象用完应该释放，之前忽略了<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">pMalloc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Free</span><span style="color: #000000;">(</span><span style="color: #000000;">pidl</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">pMalloc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Release</span><span style="color: #000000;">();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">else<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">MessageBox</span><span style="color: #000000;">(</span><span style="color: #000000;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">TEXT</span><span style="color: #000000;">(</span><span style="color: #800000;">"</span><span style="color: #800000;">选择为空"</span><span style="color: #000000;">),</span><span style="color: #000000;">TEXT</span><span style="color: #000000;">(</span><span style="color: #800000;">"Choose"</span><span style="color: #000000;">),</span><span style="color: #000000;">MB_OK</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">delete</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">path</span><span style="color: #000000;">;</span><span style="color: #008000;">//谢谢true的提醒，以后我一定会更加慎重<br></span><span style="color: #000000;">}<br></span></div>
<div class="code" style="font-size: 9pt; font-family: consolas;"><span style="color: #008000;"></span><span style="color: #000000;"><br></span></div><img src ="http://www.cppblog.com/gohan/aggbug/47993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gohan/" target="_blank">Gohan</a> 2008-04-24 13:15 <a href="http://www.cppblog.com/gohan/archive/2008/04/24/47993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让cout打印出16色字符</title><link>http://www.cppblog.com/gohan/archive/2008/04/19/47561.html</link><dc:creator>Gohan</dc:creator><author>Gohan</author><pubDate>Fri, 18 Apr 2008 20:24:00 GMT</pubDate><guid>http://www.cppblog.com/gohan/archive/2008/04/19/47561.html</guid><wfw:comment>http://www.cppblog.com/gohan/comments/47561.html</wfw:comment><comments>http://www.cppblog.com/gohan/archive/2008/04/19/47561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gohan/comments/commentRss/47561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gohan/services/trackbacks/47561.html</trackback:ping><description><![CDATA[<p><a href="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/cout16_3DD2/image_4.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="99" alt="image" src="http://www.cppblog.com/images/cppblog_com/gohan/WindowsLiveWriter/cout16_3DD2/image_thumb_1.png" width="671" border="0"></a> </p> <p>Win32命令行应用程序是可以加颜色的，使用<font color="#0000ff">SetConsoleTextAttribute</font><font color="#000000">就可以实现了，记得前年小学期做的程序作业就用了它。</font></p> <p><font color="#000000">这篇文章很简单，你可以当作是一个<font color="#0000ff">cout &lt;&lt;运算符重载</font>的一个简单例子。本文章来源与<a href="http://www.codeproject.com/KB/cpp/cout_color.aspx" target="_blank">这里</a>，我只是做一个很不专业解释。</font></p> <p>本文章提供的库可以如下使用，上面是显示效果，想起小时候玩的Mud了吧。</p> <p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 9pt; color: blue; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2">#include</font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2"> </font><span style="color: maroon"><font face="Courier New" size="2">"ConsoleColor.h"<br></font></span></span><font size="2"><font face="Courier New"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">std</span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">::<span style="color: black">cout</span> &lt;&lt; <span style="color: black">green</span> &lt;&lt; <span style="color: maroon">"This text is written in green"</span> </span></font></font><font size="2"><font face="Courier New"><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">&lt;&lt; <span style="color: black">white</span> &lt;&lt; <span style="color: black">std</span>::<span style="color: black">endl</span>;<br></span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">std</span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">::<span style="color: black">cout</span> &lt;&lt; <span style="color: black">color</span>(<span style="color: black">FOREGROUND_RED</span>|<span style="color: black">FOREGROUND_GREEN</span>) </span></font></font><font size="2"><font face="Courier New"><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">&lt;&lt; <span style="color: maroon">"This text has a really exiting color !"</span> <br></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">&lt;&lt; <span style="color: black">white</span> &lt;&lt; <span style="color: black">std</span>::<span style="color: black">endl</span>;</span></font></font></p> <p><font face="Courier New" size="2">ConsoleColor.h的内容</font></p> <p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 9pt; color: blue; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2">#pragma</font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2"> </font><span style="color: blue"><font face="Courier New" size="2">once<br></font></span></span><span lang="EN-US" style="font-size: 9pt; color: blue; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2">#include</font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2"> </font><span style="color: maroon"><font face="Courier New" size="2">&lt;iostream&gt;<br></font></span></span><font size="2"><font face="Courier New"><span lang="EN-US" style="font-size: 9pt; color: blue; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes">#include</span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"> <span style="color: maroon">&lt;windows.h&gt;<?xml:namespace prefix = o /><o:p></o:p></span></span></font></font></p> <p class="MsoNormal" style="text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 9pt; color: blue; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2">inline</font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2"> <span style="color: black">std</span>::<span style="color: black">ostream</span>&amp; <span style="color: black">blue</span>(<span style="color: black">std</span>::<span style="color: black">ostream</span> &amp;<span style="color: black">s</span>)<br></font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font face="Courier New" size="2">{<br></font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font size="2"><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="color: black">HANDLE</span> <span style="color: black">hStdout</span> = <span style="color: black">GetStdHandle</span>(<span style="color: black">STD_OUTPUT_HANDLE</span>); <br></font></font></span><span lang="EN-US" style="font-size: 9pt; font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes"><font size="2"><font face="Courier New"><span style="mso-spacerun: ye