﻿<?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++博客-woaidongmao-随笔分类-MFC存档</title><link>http://www.cppblog.com/woaidongmao/category/6003.html</link><description>文章均收录自他人博客，但不喜标题前加-[转贴]，因其丑陋，见谅！~</description><language>zh-cn</language><lastBuildDate>Sat, 11 Oct 2008 20:42:30 GMT</lastBuildDate><pubDate>Sat, 11 Oct 2008 20:42:30 GMT</pubDate><ttl>60</ttl><item><title>在VC6中使用GDI+</title><link>http://www.cppblog.com/woaidongmao/archive/2008/10/08/63503.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Wed, 08 Oct 2008 14:19:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/10/08/63503.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/63503.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/10/08/63503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/63503.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/63503.html</trackback:ping><description><![CDATA[<p><strong>vc6中如何安装?</strong><br>一种方式是安装.net platform sdk,里面就会包含GDI+的相关库文件和头文件<br>若是不想为了GDI+就安装.NET PLATFORM SDK,那就可以下载单独的库文件和头文件,<br>下载地址:http://www.codersource.net/samples/mfcgdiplus.zip下载后,将文件解<br>压缩到某个目录,然后将VC的include和lib目录分别指向刚才的目录中的lib和include</p>
<form id=Form1 name=Form1 action=http://www.cppblog.com/54180.html method=post _initialAction="54180.html">
    <div id=main>
    <div class=post>
    <div class=postText>首先在stdafx.h或者其他头文件里面加上以下代码，以包含GDI+的头文件和lib文件：<br>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gdiplus.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> Gdiplus;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma comment(lib, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">gdiplus.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
    <br>然后在CWinApp继承下来的应用程序类里面声明两个变量：<br>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>GdiplusStartupInput gdiplusStartupInput;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>ULONG_PTR gdiplusToken;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
    <br>在初始化函数InitInstance()里面加入：<br>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">GdiplusStartup(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">gdiplusToken, </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">gdiplusStartupInput, NULL);</span></div>
    <br>到这里，GDI+的初始化工作已经完成，可以在应用程序当中使用GDI+了！<br><br>在退出应用程序之前，还需要关闭GDI+，你可以在CWinApp::ExitInstance()当中加入：<br>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">GdiplusShutdown(gdiplusToken);</span></div>
    </div>
    </div>
    </div>
</form>
<img src ="http://www.cppblog.com/woaidongmao/aggbug/63503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-10-08 22:19 <a href="http://www.cppblog.com/woaidongmao/archive/2008/10/08/63503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FormatMessage的用法</title><link>http://www.cppblog.com/woaidongmao/archive/2008/07/11/55879.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 11 Jul 2008 03:43:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/07/11/55879.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/55879.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/07/11/55879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/55879.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/55879.html</trackback:ping><description><![CDATA[<div class="post"> <div class="postText">根据一个错误码返回一个错误讯息<br><br><span style="color: #2000ff">DWORD FormatMessage(</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; DWORD dwFlags,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; LPCVOID lpSource,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; DWORD dwMessageId,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; DWORD dwLanguageId,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; LPTSTR lpBuffer,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; DWORD nSize,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; va_list* Arguments</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; );</span><br><br><span style="font-weight: bold">dwFlags:</span><br># FORMAT_MESSAGE_ALLOCATE_BUFFER // 此函数会分配内存以包含描述字串。<br># FORMAT_MESSAGE_FROM_SYSTEM,&nbsp; // 在系统的id映射表中寻找描述字串<br># FORMAT_MESSAGE_FROM_HMODULE&nbsp; // 在其他资源模块中寻找描述字串<br># FORMAT_MESSAGE_FROM_STRING&nbsp;&nbsp; // 消息ID是个字串，不是个DWORD<br>通常为：FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM<br><br><span style="font-weight: bold">lpSource:</span><br># 指定了FORMAT_MESSAGE_FROM_HMODULE的话，此参数表示模块的HANDLE<br># 指定了FORMAT_MESSAGE_FROM_STRING的话，此参数表示id字串<br>通常为：NULL<br><br><span style="font-weight: bold">dwMessageId:</span><br>消息ID;如果指定FORMAT_MESSAGE_FROM_STRING，将被忽略。<br><br style="font-weight: bold"><span style="font-weight: bold">dwLanguageId:</span><br>消息描述所用的语言<br>通常为：0表示自动选择<br><br><span style="font-weight: bold">lpBuffer:</span><br>#如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER，则为自己提供的缓冲区<br>#否则为系统LocalAlloc分配，需要被用户LocalFree<br><br><span style="font-weight: bold">nSize:</span><br>#如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER，则为自己提供的缓冲区大小<br>#否则为系统LocalAlloc分配之最小缓冲区大小<br><br><span style="font-weight: bold">Arguments:</span><br>通常不使用 <br><br>下面是个例子：<br><br><span style="color: #2000ff">TCHAR* buffer;</span><br style="color: #2000ff"><span style="color: #2000ff">DWORD error = ERROR_DS_OBJ_STRING_NAME_EXISTS;</span><br style="color: #2000ff"><span style="color: #2000ff">::FormatMessage(</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; NULL,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; error,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; 0,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; ( LPTSTR )&amp;buffer,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; 0,</span><br style="color: #2000ff"><span style="color: #2000ff">&nbsp;&nbsp;&nbsp; NULL );</span><br style="color: #2000ff"><span style="color: #2000ff">::MessageBox( NULL, buffer, NULL, 0 );</span><br style="color: #2000ff"><span style="color: #2000ff">LocalFree( buffer );&nbsp; </span><br>=======================================================================================</div> <p>FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,<br>&nbsp; NULL,lVal,NULL,(LPTSTR)&amp;hLocal,0,NULL); <br>第一个参数是标志,告诉这个FormatMessage函数,我想要的特点.<br>第三个参数是DWORD(unsigned long)类型<br>第五个参数是LPTSTR(这个类型即可用与ANSI,也克用与Unicode).用来接收与MessageID 对应的Description. <p>注意:hLocal是HLOCAL类型也就是HANDLE类型,需要将他转换到LPTSTR.<br>第六个参数是这个buffer的大小,由于设置了FORMAT_MESSAGE_ALLOCATE_BUFFER那么他就可以置0了 <p>例如： <p>&nbsp;&nbsp; char szError[256];<br>&nbsp;&nbsp; DWORD dwError = GetLastError();<br>&nbsp;&nbsp; FormatMessage(<br>&nbsp;&nbsp;&nbsp; FORMAT_MESSAGE_FROM_SYSTEM,<br>&nbsp;&nbsp;&nbsp; NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 0,<br>&nbsp;&nbsp;&nbsp; 0,<br>&nbsp;&nbsp;&nbsp; szError,<br>&nbsp;&nbsp;&nbsp; sizeof(szError),<br>&nbsp;&nbsp;&nbsp; NULL);<br>&nbsp;&nbsp; AfxMessageBox(szError); <p>======================================================================================= <p>FormatMessage功能就是将GetLastError得到的错误信息（这个错误信息是数字代号）转化成字符串信息的函数<br>FormatMessage()<br>函数FormatMessage声明如下：<br>WINBASEAPI<br>DWORD<br>WINAPI<br>FormatMessageA(<br>&nbsp;&nbsp;&nbsp; DWORD dwFlags,//错误信息类型标志<br>&nbsp;&nbsp;&nbsp; LPCVOID lpSource,//指定本地信息定义 其依赖于第一个参数的设置<br>&nbsp;&nbsp;&nbsp; DWORD dwMessageId,//指定被请求的消息标示,如果dwFlags设置为FORMAT_MESSAGE_FROM_STRING 这个参数将被忽略<br>&nbsp;&nbsp;&nbsp; DWORD dwLanguageId,//指定被请求的消息的语言标示<br>&nbsp;&nbsp;&nbsp; LPSTR lpBuffer,//用来保存格式话后的消息字符串的地址<br>&nbsp;&nbsp;&nbsp; DWORD nSize,//如果第一个参数为指定FORMAT_MESSAGE_ALLOCATE_BUFFER 这个参数就是字符串的最大长度<br>&nbsp;&nbsp;&nbsp; va_list *Arguments<br>&nbsp;&nbsp;&nbsp; );<br>WINBASEAPI<br>DWORD<br>WINAPI<br>FormatMessageW(<br>&nbsp;&nbsp;&nbsp; DWORD dwFlags,<br>&nbsp;&nbsp;&nbsp; LPCVOID lpSource,<br>&nbsp;&nbsp;&nbsp; DWORD dwMessageId,<br>&nbsp;&nbsp;&nbsp; DWORD dwLanguageId,<br>&nbsp;&nbsp;&nbsp; LPWSTR lpBuffer,<br>&nbsp;&nbsp;&nbsp; DWORD nSize,<br>&nbsp;&nbsp;&nbsp; va_list *Arguments<br>&nbsp;&nbsp;&nbsp; );<br>#ifdef UNICODE<br>#define FormatMessage FormatMessageW<br>#else<br>#define FormatMessage FormatMessageA<br>#endif // !UNICODE<br>调用函数的例子如下：<br>#001 //系统错误信息提示。<br>#002&nbsp; //蔡军生 2007/11/28 QQ:9073204 深圳<br>#003&nbsp; void TestErrorInfo(void)<br>#004&nbsp; {<br>#005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进行出错。<br>#006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!CreateDirectory(_T("c:\\"),0))<br>#007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>#008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCHAR szBuf[128]; <br>#009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPVOID lpMsgBuf;<br>#010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dw = GetLastError(); <br>#011 <br>#012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormatMessage(<br>#013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FORMAT_MESSAGE_ALLOCATE_BUFFER | <br>#014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FORMAT_MESSAGE_FROM_SYSTEM,<br>#015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL,<br>#016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw,<br>#017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),<br>#018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LPTSTR) &amp;lpMsgBuf,<br>#019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, NULL );<br>#020 <br>#021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wsprintf(szBuf, <br>#022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _T("%s 出错信息 (出错码＝%d): %s"), <br>#023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _T("CreateDirectory"), dw, lpMsgBuf); <br>#024 <br>#025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LocalFree(lpMsgBuf);<br>#026 <br>#027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出提示。<br>#028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputDebugString(szBuf);<br>#029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>#030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>#031&nbsp; }<br>调用后输出下面的提示信息：<br>CreateDirectory 出错信息 (出错码＝5): 拒绝访问。</p></div><img src ="http://www.cppblog.com/woaidongmao/aggbug/55879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-07-11 11:43 <a href="http://www.cppblog.com/woaidongmao/archive/2008/07/11/55879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在VC.NET中调用 WebService</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/27/51288.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Tue, 27 May 2008 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/27/51288.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/51288.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/27/51288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/51288.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/51288.html</trackback:ping><description><![CDATA[<p></p> <p>一、使用Visual Studio.NET调用WebService  <p>　　很多次看到网友讨论VC中调用WebService的问题，其实在Visual Studio.Net（下称VS.NET）及其以后的版本中调用WebService已经变得相当简单。你所要做的只是“找到 WebService的发布地址”，然后将其引用添加到VC项目中即可。接下来VS.NET帮你生成的代理类，会帮你搞定一大堆的麻烦事，包括：网络调用、数据传递等等；什么SOAP啊、网络啊，你都可以不管。 <p>二、托管还是非托管？ <p>　　对于VS.NET生成的C++代理类，很多人都认为必须使用托管代码，其实事实并非这样。VS.NET可以生成托管和非托管两个版本的代理类，至于要不要使用托管，那是你自己的选择。<br>　　具体地说，对于使用托管的程序，VS.NET会生成基于托管类库的代理类；你可以在生成的代码中找到类的行：public System::Web::Services::Protocols::SoapHttpClientProtocol。对于不使用托管的程序，VS.NET会生成基于ATL的代码；你可以在生成的代码中找到类似的行：template &lt;typename TClient = CSoapSocketClientT&lt;&gt; &gt;。<br>我想，如果不是确实需要的话，大部份人会选择非托管的方式，因为这起码可以让我们的程序脱离.Net Framework运行。 <p>三、动态设置WebService调用地址 <p>　　这也是网上讨论得比较多的一个问题，因为WebSercie的地址不可能一成不变，特别是在开发调试的时候。幸运的是，在两种版本的代理类中，都可以非常方便地在运行时设置WebService的地址。（具体做法参见实例） <p>四、程序示例（非托管） <p>　　由于已经有文章详细讲述了 <a href="http://www.vckbase.com/document/viewdoc/?id=1641">VC托管程序中调用 WebService 的过程</a>，因此以下示例只描述非托管VC程中调用WebService的方法。 <p>１、新建一个非托管的MFC应用程序，注意是非托管的，如下图（图１） <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService01.JPG"><br>图1、建立非托管程序<br>完成后，查看VC项目属性，可以确认不使用托管 <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService02.JPG"><br>图2、查看是否使用托管 <p>2、添加WebService引用<br>在VC项目名称上，单击右键，选择“添加Web引用”。如下图（图3）： <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService03.JPG"><br>图3、添加Web引用 <p>在弹出的“添加Web引用”对话框中，填入WebSercie的引用地址， 然后点击“转到按钮”，可以看到WebService的提示页面。 <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService04.JPG"><br>图4、“添加Web引用”对话框 <p>　　点击页面上的“Service Description” 链接可以看到具体的WebMethod的声明。我的这个WebService示例中，只定义了一个Web方法。该方法接受一个字符串作为用户名，并返回一个字符串作为对用户的问候语。如下图所示： <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService05.JPG"><br>图5、查看WebMethod原型 <p>　　在上图中填入“Web引用名”，然后点击“添加引用按钮”。（在非托管版的代理类中，这里填的“Web引用名”将没有任保实质性的作用，所以随便填入一个名字即可。但是在托管版的代理类中，“Web引用名”将成为代量类的命名空间） 。接下来，VS.NET将生成一个WebService的代理类，生成完后，会自动打开WebService.h头文件： <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService06.JPG"> <p>WebService.h并不是代理类，这个头文件其实是用于包含所有的代理类的头文件，你可以多添加几个“Web引用”试试。 <p>3、浏览代理类<br>　　我们不妨浏览一下生成的代理类，做到有个基本的了解。切换到“类视图”，可以看到一个“Debug”命名空间，全部展开，可以看到生成的代理类的全部成员： <p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService07.JPG"><br>图6、浏览生成的代码 <p>4、调用示例<br>首先包含头文件，并打开命名空间 <pre>#include "WebService.h"
using namespace Debug;	// 这个命名空间是自动生成的，与Web服务的实现有关          </pre>以下是调用代码 <pre>void CInvokeDemoDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码

	// 因为生成的代码是基于ATL的，所以要初始化COM
	CoInitialize(NULL);

	HRESULT hr = S_OK;
	CComBSTR hiResult;
	CComBSTR username = "vckBase";

	CDebug* debug = new CDebug;	// 代理对象

	// 可以调用SetUrl动态设置Web服务地址
	// debug-&gt;SetUrl("http://blog.eray.cn/debug.asmx");

	hr = debug-&gt;Hi(username,&amp;hiResult); //注意，返回值是以指针形式反回的

	if(FAILED(hr))
	{
		MessageBox("调用失败");
	}
	else
	{
		CString str(hiResult);
		MessageBox(str,"调用结果");
	}

	delete debug;
	CoUninitialize();
}          </pre>　　由于生成的代理类是基于ATL的，所以在调用前要初始化COM调用。在上述的代码中就使用了CComBSTR而没有直接使用BSTR，因为CComBSTR属于智能类型，可以自己管理内存分配，比较方便。 上述代码中有一行被注释的代码调用了SetUrl来设置WebService的调用地址。在实际的项目中，可以将这个地址写在配置文件中。<br>5、运行结果<br>来，看一下吧～ 
<p><img src="http://www.vckbase.com/document/journal/vckbase49/images/unmanagedWebService08.JPG">
<p>五、结束语
<p>　　通过以上示例可以看出，其实在VS.NET中实现非托管的C++调用WebService是相当简单的。当然，在实际的使用过程中，为了程序的徤壮，还需要更多的代码逻辑，比如错误处理等等。</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/51288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-27 16:21 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/27/51288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用VC进行COM编程所必须掌握的理论知识</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49459.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 10 May 2008 12:54:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49459.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49459.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49459.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、为什么要用COM 　　软件工程发展到今天，从一开始的结构化编程，到面向对象编程，再到现在的COM编程，目标只有一个，就是希望软件能象积方块一样是累起来的，是组装起来的，而不是一点点编出来的。结构化编程是函数块的形式，通过把一个软件划分成许多模块，每个模块完成各自不同的功能，尽量做到高内聚低藕合，这已经是一个很好的开始，我们可以把不同的模块分给不同的人去做，然后合到一块，这已经有了组装的概念了。...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2008/05/10/49459.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/49459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-10 20:54 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/10/49459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过异步程序调用(APC)实现的定时功能</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49329.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 09 May 2008 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49329.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49329.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49329.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49329.html</trackback:ping><description><![CDATA[<div id="csdnblog_allwrap"> <form language="javascript" id="Form1" name="Form1" action="http://blog.csdn.net/1764733.aspx" method="post"> <div id="csdnblog_midwrap"> <div id="csdnblog_content"> <div class="gutter"> <div class="default_contents"> <div class="user_article"> <div class="blogstory"> <div style="line-height: 18pt" align="left"><span style="letter-spacing: 0.75pt"><font size="2">定时器是一个在特定时间或者规则间隔被激发的内核对象。结合定时器的异步程序调用可以允许回调函数在任何定时器被激发的时候执行。本文的例子代码显示了如何实现。</font></span><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　使用本定时器时，你需要把常量</span><span style="letter-spacing: 0.75pt">_WIN32_WINNT</span><span style="letter-spacing: 0.75pt">定义为</span><span style="letter-spacing: 0.75pt">0x0400</span><span style="letter-spacing: 0.75pt">，并且此常量应该在包之前定义，以确保声明合适的定时器原型函数。</span></font><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　通过调用</span><span style="letter-spacing: 0.75pt">CreateWaitableTimer()</span><span style="letter-spacing: 0.75pt">可以创建一个定时器，此函数返回一个指向内核对象的句柄。若定时器已经存在，你可以通过使用</span><span style="letter-spacing: 0.75pt">OpenWaitableTimer()</span><span style="letter-spacing: 0.75pt">获得一个进程相关的句柄。无论是通过</span><span style="letter-spacing: 0.75pt">CreateWaitableTimer() </span><span style="letter-spacing: 0.75pt">还是通过</span><span style="letter-spacing: 0.75pt">OpenWaitableTimer()</span><span style="letter-spacing: 0.75pt">获得的句柄，在不需要定</span><span style="letter-spacing: 0.75pt">时器时必须释放，方法是使用函数</span><span style="letter-spacing: 0.75pt">CloseHandle()</span><span style="letter-spacing: 0.75pt">。</span></font><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　定时的时间通过调用</span><span style="letter-spacing: 0.75pt">SetWaitableTimer()</span><span style="letter-spacing: 0.75pt">来设置，可以设置为一个特定的时刻（如</span><span style="letter-spacing: 0.75pt">December 16, 1999 at 9:45 PM</span><span style="letter-spacing: 0.75pt">）或者一个相对的时间（如从现在起每五分钟）。函数</span><span style="letter-spacing: 0.75pt">SetWaitableTime()</span><span style="letter-spacing: 0.75pt">定时的时间参数要求</span><span style="letter-spacing: 0.75pt">LARGE_INTEGER</span><span style="letter-spacing: 0.75pt">类型。这个值应该符合在结构体</span><span style="letter-spacing: 0.75pt">FILETIME</span><span style="letter-spacing: 0.75pt">中描述的格式。如果值是正的，代表一个特定的时刻。如果值是负的，代表以</span><span style="letter-spacing: 0.75pt">100</span><span style="letter-spacing: 0.75pt">纳秒为单位的相对时间。后面的示例代码中使用的是相对时间。在调用</span><span style="letter-spacing: 0.75pt">SetWaitableTimer()</span><span style="letter-spacing: 0.75pt">函数后，定时器将在每</span><span style="letter-spacing: 0.75pt">5</span><span style="letter-spacing: 0.75pt">秒被激发一次。</span></font><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　你也可以将定时器设置为周期性的自我激发，方法是向</span><span style="letter-spacing: 0.75pt">SetWaitableTimer()</span><span style="letter-spacing: 0.75pt">的第三个参数传递一个周期参数（以毫秒为单位）。在</span><span style="letter-spacing: 0.75pt">CreateWaitableTimer()</span><span style="letter-spacing: 0.75pt">的第二个参数传递</span><span style="letter-spacing: 0.75pt">FALSE</span><span style="letter-spacing: 0.75pt">可以产生一个自动归零的定时器。本例设置周期为两秒的定时器。</span></font><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　当设置了定时器之后，你就可以将</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">与其结合起来。这里把</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">函数称作完全例程。完全例程的地址作为</span><span style="letter-spacing: 0.75pt">SetWaitableTimer()</span><span style="letter-spacing: 0.75pt">的第四个参数。第五个参数是一个空类型的指针，你可以使用它来传递完全例程的参数。</span></font><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　在所有的</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">中，要执行一个完全例程则线程必须处于监听状态。完全例程将总是被调用</span><span style="letter-spacing: 0.75pt">SetWaitableTimer()</span><span style="letter-spacing: 0.75pt">的相同的线程执行，所以此线程必须将必须其自身置于监听状态。可以调用下面的任何一个监听函数来完成监听状态的设置：</span></font></div> <ul type="disc"> <li style="line-height: 18pt; text-align: left"><font size="2"><span style="letter-spacing: 0.75pt">SleepEx()</span><span style="letter-spacing: 0.75pt">；</span></font>  <li style="line-height: 18pt; text-align: left"><font size="2"><span style="letter-spacing: 0.75pt">WaitForSingleObjectEx()</span><span style="letter-spacing: 0.75pt">；</span></font>  <li style="line-height: 18pt; text-align: left"><font size="2"><span style="letter-spacing: 0.75pt">WaitForMultipleObjectsEx()</span><span style="letter-spacing: 0.75pt">；</span></font>  <li style="line-height: 18pt; text-align: left"><font size="2"><span style="letter-spacing: 0.75pt">MsgWaitForMultipleObjectsEx()</span><span style="letter-spacing: 0.75pt">；</span></font>  <li style="line-height: 18pt; text-align: left"><font size="2"><span style="letter-spacing: 0.75pt">SignalObjectAndWait()</span><span style="letter-spacing: 0.75pt">；</span></font> </li></ul> <div style="line-height: 18pt" align="left"><font size="2"><span style="letter-spacing: 0.75pt">　　任何一个线程都有一个</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列。在调用上面的任何一个函数时，如果线程的</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中有实体，则此线程不会进入休眠状态，取而代之要做的是将实体从</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中取出，然后调用相应的完全例程。</span></font><span style="letter-spacing: 0.75pt"><br></span><font size="2"><span style="letter-spacing: 0.75pt">　　如果在</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中不存在实体，那么线程将会被挂起，直至等待条件满足为止。满足等待条件的有：一个实体加入到</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中，超时，激活句柄等，以及在调用</span><span style="letter-spacing: 0.75pt">MsgWaitForMultipleObjectsEx()</span><span style="letter-spacing: 0.75pt">情况下，一个消息进入到线程的一个消息队列中。若等待条件满足的是</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中的一个实体，那么线程会被激活，并且执行完全例程，这种情况下的函数的返回值是</span><span style="letter-spacing: 0.75pt"> WAIT_IO_COMPLETION.</span></font></div> <div style="line-height: 18pt" align="left"><span style="letter-spacing: 0.75pt"><font size="2">【重要提示】</font></span></div> <div style="line-height: 18pt" align="left"><font size="2"><span style="letter-spacing: 0.75pt">1</span><span style="letter-spacing: 0.75pt">、在执行完一个完全例程之后，系统会检查在</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">中剩下的实体以处理。一个监视函数仅仅在处理完所有</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">实体后才返回。因此，如果实体加入到</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列的速度比处理的更快的话，则调用这些函数可能永远也不能返回。特别当定时等待的时间比起要求执行完全例程的时间更短的话，这种情况更容易发生。</span></font><font size="2"><span style="letter-spacing: 0.75pt"> <br>2</span><span style="letter-spacing: 0.75pt">、当使用</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">来实现定时器时，设置定时的线程不应该等待定时器的句柄。如果等待定时器的句柄的话，则唤起这个线程的原因是定时器被激活，而不是有实体加入到</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中。这时线程将不再处于监听状态，所以完全例程也不会被调用。在本例中，</span><span style="letter-spacing: 0.75pt">Sleep()</span><span style="letter-spacing: 0.75pt">被用于将线程置于监听状态。在定时器激活后，如果有实体被加入到此线程的</span><span style="letter-spacing: 0.75pt">APC</span><span style="letter-spacing: 0.75pt">队列中时，</span><span style="letter-spacing: 0.75pt">Sleep()</span><span style="letter-spacing: 0.75pt">就会唤醒此线程。</span></font></div> <div style="line-height: 18pt" align="left"><span style="letter-spacing: 0.75pt"><font size="2">【示例代码】</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">#define _WIN32_WINNT 0x0500</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">#include &lt;windows.h&gt;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">#include &lt;stdio.h&gt;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">#define _SECOND 10000000</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">typedef struct _MYDATA {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; TCHAR *szText;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; DWORD dwValue;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">} MYDATA;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">VOID CALLBACK TimerAPCProc(</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; LPVOID lpArg,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Data value</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; DWORD dwTimerLowValue,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Timer low value</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; DWORD dwTimerHighValue )&nbsp;&nbsp;&nbsp; // Timer high value</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">{</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; MYDATA *pMyData = (MYDATA *)lpArg;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; printf( "Message: %s\nValue: %d\n\n", pMyData-&gt;szText,</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pMyData-&gt;dwValue );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; MessageBeep(0);</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">}</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">void main( void ) </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">{</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hTimer;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bSuccess;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; __int64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qwDueTime;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; LARGE_INTEGER&nbsp;&nbsp; liDueTime;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; MYDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyData;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; TCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szError[255];</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; MyData.szText = "This is my data.";</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; MyData.dwValue = 100;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; if ( hTimer = CreateWaitableTimer(</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Default security attributes</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create auto-reset timer</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "MyTimer" ) )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Name of waitable timer</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __try </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create an integer that will be used to signal the timer </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 5 seconds from now.</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qwDueTime = -5 * _SECOND;</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Copy the relative time into a LARGE_INTEGER.</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liDueTime.LowPart = (DWORD) ( qwDueTime &amp; 0xFFFFFFFF );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liDueTime.HighPart = (LONG) ( qwDueTime &gt;&gt; 32 );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bSuccess = SetWaitableTimer(</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hTimer,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Handle to the timer object</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;liDueTime,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // When timer will become signaled</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Periodic timer interval of 2 seconds</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimerAPCProc,&nbsp;&nbsp;&nbsp;&nbsp; // Completion routine</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;MyData,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Argument to the completion routine</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FALSE );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Do not restore a suspended system</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( bSuccess ) </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ( ; MyData.dwValue &lt; 1000; MyData.dwValue += 100 ) </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SleepEx(</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INFINITE,&nbsp;&nbsp;&nbsp;&nbsp; // Wait forever</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRUE );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Put thread in an alertable state</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wsprintf( szError, "SetWaitableTimer failed with Error \</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %d.", GetLastError() );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><font size="2">&nbsp;</font></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __finally </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle( hTimer );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; } </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; else </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; {</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wsprintf( szError, "CreateWaitableTimer failed with Error %d.", </font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetLastError() );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">&nbsp;&nbsp; }</font></span></div> <div style="line-height: 18pt; text-align: left" align="left"><span style="font-size: 12pt; letter-spacing: 0.75pt"><font size="2">}</font></span></div> <div><font size="2"><span style="letter-spacing: 0.75pt">原文参考：</span><span style="letter-spacing: 0.75pt"><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/asynchronous_procedure_calls.asp" target="_blank"><span style="color: #000088; text-decoration: none; text-underline: none">Using a Waitable Timer with an Asynchronous Procedure Call</span></a></span></font></div></div></div></div></div></div></div></form></div><img src ="http://www.cppblog.com/woaidongmao/aggbug/49329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-09 17:20 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/09/49329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TerminateThread的注意</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49315.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 09 May 2008 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49315.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49315.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49315.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49315.html</trackback:ping><description><![CDATA[<p>是</p> <p>TerminateThread(m_pDeadLockCheckThread-&gt;m_hThread, 0);</p> <p>而不是</p> <p>TerminateThread(m_pDeadLockCheckThread, 0);</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/49315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-09 15:52 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/09/49315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SendMessage, WM_TIMER的一个细节</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49305.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 09 May 2008 06:52:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49305.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49305.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/09/49305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49305.html</trackback:ping><description><![CDATA[<p>1、SendMessage里面对应的函数，真正的执行线程是界面线程，而不是调用SendMessage线程，调用者线程只是在等待SendMessage返回（界面线程执行函数完成），所以注意死锁；</p> <p>2、所有WM_TIMER的执行，都是用界面线程在完成的。</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/49305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-09 14:52 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/09/49305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Menu 操作</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/06/49010.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Tue, 06 May 2008 08:03:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/06/49010.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49010.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/06/49010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49010.html</trackback:ping><description><![CDATA[<p><strong>PopMenu</strong></p> <p>void CTransferAgentAccountDlg::OnRclickListAgentAc(NMHDR* pNMHDR, LRESULT* pResult) <br>{<br>&nbsp;&nbsp;&nbsp; POSITION pos;<br>&nbsp;&nbsp;&nbsp; CMenu popmenu, *psubMenu = NULL;<br>&nbsp;&nbsp;&nbsp; CPoint oPoint;<br>&nbsp;&nbsp;&nbsp; pos = m_ListAgent.GetFirstSelectedItemPosition();<br>&nbsp;&nbsp;&nbsp; if(!pos)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; GetCursorPos( &amp;oPoint);<br>&nbsp;&nbsp;&nbsp; popmenu.LoadMenu(IDR_MENU_AGENT);<br>&nbsp;&nbsp;&nbsp; psubMenu = popmenu.GetSubMenu(0);<br>&nbsp;&nbsp;&nbsp; psubMenu-&gt;TrackPopupMenu(TPM_LEFTALIGN, oPoint.x, oPoint.y, this);<br>&nbsp;&nbsp;&nbsp; *pResult = 0;<br>} <p><strong>delete menu</strong> <p>psubMenu-&gt;DeleteMenu(ID_MEMU_FIFO_IB_ADD, MF_GRAYED);<br>psubMenu-&gt;DeleteMenu(ID_MEMU_FIFO_IB_DELETE, MF_GRAYED);<br>psubMenu-&gt;DeleteMenu(ID_MEMU_FIFO_IB_EDIT, MF_GRAYED); <p>&nbsp;</p> <p><strong>enable menu</strong></p> <p>psubMenu-&gt;EnableMenuItem(ID_MEMU_FIFO_IB_VIEW, MF_GRAYED);</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/49010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-06 16:03 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/06/49010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CListCtrl Checkbox被点击消息捕获</title><link>http://www.cppblog.com/woaidongmao/archive/2008/01/17/41316.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Thu, 17 Jan 2008 02:12:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/01/17/41316.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/41316.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/01/17/41316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/41316.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/41316.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2008/01/17/41316.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/41316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-01-17 10:12 <a href="http://www.cppblog.com/woaidongmao/archive/2008/01/17/41316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>