﻿<?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++博客-面对现实，超越自己-随笔分类-MFC</title><link>http://www.cppblog.com/wanghaiguang/category/19357.html</link><description>逆水行舟，不进则退</description><language>zh-cn</language><lastBuildDate>Fri, 10 Oct 2014 06:29:01 GMT</lastBuildDate><pubDate>Fri, 10 Oct 2014 06:29:01 GMT</pubDate><ttl>60</ttl><item><title>MFC wcslen获取中文长度</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 10 Oct 2014 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208529.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208529.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208529.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">不知道大家有没有我这种体验.大家先看看下面这段代码:</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">int</span>&nbsp;fp=_wopen(L"Hello.dat",O_BINARY&nbsp;|&nbsp;O_CREAT&nbsp;|&nbsp;O_TRUNC&nbsp;|&nbsp;O_RDWR);<br /><span style="color: #0000FF; ">if</span>(fp==-1)&nbsp;<span style="color: #0000FF; ">return</span>;<br />write(fp,L"123中国人",wcslen(L"123中国人"));<br />close(fp);</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br />上面这段代码不知道大家看出什么BUG来了.如果大家看不出毛病也不足为怪,因为这是我们的习惯导致了我们的错误产生.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">先让我来分析一下write吧.下面是write的原型:</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">int write( int handle, const void *buffer, unsigned int count );</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">参数:</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">handle&nbsp; &nbsp;已打开或已创建的文件句柄</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">buffer&nbsp; &nbsp;&nbsp;&nbsp;待写入的数据</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">count&nbsp; &nbsp;&nbsp;&nbsp;待写入的数据大小</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">现在分析为什么上面的那代码有bug,其实主要问题就在一个buffer,和count.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">如果我们写入一个Ansi字符串,上面的代码改成相应的形式确实没有错.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">但如果是写入一个宽字符串,那么上面的代码就不严格.原因就在于count.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">我们首先看一下strlen和</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">,如果使用strlen,一般情况下,我们直接作为字符串的长度,</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">而使用</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">,你会发现,得出的不是字符串的长度而是字符的个数.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">这就是问题的所在.一般情况下.char的长度是1,这是用sizeof(char)运算出来的结果.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">len=strlen(str)*sizeof(char);而我们一般情况下,都只用strlen(str)来等价,这就是平时的习惯.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">正是由于这个习惯所引来的问题,这个习惯并不适用于宽字符串.因为</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(str)*sizeof(wchar_t)并不等于</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(strl).这就是习惯所引起的错误.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">说到这里我想大家都明白了.我在这里把这种习惯称之为不良习惯.所以大家以后在计算字符串长度的时候,千万不能简而简之,一定要len=strlen(str)*sizeof(char),len=</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(str)*sizeof(wchar_t).</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">不要再犯这种习惯性的低级错误.<br /><br /></span>本文转自：<a href="http://blog.csdn.net/aylixuan/article/details/6130820">http://blog.csdn.net/aylixuan/article/details/6130820</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-10-10 11:53 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC设置鼠标滑轮响应</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/05/08/206864.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 08 May 2014 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/05/08/206864.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/206864.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/05/08/206864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/206864.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/206864.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;">鼠标滚轮消息似乎只会发给当前获得焦点的窗口，所以当子窗体没有焦点时是收不到滚轮消息的，收到消息的可能是父窗口。</p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;">解决：添加鼠标单击相应函数，在响应函数中添加SetFoucs();一句，这样强制设置焦点给子窗口，然后再滚动鼠标滚轮，子窗体就能收到滚轮消息了。</p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;">问题继续，当子窗口上有其他可以获得焦点的控件时，比如下拉列表，这时在窗口函数中执行SetFoucs();焦点会自动跑到那个控件上去，子窗口同样收不到滚轮消息。</p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;">解决：在执行SetFoucs();语句前先Disable子窗体上的所有控件，然后执行SetFoucs();，再Enanle所有控件，这时焦点才会在子窗口上。<br /><br />本文转自：<a href="http://blog.csdn.net/vanship/article/details/4119246" style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21.111112594604492px;">http://blog.csdn.net/vanship/article/details/4119246</a></p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/206864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-05-08 16:33 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/05/08/206864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC 多文档界面禁用关闭、最大化按钮</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/03/25/206331.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 25 Mar 2014 10:37:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/03/25/206331.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/206331.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/03/25/206331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/206331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/206331.html</trackback:ping><description><![CDATA[禁用关闭按钮<br /><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #494949; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px;">在 WM_CREATE 消息处理程序中的 MDI 子框架窗口 （CMDIChildWnd 派生类） 禁用在关闭按钮使用下面的代码：</p><div style="margin: 0px; background-color: #ffffff; color: #494949; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px;"><div style="margin: 0px;"><code style="margin: 0px; padding: 0px;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">CMenu&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pSysMenu&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;GetSystemMenu(FALSE);&nbsp;<br />ASSERT(pSysMenu&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;NULL);&nbsp;<br />VERIFY(pSysMenu</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">RemoveMenu(SC_CLOSE,&nbsp;MF_BYCOMMAND));</span></div><br />此时的最大、最小化、<span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; white-space: normal;">还原按钮也消失不见。通过在</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px;">PreCreateWindow函数中修改来实现显示</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px;">最大、最小化、</span><span style="font-size: 14px; line-height: 22px; font-family: Arial, Helvetica, sans-serif; white-space: normal;">还原按钮。</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px;"><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">cs.style&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;WS_MINIMIZEBOX</span><span style="color: #000000; ">|</span><span style="color: #000000;">WS_SIZEBOX;&nbsp;</span></div><br /></pre></code></div></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/206331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-03-25 18:37 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/03/25/206331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC 子对话框与父视图传递自定义消息</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/03/07/206090.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 07 Mar 2014 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/03/07/206090.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/206090.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/03/07/206090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/206090.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/206090.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14pt; font-family: 宋体;">视图类调用非模态对话时，如何销毁分配的内存</span><span style="font-family: 宋体;"><br /> </span><span style="font-family: 宋体; font-size: 14pt;"><strong><br />简要步骤：</strong></span><span style="font-family: 宋体;"><br /></span><span style="font-family: 宋体; font-size: 14pt;"> 1<span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">视图类在调用非模态对话框时，将自身的指针传递给非模态对话框。</span></span><span style="font-family: 宋体;"><br /></span><span style="font-family: 宋体; font-size: 14pt;"> 2<span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">当非模态对话框结束时，向视图类发送自定义消息，由自定义消息处理函数来释放内存。</span></span><span style="font-family: 宋体;"><br /> </span><span style="font-family: 宋体; font-size: 14pt;"><strong><br />具体代码步骤：</strong></span><span style="font-family: 宋体;"><br /></span><span style="font-family: 宋体; font-size: 14pt;"> 1<span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">定义自定义消息&nbsp;</span></span>&nbsp;<span style="font-size:14.0pt; font-family:宋体; color:#362E2B;background:white">#define WM_RELEASEPLAYSOUNDDC</span>&nbsp;<span style="font-size:14.0pt;font-family:宋体;color:#362E2B;background:white">(WM_USER+1001)</span><span style="font-family:宋体; color:#362E2B;background:white"><br /></span><span style="font-family: 宋体; color: #362e2b; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;"> 2</span><span style="font-size: 14pt; font-family: 宋体;">、</span><span style="font-size: 14pt; font-family: 宋体;">修改非模态对话框类的构造函数，便于将视图指针传递进去。</span><span style="font-family: 宋体;"><br /> <br /> </span><span style="font-family: 宋体; font-size: 12pt;">非模态对话框.h文件中</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;CTestDialog&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;CDialog<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_DYNAMIC(CPlaySound)<br /><br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">CTestDialog&nbsp;(CWnd*&nbsp;pParent&nbsp;=&nbsp;NULL);&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;standard&nbsp;constructor</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CTestDialog&nbsp;(CView*&nbsp;pParent);&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;standard&nbsp;constructor</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;~CTestDialog&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;CView&nbsp;*pView;<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Dialog&nbsp;Data</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">enum</span>&nbsp;{&nbsp;IDD&nbsp;=&nbsp;IDD_TEST_DIALOG&nbsp;};<br /><br /><span style="color: #0000FF; ">protected</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;DoDataExchange(CDataExchange*&nbsp;pDX);&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;DDX/DDV&nbsp;support</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;BOOL&nbsp;OnInitDialog();<br />&nbsp;&nbsp;&nbsp;&nbsp;afx_msg&nbsp;LRESULT&nbsp;OnNcHitTest(CPoint&nbsp;point);<br /><br />};</div><span style="font-size: 12pt;"><br />非模态对话框.cpp文件中</span><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->IMPLEMENT_DYNAMIC(CTestDialog,&nbsp;CDialog)<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">CTestDialog::CTestDialog(CWnd*&nbsp;pParent&nbsp;/*=NULL*/)</span><span style="color: #008000; "><br /></span>CTestDialog::CTestDialog(CView*&nbsp;pParent)<br />&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;CDialog(CTestDialog::IDD,&nbsp;pParent)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pView&nbsp;=&nbsp;pParent;<br />}</div><br /><span style="font-size: 14pt;">3、在非模态对话框结束的时候发送自定义消息</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;CTestDialog::OnBnClickedBtnClose()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;control&nbsp;notification&nbsp;handler&nbsp;code&nbsp;here</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;pView-&gt;PostMessage(WM_RELEASEPLAYSOUNDDC,&nbsp;0,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;OnOK();<br />}</div><br /><p><span style="font-size: 14pt; font-family: 宋体;">4</span><span style="font-size: 14pt; font-family: 宋体;">、在视图类</span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">.h</span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">文件中，增加定义：</span><span style="font-size: 11pt; font-family: 宋体;"><br /> </span><span style="font-size: 14pt; font-family: 宋体; color: red; background-color: white; background-position: initial initial; background-repeat: initial initial;"><strong>afx_msg LRESULT OnReleaseDialog(WPARAM wparam,LPARAM lparam);</strong><br /></span><span style="font-size: 11pt; font-family: 宋体;"><br /></span><span style="font-size: 14pt; font-family: 宋体;"> 5<span style="font-size: 14pt;">、在视图类</span></span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">.cpp</span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">文件中，增加</span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">消息映射部分：</span><span style="font-size: 11pt; font-family: 宋体;"><br /> </span><span style="font-size: 14pt; font-family: 宋体; color: red; background-color: white; background-position: initial initial; background-repeat: initial initial;"><strong>ON_MESSAGE(WM_DIALOGOK,OnDialogOk)</strong></span><span style="font-size: 14pt; font-family: 宋体; color: #362e2b; background-color: white; background-position: initial initial; background-repeat: initial initial;"><br /></span><span style="font-size: 11pt; font-family: 宋体;"><br /></span><span style="font-size: 14pt; font-family: 宋体;"> 6<span style="font-size: 14pt;">、在视图类</span></span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">.cpp</span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">文件中</span><span style="font-family: 宋体; color: #333333; background-color: white; font-size: 14pt; background-position: initial initial; background-repeat: initial initial;">定义消息处理函数的实现：</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->LRESULT&nbsp;CTestView::OnReleaseDialog(WPARAM&nbsp;wparam,LPARAM&nbsp;lparam)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(m_pPlaySound&nbsp;!=&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;m_pPlaySound;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pPlaySound&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/206090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-03-07 15:01 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/03/07/206090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC BMP文件转JPEG文件</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/01/09/205258.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 09 Jan 2014 06:30:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/01/09/205258.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/205258.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/01/09/205258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/205258.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/205258.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-family: 宋体; color: #000000; font-size: 12pt;">2.在你将要使用GDI+的工程中，完成初始化工作：<br /></span><span style="font-family: 宋体; color: #000000; font-size: 12pt;">在</span><span style="font-family: 宋体; color: #0000ff; font-size: 12pt;">StdAfx.h</span><span style="font-family: 宋体; color: #000000; font-size: 12pt;">中加入</span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;</span><span style="color: #ff00ff;">ULONG_PTR&nbsp;</span><span style="color: #0000ff;">unsigned&nbsp;long</span><span style="color: #000000; "><br /></span><span style="color: #0000ff;">#include&nbsp;</span><span style="color: #a31515;">&lt;</span><span style="color: #a31515;">Gdiplus.h</span><span style="color: #a31515;">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff;">Gdiplus;</span></div><p><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">3.在</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #0000ff;">CXApp</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">头文件中加入</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">ULONG_PTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000080;">m_gdiplusToken;</span></div><p>&nbsp;<span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">4.在 </span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #0000ff;">BOOL </span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #0000ff;">CXApp</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">::</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #a31515;">InitInstance</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">() 中添加</span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">GdiplusStartupInput&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000080;">m_gdiplusStartupInput;</span><span style="color: #000000; "><br /></span><span style="color: #a31515;">GdiplusStartup(</span><span style="color: #000000; ">&amp;</span><span style="color: #000080;">m_gdiplusToken</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000080;">m_gdiplusStartupInput</span><span style="color: #000000; ">,&nbsp;NULL);</span></div><p>&nbsp;<span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">5.在</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #0000ff;">int CXApp</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">::</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #a31515;">ExitInstance</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">()加入(这个方法需要自己加入 在ClassWizard 中，注意在ClassName中选择CXApp,Messages列表框中选择ExitInstance)</span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">Gdiplus</span><span style="color: #000000; ">::</span><span style="color: #a31515;">GdiplusShutdown(</span><span style="color: #000080;">m_gdiplusToken</span><span style="color: #000000; ">);</span></div><p>&nbsp;<span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px;">6.在Project-&gt;stting-&gt;Link-&gt;Intput-&gt;Additional Dependencies中加入</span><span style="font-family: 宋体; font-size: 12pt; background-color: #ffffff; line-height: 26px; color: #0000ff;">gdiplus.lib</span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-family: 宋体; color: #000000; font-size: 12pt;">此时GDI+设置成功。<br /><br />具体代码如下：<br /></span></p><div style="background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><div><span style="font-size: 12pt; color: #0000ff;">int</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #a31515;">GetEncoderClsid(</span><span style="font-size: 12pt; color: #0000ff;">const WCHAR</span><span style="font-size: 12pt;">* </span><span style="font-size: 12pt; color: #000080;">format</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #0000ff;">CLSID</span><span style="font-size: 12pt;">* </span><span style="font-size: 12pt; color: #000080;">pClsid</span><span style="font-size: 12pt;">) &nbsp;&nbsp;</span></div><div><span style="font-size: 12pt;">{ &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">UINT</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">num </span><span style="font-size: 12pt;">= 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #008000;">// number of image encoders</span><span style="font-size: 12pt;"> &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">UINT</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">size </span><span style="font-size: 12pt;">= 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #008000;">// size of the image encoder array in bytes </span><span style="font-size: 12pt;">&nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">ImageCodecInfo</span><span style="font-size: 12pt;">* </span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo </span><span style="font-size: 12pt;">= </span><span style="font-size: 12pt; color: #ff00ff;">NULL</span><span style="font-size: 12pt;">; &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #a31515;">GetImageEncodersSize</span><span style="font-size: 12pt;">(&amp;</span><span style="font-size: 12pt; color: #000080;">num</span><span style="font-size: 12pt;">, &amp;</span><span style="font-size: 12pt; color: #000080;">size</span><span style="font-size: 12pt;">); &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">if</span><span style="font-size: 12pt;">(size == 0) &nbsp;&nbsp;</span></div><div><span style="white-space:pre">		</span><span style="font-size: 12pt; color: #0000ff;">return</span><span style="font-size: 12pt;"> -1; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #008000;">// &nbsp; Failure </span><span style="font-size: 12pt;">&nbsp;&nbsp;</span></div><div></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo </span><span style="font-size: 12pt;">= (</span><span style="font-size: 12pt; color: #0000ff;">ImageCodecInfo</span><span style="font-size: 12pt;">*)(</span><span style="font-size: 12pt; color: #ff00ff;">malloc</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #000080;">size</span><span style="font-size: 12pt;">)); &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">if</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo </span><span style="font-size: 12pt;">== </span><span style="font-size: 12pt; color: #ff00ff;">NULL</span><span style="font-size: 12pt;">) &nbsp;&nbsp;</span></div><div><span style="white-space:pre">		</span><span style="font-size: 12pt; color: #0000ff;">return</span><span style="font-size: 12pt;"> -1; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #008000;">// &nbsp; Failure </span><span style="font-size: 12pt;">&nbsp;&nbsp;</span></div><div></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #a31515;">GetImageEncoders</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #000080;">num</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #000080;">size</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo</span><span style="font-size: 12pt;">); &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">for</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #0000ff;">UINT</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">j </span><span style="font-size: 12pt;">= 0; </span><span style="font-size: 12pt; color: #000080;">j </span><span style="font-size: 12pt;">&lt; </span><span style="font-size: 12pt; color: #000080;">num</span><span style="font-size: 12pt;">; ++</span><span style="font-size: 12pt; color: #000080;">j</span><span style="font-size: 12pt;">) &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt;">{ &nbsp;&nbsp;</span></div><div><span style="white-space:pre">		</span><span style="font-size: 12pt; color: #0000ff;">if</span><span style="font-size: 12pt;">( </span><span style="font-size: 12pt; color: #a31515;">wcscmp</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo</span><span style="font-size: 12pt;">[</span><span style="font-size: 12pt; color: #000080;">j</span><span style="font-size: 12pt;">].</span><span style="font-size: 12pt; color: #000080;">MimeType</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #000080;">format</span><span style="font-size: 12pt;">) == 0 ) &nbsp;&nbsp;</span></div><div><span style="white-space:pre">		</span><span style="font-size: 12pt;">{ &nbsp;&nbsp;</span></div><div><span style="white-space:pre">			</span><span style="font-size: 12pt;">*</span><span style="font-size: 12pt; color: #000080;">pClsid </span><span style="font-size: 12pt;">= </span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo</span><span style="font-size: 12pt;">[</span><span style="font-size: 12pt; color: #000080;">j</span><span style="font-size: 12pt;">].</span><span style="font-size: 12pt; color: #000080;">Clsid</span><span style="font-size: 12pt;">; &nbsp;&nbsp;</span></div><div><span style="white-space:pre">			</span><span style="font-size: 12pt; color: #ff00ff;">free</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo</span><span style="font-size: 12pt;">); &nbsp;&nbsp;</span></div><div><span style="white-space:pre">			</span><span style="font-size: 12pt; color: #0000ff;">return</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">j</span><span style="font-size: 12pt;">; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #008000;">// &nbsp; Success</span><span style="font-size: 12pt;"> &nbsp;&nbsp;</span></div><div><span style="white-space:pre">		</span><span style="font-size: 12pt;">} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt;">} &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #ff00ff;">free(</span><span style="font-size: 12pt; color: #000080;">pImageCodecInfo</span><span style="font-size: 12pt;">); &nbsp;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">return</span><span style="font-size: 12pt;"> -1; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #008000;">// &nbsp; Failure </span><span style="font-size: 12pt;">&nbsp;&nbsp;</span></div><div><span style="font-size: 12pt;">}</span></div><div></div><div><span style="font-size: 12pt; color: #0000ff;">void</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #a31515;">SaveFile(</span><span style="font-size: 12pt; color: #0000ff;">Bitmap</span><span style="font-size: 12pt;">* </span><span style="font-size: 12pt; color: #000080;">pImage</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #0000ff;">const wchar_t</span><span style="font-size: 12pt;">* </span><span style="font-size: 12pt; color: #000080;">pFileName</span><span style="font-size: 12pt;">)</span></div><div><span style="font-size: 12pt;">{</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">EncoderParameters</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">encoderParameters;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">CLSID </span><span style="font-size: 12pt; color: #000080;">jpgClsid</span><span style="font-size: 12pt;">;&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #a31515;">GetEncoderClsid</span><span style="font-size: 12pt;">(L</span><span style="font-size: 12pt; color: #a31515;">"image/jpeg"</span><span style="font-size: 12pt;">, &amp;</span><span style="font-size: 12pt; color: #000080;">jpgClsid</span><span style="font-size: 12pt;">);</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">encoderParameters</span><span style="font-size: 12pt;">.</span><span style="font-size: 12pt; color: #000080;">Count </span><span style="font-size: 12pt;">= 1;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">encoderParameters</span><span style="font-size: 12pt;">.</span><span style="font-size: 12pt; color: #000080;">Parameter</span><span style="font-size: 12pt;">[0].</span><span style="font-size: 12pt; color: #000080;">Guid </span><span style="font-size: 12pt;">= </span><span style="font-size: 12pt; color: #000080;">EncoderQuality;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">encoderParameters</span><span style="font-size: 12pt;">.</span><span style="font-size: 12pt; color: #000080;">Parameter</span><span style="font-size: 12pt;">[0].</span><span style="font-size: 12pt; color: #000080;">Type </span><span style="font-size: 12pt;">= </span><span style="font-size: 12pt; color: #ff00ff;">EncoderParameterValueTypeLong;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">encoderParameters</span><span style="font-size: 12pt;">.</span><span style="font-size: 12pt; color: #000080;">Parameter</span><span style="font-size: 12pt;">[0].</span><span style="font-size: 12pt; color: #000080;">NumberOfValues </span><span style="font-size: 12pt;">= 1;</span></div><div></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #008000;">// Save the image as a JPEG with quality level 100.</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">ULONG</span><span style="font-size: 12pt;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="font-size: 12pt; color: #000080;">quality;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">quality </span><span style="font-size: 12pt;">= 100;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #000080;">encoderParameters</span><span style="font-size: 12pt;">.</span><span style="font-size: 12pt; color: #000080;">Parameter</span><span style="font-size: 12pt;">[0].</span><span style="font-size: 12pt; color: #000080;">Value </span><span style="font-size: 12pt;">= &amp;</span><span style="font-size: 12pt; color: #000080;">quality;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">Status</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">status </span><span style="font-size: 12pt;">= </span><span style="font-size: 12pt; color: #000080;">pImage</span><span style="font-size: 12pt;">-&gt;</span><span style="font-size: 12pt; color: #a31515;">Save</span><span style="font-size: 12pt;">(</span><span style="font-size: 12pt; color: #000080;">pFileName</span><span style="font-size: 12pt;">, &amp;</span><span style="font-size: 12pt; color: #000080;">jpgClsid</span><span style="font-size: 12pt;">, &amp;</span><span style="font-size: 12pt; color: #000080;">encoderParameters</span><span style="font-size: 12pt;">);</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">if</span><span style="font-size: 12pt;"> (</span><span style="font-size: 12pt; color: #000080;">status </span><span style="font-size: 12pt;">!= </span><span style="font-size: 12pt; color: #ff00ff;">Ok</span><span style="font-size: 12pt;">)&nbsp;</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt;">{</span></div><div><span style="white-space:pre">		</span><span style="font-size: 12pt; color: #a31515;">wprintf</span><span style="font-size: 12pt;">(L</span><span style="font-size: 12pt; color: #a31515;">"%d Attempt to save %s failed./n"</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #000080;">status</span><span style="font-size: 12pt;">, </span><span style="font-size: 12pt; color: #000080;">pFileName</span><span style="font-size: 12pt;">);</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt;">}</span></div><div><span style="font-size: 12pt;">}</span><br /><br /><span style="color: #008000; font-size: 12pt;">//调用方式：</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">Bitmap</span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt; color: #000080;">newbitmap</span><span style="font-size: 12pt;">(L</span><span style="font-size: 12pt; color: #a31515;">"d://d.bmp</span><span style="font-size: 12pt; color: #a31515;">"</span><span style="font-size: 12pt;">);/</span><span style="font-size: 12pt; color: #008000;">/加载BMP</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #0000ff;">const wchar_t</span><span style="font-size: 12pt;"> *</span><span style="font-size: 12pt; color: #000080;">pFileName</span><span style="font-size: 12pt;">=L</span><span style="font-size: 12pt; color: #a31515;">"d://new.jpg"</span><span style="font-size: 12pt;">;</span><span style="font-size: 12pt; color: #008000;">//保存路径</span></div><div><span style="white-space:pre">	</span><span style="font-size: 12pt; color: #a31515;">SaveFile</span><span style="font-size: 12pt;">(&amp;</span><span style="font-size: 12pt; color: #000080;">newbitmap,</span><span style="font-size: 12pt; color: #000080;">pFileName </span><span style="font-size: 12pt;">);</span></div><span style="font-size: 12pt; color: #000000;"></span></div><span style="font-family: 宋体; color: #000000; font-size: 12pt;"><br />本文转自：</span><a href="http://blog.csdn.net/highyyy/article/details/6125763">http://blog.csdn.net/highyyy/article/details/6125763</a><span style="font-family: 宋体; color: #000000; font-size: 12pt;"><br /></span><p>&nbsp;</p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/205258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-01-09 14:30 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/01/09/205258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC 修改单文档标题</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/12/13/204764.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 13 Dec 2013 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/12/13/204764.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/204764.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/12/13/204764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/204764.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/204764.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;"><strong>一、修改标题</strong></span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff;"><br /></span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">方法1：</span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">在CMainFrame中</span><span style="color: #0000ff; font-family: Verdana; font-size: 12pt;">PreCreateWindow(CREATESTRUCT&amp; cs)</span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">进行更改</span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">，如下：</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-family: Verdana;">BOOL&nbsp;CKTLXSubjectShowFrame::PreCreateWindow(CREATESTRUCT&amp;&nbsp;cs)</span><br /><span style="font-family: Verdana;">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;specialized&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;the&nbsp;base&nbsp;class</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;cs.style&nbsp;&amp;=~WS_MAXIMIZEBOX;</span><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">禁用最大化按钮</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;cs.style&nbsp;&amp;=~WS_SIZEBOX;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; font-family: Verdana;">cs.style&nbsp;</span><span style="color: red; font-family: Verdana;">&amp;=~</span><span style="color: red; font-family: Verdana;">FWS_ADDTOTITLE;</span><br /><br /><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;cs.lpszName&nbsp;=&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">_T(</span><span style="color: #ff0000; font-family: Verdana;">"</span><span style="color: #ff0000; font-family: Verdana;">测试标题</span><span style="color: #ff0000; font-family: Verdana;">"</span><span style="color: #ff0000; font-family: Verdana;">)</span><span style="color: red; font-family: Verdana;">;</span><br /><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;cs.cx&nbsp;=&nbsp;970;</span><br /><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;cs.cy&nbsp;=&nbsp;650;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;CXTPFrameWnd::PreCreateWindow(cs);</span><br /><span style="font-family: Verdana;">}</span></div><span style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">方法2：在doc类中</span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; color: #0000ff; font-size: 12pt;">OnNewDocument</span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">函数修改，添加修改的标题，如下：</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-family: Verdana;">BOOL&nbsp;CKTLXSubjectShowDoc::OnNewDocument()</span><br /><span style="font-family: Verdana;">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">&nbsp;(!CDocument::OnNewDocument())</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;FALSE;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000; font-family: Verdana;">SetTitle(_T(</span><span style="color: #ff0000; font-family: Verdana;">"</span><span style="color: #ff0000; font-family: Verdana;">测试标题</span><span style="color: #ff0000; font-family: Verdana;">"</span><span style="color: #ff0000; font-family: Verdana;">));</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;TRUE;</span><br /><span style="font-family: Verdana;">}</span></div><span style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></span><strong><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">二、</span><span style="font-family: Verdana; font-size: 16px; line-height: 20px; background-color: #ffffff;">修改标题后半部分</span></strong><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;"><br /></span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 12pt;">单文档标题通常会有两部分组成，例如：</span><span style="font-family: Verdana; line-height: 26px; background-color: #ffffff; color: #ff0000; font-size: 12pt;">标题名称&#8212;工程名称，</span><span style="font-family: Verdana; font-size: 12pt; line-height: 26px; background-color: #ffffff;">修改StringTable的IDR_MAINFRAME的标题，将第一个\n之前的字符串替换为</span><p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; padding: 0px; font-size: 12px; font-family: Simsun; line-height: 20px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: red;">标题</span>\n\nTestSingleTitle\n\n\nTestSingleTitle.Document\nTestSingleTitle.Document</div><p>&nbsp;<span style="line-height: 20px; font-size: 12pt; font-family: Verdana;"><strong>三、去</strong></span><span style="line-height: 20px; font-size: 12pt; font-family: Verdana;"><strong>掉标题的后半部分</strong></span></p><p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; padding: 0px; font-size: 12px; font-family: Simsun; line-height: 20px; background-color: #ffffff;"><span style="font-family: Verdana; font-size: 12pt;">方法1：</span><span style="font-size: 12pt; font-family: Verdana;">在C</span><span style="font-family: Verdana; font-size: 12pt; line-height: 21px; text-indent: 26.66666603088379px;">TestSingleTitle</span><span lang="EN-US" style="font-size: 12pt; font-family: Verdana;">App::InitInstance()</span><span style="font-size: 12pt; font-family: Verdana;">中调用如下语句</span><span lang="EN-US" style="font-size: 12pt; font-family: Verdana;">m_pMainWnd-&gt;SetWindowText(<span style="font-size: 12pt;">_T(</span><span lang="EN-US" style="font-size: 10pt;"><span style="font-size: 12pt;">"</span></span><span lang="EN-US" style="font-size: 12pt; color: #0000ff;"><strong style="color: #ff0000; text-indent: 26.66666603088379px;">标题</strong></span><span lang="EN-US" style="font-size: 10pt;"><span style="font-size: 12pt;">")</span></span><span lang="EN-US" style="font-size: 12pt;">);</span></span><span style="font-family: Verdana; font-size: 12pt;">或在其他地方用<span lang="EN-US" style="font-size: 12pt;">(AfxGetMainWnd())-&gt;SetWindowText(</span></span><span lang="EN-US" style="font-family: Verdana; font-size: 10pt;"><span style="font-size: 12pt;">_T(</span><span style="font-size: 10pt;"><span style="font-size: 12pt;">"</span></span><span style="font-size: 12pt; color: #0000ff;"><strong style="color: #ff0000; text-indent: 26.66666603088379px;">标题</strong></span><span style="font-size: 12pt;"><span style="color: maroon;">")</span></span></span><span lang="EN-US" style="font-family: Verdana; font-size: 12pt;">);</span><span style="font-family: Verdana; font-size: 12pt;">也可以得到相同的结果。</span></p><p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; padding: 0px; font-size: 12px; font-family: Simsun; line-height: 20px; background-color: #ffffff;"><span style="font-size: 10pt; font-family: 新宋体;">　</span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; padding: 0px;"><span style="font-size: 12pt; font-family: Verdana; color: #000000;">方法2：</span><span style="font-size: 12pt; font-family: Verdana;">可以通过</span><span style="font-size: 12pt; font-family: Verdana;">利用<span lang="EN-US" style="font-family: Verdana; font-size: 12pt;">CWnd::SetWindowText</span></span><span style="font-size: 12pt; font-family: Verdana;">即：<span lang="EN-US" style="font-family: Verdana; font-size: 12pt;">void SetWindowText( LPCTSTR</span>　<span lang="EN-US" style="font-family: Verdana; font-size: 12pt;">lpszString );</span></span><span style="font-size: 12pt; font-family: Verdana;">重载<span lang="EN-US" style="font-family: Verdana; font-size: 12pt;">CFramWnd</span></span><span style="font-size: 12pt; font-family: Verdana;">类的<span lang="EN-US" style="font-family: Verdana; font-size: 12pt; color: #0000ff;">OnUpdateFrameTitle</span></span><span style="font-size: 12pt; font-family: Verdana;">函数</span></p><p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; padding: 0px;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">void</span><span style="font-family: Verdana;">&nbsp;CMainFrame::OnUpdateFrameTitle(BOOL&nbsp;bAddToTitle)</span><br /><span style="font-family: Verdana;">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">&nbsp;TODO:&nbsp;在此添加专用代码和/或调用基类　</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;</span><span style="font-family: Verdana; color: #ff0000;">&nbsp;SetWindowText(_T(</span><span style="font-family: Verdana; color: #ff0000;">"</span><span style="font-family: Verdana; color: #ff0000;">标题</span><span style="font-family: Verdana; color: #ff0000;">"</span><span style="font-family: Verdana; color: #ff0000;">));</span><br /><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;CFrameWnd::OnUpdateFrameTitle(bAddToTitle);</span><br /><span style="font-family: Verdana;">}</span></div><p>&nbsp;<span style="font-size: 12pt; font-family: Verdana;">方法</span><span style="font-size: 12pt; font-family: Verdana;">3</span><span style="font-size: 12pt; font-family: Verdana;">：在</span><span style="font-size: 10pt; font-family: Verdana;"><span lang="EN-US" style="font-size: 12pt;">CMainFrame</span></span><span style="font-size: 12pt; font-family: Verdana;">的<span lang="EN-US" style="color: #0000ff; font-size: 12pt;">PreCreateWindow</span></span><span style="font-size: 12pt; font-family: Verdana;">函数中修改窗口风格：</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-family: Verdana;">BOOL&nbsp;CMainFrame::PreCreateWindow(CREATESTRUCT&amp;&nbsp;cs)</span><br /><span style="font-family: Verdana;">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000; font-family: Verdana;">cs.style&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">&amp;=</span>&nbsp;<span style="color: #ff0000; font-family: Verdana;">~</span><span style="color: #ff0000; font-family: Verdana;">(LONG)&nbsp;FWS_ADDTOTITLE;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;CFrameWnd::PreCreateWindow(cs);</span><br /><span style="font-family: Verdana;">}</span></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/204764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-12-13 10:28 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/12/13/204764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口问题</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/12/05/204603.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 05 Dec 2013 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/12/05/204603.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/204603.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/12/05/204603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/204603.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/204603.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"> 在</span><span style="font-size: 12pt;">PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口如下：<br /></span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp;1&nbsp;BOOL&nbsp;CMainDlg::PreTranslateMessage(MSG*&nbsp;pMsg)<br />&nbsp;2&nbsp;{<br />&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;specialized&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;the&nbsp;base&nbsp;class</span><span style="color: #008000; "><br /></span>&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;pMsg-&gt;message&nbsp;==&nbsp;WM_LBUTTONDOWN)<br />&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(m_oldRect);<br />&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::SetCapture(<span style="color: #0000FF; ">this</span>-&gt;m_hWnd);<br />&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bCanDrag&nbsp;=&nbsp;TRUE;<br />&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_lastPt&nbsp;=&nbsp;pMsg-&gt;pt&nbsp;;<br />10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;pMsg-&gt;message&nbsp;==&nbsp;WM_LBUTTONUP)<br />12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;m_bCanDrag&nbsp;)<br />14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::ReleaseCapture();<br />16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bCanDrag&nbsp;=&nbsp;FALSE;<br />17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(m_newRect);<br />18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(m_oldRect.EqualRect(m_newRect))<br />19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff;">GetMainItemID(pMsg);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">调用对话框函数</span><span style="color: #008000; "><br /></span>21<span style="color: #ff0000;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #339966;">//</span><span style="color: #339966;">return</span><span style="color: #339966;">&nbsp;TRUE;</span><br />22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;pMsg-&gt;message&nbsp;==&nbsp;WM_MOUSEMOVE)<br />26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;m_bCanDrag&nbsp;)<br />28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rc;<br />30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(&amp;rc);<br />31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc.OffsetRect(&nbsp;pMsg-&gt;pt.x&nbsp;-&nbsp;m_lastPt.x&nbsp;,&nbsp;pMsg-&gt;pt.y&nbsp;-&nbsp;m_lastPt.y&nbsp;&nbsp;)&nbsp;;<br />32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_lastPt&nbsp;=&nbsp;pMsg-&gt;pt;<br />33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>-&gt;MoveWindow(&nbsp;rc&nbsp;);<br />34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />36&nbsp;<br />37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;CDialog::PreTranslateMessage(pMsg);<br />38&nbsp;}<br /><br />39&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;CMainDlg::GetMainItemID(MSG*&nbsp;pMsg)<br />40&nbsp;{<br />41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pMsg-&gt;hwnd&nbsp;==&nbsp;GetDlgItem(&nbsp;IDC_BTN_MYCOMPUTER&nbsp;)-&gt;m_hWnd)<br />42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff;">&nbsp;CTestDlg&nbsp;dlg;</span><br />44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff;">dlg.DoModal();</span><br />45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />46&nbsp;}</div><br /><span style="font-size: 12pt;">再单击对话框上的按钮时发送断言中断，具体位置如下：</span><br /><img src="http://www.cppblog.com/images/cppblog_com/wanghaiguang/domal.jpg" width="788" height="548" alt="" /><br /><br /><div><strong style="font-size: 14pt;">::IsWindow(m_hWnd)<br /><br /></strong></div><div style="clear: both; font-size: 0px; line-height: 0; height: 0px; visibility: visible; font-family: arial, 宋体, sans-serif; background-color: #ffffff;"></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; color: #333333; margin-bottom: 5px; text-indent: 2em;">函数功能：该函数确定给定的<a target="_blank" href="http://baike.baidu.com/view/1452762.htm" style="text-decoration: none; color: #136ec2;">窗口句柄</a>是否标识一个已存在的窗口。</div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; color: #333333; margin-bottom: 5px; text-indent: 2em;">函数原型：BOOL IsWindow（HWND hWnd）；</div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; color: #333333; margin-bottom: 5px; text-indent: 2em;">参数：</div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; color: #333333; margin-bottom: 5px; text-indent: 2em;">hWnd:被测试窗口的句柄。</div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; color: #333333; margin-bottom: 5px; text-indent: 2em;">返回值：如果<a target="_blank" href="http://baike.baidu.com/view/1452762.htm" style="text-decoration: none; color: #136ec2;">窗口句柄</a>标识了一个已存在的窗口，返回值为非零；如果窗口句柄未标识一个已存在窗口，返回值为零。</div><br /><span style="color: #ff0000; font-size: 12pt;">可能原因：</span><span style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">在PreTranslateMessage里的获取对应m_hWnd，</span><span style="font-size: 12pt;">DoModal()模态对话框退出后，</span><span style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">m_hWnd</span><span style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">不是有效的窗口句柄。</span><br /><span style="color: #ff0000; font-size: 12pt;">解决办法：</span><span style="font-size: 12pt;">处理完</span><span style="font-size: 12pt;">WM_LBUTTONUP</span><span style="font-size: 12pt;">后，</span><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">需要返回TRUE。</span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/204603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-12-05 10:58 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/12/05/204603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FTP上传、下载及其相关功能示例</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/11/19/204327.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 19 Nov 2013 00:54:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/11/19/204327.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/204327.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/11/19/204327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/204327.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/204327.html</trackback:ping><description><![CDATA[<h1><span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;"><br />FTP</span>&nbsp;Wanderer -&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;">FTP</span>&nbsp;Client using WININET<br /><div id="contentdiv" itemprop="articleBody" style="margin: 0px; border: 0px; color: #111111; font-family: 'Segoe UI', Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: normal; background-color: #ffffff;"><ul style="margin: 25px 0px 10px; padding: 0px 0px 0px 40px; border: 0px;"><li style="margin: 0px 0px 6px -40px; padding: 0px 0px 1px 30px; border: 0px; background-image: url(http://s.codeproject.com/images/download24.png); background-attachment: scroll; background-color: transparent; font-weight: bold; list-style-type: none; vertical-align: middle; background-position: 0% 50%; background-repeat: no-repeat no-repeat;"><a href="http://www.codeproject.com/KB/IP/ftpwanderer/ftpwanderer.zip" style="margin: 0px; padding: 0px; border: 0px; text-decoration: none; color: purple;">Download executable - 105 Kb</a></li><li style="margin: 0px 0px 6px -40px; padding: 0px 0px 1px 30px; border: 0px; background-image: url(http://s.codeproject.com/images/download24.png); background-attachment: scroll; background-color: transparent; font-weight: bold; list-style-type: none; vertical-align: middle; background-position: 0% 50%; background-repeat: no-repeat no-repeat;"><a href="http://www.codeproject.com/KB/IP/ftpwanderer/ftpwanderersrc.zip" style="margin: 0px; padding: 0px; border: 0px; text-decoration: none; color: purple;">Download source - 152 Kb</a></li></ul><p><img src="http://www.codeproject.com/KB/IP/ftpwanderer/ftpwanderer.jpg" alt="Sample Image" width="550" height="467" style="margin: 0px; padding: 0px; border: 0px; overflow: auto; max-width: 100%; height: auto;" /></p><h2>Description</h2><p>This article presents a fully functional implementation of a&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;client.&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;Wanderer is a multithreaded&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;client with the look-and-feel of Windows Explorer, and makes moving files between the Internet and your computer as simple as local file manipulation. This application uses WININET API's to handle the&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;protocol, and while it's not the most elegant way to connect to a&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;server it does the job pretty well.</p><h2><strong>Features list</strong></h2><ul style="margin: 10px 0px; padding: 0px 0px 0px 40px; border: 0px;"><li style="margin: 0px; padding: 0px; border: 0px;">All file transfer requests are handled in the background, so you don't have to wait while files copy to continue browsing the current server. You can even connect to a different server, while file transfers on another server are still in progress.</li><li style="margin: 0px; padding: 0px; border: 0px;">The Transfer Manager shows all file transfers currently in progress plus the ones that are in the queue. You can configure how many transfers are processed simultaneously, so you don't run out of resources.</li><li style="margin: 0px; padding: 0px; border: 0px;"><span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;Wanderer uses the Windows 9x/NT/XP style list boxes for displaying the contents of remote servers. With all familiar system icons and context menus.</li><li style="margin: 0px; padding: 0px; border: 0px;">You can specify the number of times it should try to connect, and the time delay between connection attempts.</li><li style="margin: 0px; padding: 0px; border: 0px;">Full Drag and Drop support. Simply drag one or more files or even complete folders onto&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;Wanderer's file view area to transfer them to the location of the server that is currently connected.</li><li style="margin: 0px; padding: 0px; border: 0px;">Easily configure&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;site settings, like username, password, port, initial remote folder, number of retries and default download folder.</li></ul><p>Here's a brief description of some of the important classes of the application:</p><h3>CMainFrame</h3><p>CMainFrame contains most of the code for managing the&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;connection. It takes care of connecting to the server; initiate up/downloads and handling other&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;related actions.</p><h3>C<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;">FTP</span>ListView</h3><p>This is just a&nbsp;<code style="margin: 0px; padding: 0px; border: 0px; color: #990000; font-size: 11pt; font-family: Consolas, 'Courier New', Courier, mono;">CListView</code>&nbsp;derived class that takes care of displaying the files and enabling you to sort them. When the application is busy downloading or sorting a directory listing it can display an animation, just like explorer does.</p><h3>CConnectDlg</h3><p>This class (= Site Manager) enables the user to manage&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;sites. You can add/change and delete sites and configure properties such as hostname, port, username and password. The settings of each site are save to disk using serializing.</p><h3>CTransferManagerDlg</h3><p><code style="margin: 0px; padding: 0px; border: 0px; color: #990000; font-size: 11pt; font-family: Consolas, 'Courier New', Courier, mono;">CTransferManagerDlg</code>&nbsp;(= Transfer manager) takes care of queuing the file transfers. It shows all file transfers currently in progress plus the ones that are in the queue. You can configure how many transfers are processed simultaneously, so you don't run out of resources. Each up/download in handled in a separate thread by initiating a<code style="margin: 0px; padding: 0px; border: 0px; color: #990000; font-size: 11pt; font-family: Consolas, 'Courier New', Courier, mono;">CDownloadThread</code>&nbsp;or&nbsp;<code style="margin: 0px; padding: 0px; border: 0px; color: #990000; font-size: 11pt; font-family: Consolas, 'Courier New', Courier, mono;">C<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Upload</span>Thread</code>&nbsp;thread.</p><h3>CDownloadThread</h3><p>Each download is handled in the background using a separate thread.&nbsp;<code style="margin: 0px; padding: 0px; border: 0px; color: #990000; font-size: 11pt; font-family: Consolas, 'Courier New', Courier, mono;">CDownloadThread</code>&nbsp;creates a new connection with the&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;server and displays a progress dialog that tells you the status of the file transfer. When the download is completed (or aborted) it notifies the transfer manager so the UI can be updated.</p><h3>C<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;">Upload</span>Thread</h3><p>Each&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">upload</span>&nbsp;is handled in the background using a separate thread.&nbsp;<code style="margin: 0px; padding: 0px; border: 0px; color: #990000; font-size: 11pt; font-family: Consolas, 'Courier New', Courier, mono;">C<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Upload</span>Thread</code>&nbsp;creates a new connection with the&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;server and displays a progress dialog that tells you the status of the file transfer. When the&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">upload</span>&nbsp;is completed (or aborted) it notifies the transfer manager so the UI can be updated.</p><h2><strong>To do list:</strong></h2><p>While this application has most of the features you might expect in a&nbsp;<span style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">FTP</span>&nbsp;client, there are a few things left to do:</p><ul style="margin: 10px 0px; padding: 0px 0px 0px 40px; border: 0px;"><li style="margin: 0px; padding: 0px; border: 0px;">Drag and drop support out of the file view area to Explorer. I think this one is not that easy, because this would probably 'block' explorer until the file transfer is completed (any suggestions?).</li><li style="margin: 0px; padding: 0px; border: 0px;">Progress indication in the transfer manager. This is not really that hard to do, so this will probably be in the next release.</li><li style="margin: 0px; padding: 0px; border: 0px;">Better asynchrony handling of getting directory listing. The UI now does not respond when downloading a huge directory listing.</li></ul><h2>Contacting the Author</h2>Please send any comments or bug reports to me via&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#110;&#102;&#111;&#64;&#112;&#97;&#98;&#108;&#111;&#118;&#97;&#110;&#100;&#101;&#114;&#109;&#101;&#101;&#114;&#46;&#110;&#108;" style="margin: 0px; padding: 0px; border: 0px; text-decoration: none; color: purple;">email</a>. For any updates to this article, check my site&nbsp;<a href="http://www.pablovandermeer.nl/" style="margin: 0px; padding: 0px; border: 0px; text-decoration: none; color: purple;">here</a>.<h2>Revision history</h2><ul style="margin: 10px 0px; padding: 0px 0px 0px 40px; border: 0px;"><li style="margin: 0px; padding: 0px; border: 0px;">31st July 2002 - Initial revision.</li></ul></div></h1><h2>License</h2><div id="LicenseTerms" style="margin: 0px; border: 0px; color: #111111; font-family: 'Segoe UI', Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: normal; background-color: #ffffff;"><p>This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.</p><p>A list of licenses authors might use can be found&nbsp;<a href="http://www.codeproject.com/info/Licenses.aspx" style="margin: 0px; padding: 0px; border: 0px; text-decoration: none; color: purple;">here<br /><br />原文</a>地址：<a href="http://www.codeproject.com/Articles/2665/FTP-Wanderer-FTP-Client-using-WININET">http://www.codeproject.com/Articles/2665/FTP-Wanderer-FTP-Client-using-WININET</a></p></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/204327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-11-19 08:54 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/11/19/204327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC COMBOX控件只接受数字和设置数字范围</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/09/25/203432.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 25 Sep 2013 09:39:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/09/25/203432.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/203432.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/09/25/203432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/203432.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/203432.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: medium;">在MFC开发过程中使用ComboBox，有时会根据需求要求只能输入数字，并且要求数字在一定的范围内，例如一个用于选择小时的ComboBox，时间范围为00到23，那么该如何实现？</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: medium;">代码如下：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: medium;">在Dialog.h中：&nbsp;<br />&#8230;&#8230;&nbsp;<br />CComboBox m_cbHour;// 声明CComboBox类型作为CDialog类的成员变量&nbsp;<br />&#8230;&#8230;&nbsp;<br />afx_msg void OnCbnEditchangeCbHour();&nbsp;<br />afx_msg void OnCbnEditupdateCbHour();</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: medium;">在Dialog.cpp中：&nbsp;<br />&#8230;&#8230;&nbsp;<br />DDX_Control(pDX, IDC_CB_HOUR, m_cbHour);// 数据交换&nbsp;<br />&#8230;&#8230;&nbsp;<br />ON_CBN_EDITCHANGE(IDC_CB_HOUR, &amp;CDialog::OnCbnEditchangeCbHour)//添加消息映射，用于CComboBox内容改变中&nbsp;<br />ON_CBN_EDITUPDATE(IDC_CB_HOUR, &amp;CCDialog::OnCbnEditupdateCbHour)//添加消息映射，用于CComboBox内容更新&nbsp;<br />&#8230;&#8230;&nbsp;<br />下面来具体实现函数：&nbsp;<br /></span><a href="http://hi.csdn.net/attachment/201104/28/0_1304005625p2jG.gif" style="color: #336699; text-decoration: none;"><span style="font-size: medium;"><img title="image" src="http://hi.csdn.net/attachment/201104/28/0_1304005628m075.gif" border="0" alt="image" width="514" height="436" style="border: 0px; max-width: 100%; background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /></span></a><span style="font-size: medium;">&nbsp;<br />循环遍历CComboBox中已经输入的字符如果发现含有非数字则，置为&#8220;00&#8221;，使用循环的目的是为了防止用户跳着输（大概只有测试人员才会跳着输）。<br /></span><span style="font-size: 12pt; color: red;">将for循环改为</span><span style="color: red; font-size: 12pt;">for (int i = 0; i &lt; (strTmp.GetLength()); i++)遇到非数字字符就设置为00；</span><span style="color: red;"><br /></span><span style="font-size: medium;"><br /></span><a href="http://hi.csdn.net/attachment/201104/28/0_1304005631E077.gif" style="color: #336699; text-decoration: none;"><span style="font-size: medium;"><img title="image" src="http://hi.csdn.net/attachment/201104/28/0_13040056347k0F.gif" border="0" alt="image" width="508" height="310" style="border: 0px; max-width: 100%; background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /></span></a><span style="font-size: medium;">&nbsp;<br />当CComboBox更新数据时判断数字范围，如果超过边界，则设置值为最近边界值，至此一个只接受可控范围数字的CComboBox就完成了，但是在WinCE开发中却有一个问题，就是所有的汉字都输不进去，但是&#8220;头&#8221;这个汉字却能输入，不知道这是不是一个BUG，如果在代码中对&#8220;头&#8221;做特别判断，那这段程序也太奇怪了！<br /><br />本文转自：</span><a href="http://blog.csdn.net/wyunteng/article/details/6370882">http://blog.csdn.net/wyunteng/article/details/6370882</a></p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/203432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-09-25 17:39 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/09/25/203432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC解决设置控件内容 文字重叠问题</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/09/24/203402.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 24 Sep 2013 02:31:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/09/24/203402.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/203402.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/09/24/203402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/203402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/203402.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 12pt;">在用SetWindowText设置控件内容时，有时候会出字体重叠问题，</span><span style="font-family: Verdana; line-height: 23px; text-indent: 28px; background-color: #ffffff; font-size: 12pt;">调用次数越多，重叠越严重。以下为解决方法。<br /><br /></span><span style="font-family: Verdana; line-height: 23px; text-indent: 28px; background-color: #ffffff; font-size: 12pt;">方法一：</span><span style="font-family: Verdana; line-height: 23px; text-indent: 28px; background-color: #ffffff; font-size: 12pt;">RedrawWindow()</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;GetDlgItem(IDC_STATIC)-&gt;SetWindowText("your&nbsp;string");&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">2</span>&nbsp;GetDlgItem(IDC_STATIC)-&gt;GetParent()-&gt;RedrawWindow();&nbsp;</div><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 23px; text-indent: 28px; background-color: #ffffff;"><br /></span><span style="font-family: Verdana; line-height: 23px; text-indent: 28px; background-color: #ffffff; font-size: 12pt;">缺点：</span><span style="font-family: Verdana; line-height: 23px; text-indent: 28px; background-color: #ffffff; font-size: 12pt;">窗口刷新太频繁，一闪一闪，效果不太好。<br /><br /></span><span style="font-family: Verdana; font-size: 12pt;">方法二：</span><span style="font-family: Verdana; line-height: 23px; text-indent: 28px; background-color: #ffffff; font-size: 12pt;">局部刷新</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;YourDlg::RefreshControl(UINT&nbsp;uCtlID)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">2</span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;&nbsp;&nbsp;rc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetDlgItem(uCtlID)-&gt;GetWindowRect(&amp;rc);&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScreenToClient(&amp;rc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(rc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">7</span>&nbsp;} &nbsp; &nbsp;&nbsp;</div><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 23px; text-indent: 28px; background-color: #ffffff;"><br /></span><span style="font-family: Verdana; line-height: 23px; background-color: #ffffff; font-size: 12pt;">方法三：隐藏和显示</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;GetDlgItem(IDC_STATIC)-&gt;ShowWindow(SW_HIDE);<br /><span style="color: #008080; ">2</span>&nbsp;GetDlgItem(IDC_STATIC)-&gt;ShowWindow(SW_SHOW);</div><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 23px; text-indent: 28px; background-color: #ffffff;"><br /></span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/203402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-09-24 10:31 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/09/24/203402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断文件CFile已经打开</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/09/23/203381.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Mon, 23 Sep 2013 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/09/23/203381.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/203381.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/09/23/203381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/203381.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/203381.html</trackback:ping><description><![CDATA[方法一：<br /><p align="left" style="line-height: 15.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;;color:#464646;">CFile</span><span style="font-size:12.0pt; font-family:宋体;color:#464646;">类的成员变量：</span></p>  <p align="left" style="line-height: 15.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 12pt; font-family: simsun, serif; color: #0000ff;">m_hFile</span><span style="font-size: 12.0pt;font-family:宋体;color:#464646;">：表示一个打开文件的操作系统文件句柄。通过对</span><span style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;;color:#464646;">m_hFile</span>&nbsp;<span style="font-size:12.0pt;font-family: 宋体;color:#464646;">与</span>&nbsp;<span style="font-size: 12pt; font-family: simsun, serif; color: #0000ff;">CFile</span><span style="font-size:12.0pt; font-family:&quot;simsun&quot;,&quot;serif&quot;;color:#464646;">::hFileNull</span><span style="font-size:12.0pt;font-family:宋体;color:#464646;">的比较来判断该文件是否已经打开。<br /><br />示例代码：<br /></span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1 &nbsp; &nbsp;</span>&nbsp;CString&nbsp;strFilename&nbsp;=&nbsp;_T("D:\\大学语文.docx");<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFile&nbsp;file;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.Open(strFilename,CFile::modeReadWrite);<span style="color: #008000; ">//<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(file.m_hFile&nbsp;!=&nbsp;CFile::hFileNull)<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.Close();<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("File&nbsp;Already&nbsp;Close&nbsp;\n");<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />方法二：<br /><p class="MsoNormal"><span style="font-size:12.0pt;font-family:宋体;mso-ascii-font-family:
simsun;mso-hansi-font-family:simsun;mso-bidi-font-family:宋体;color:#464646;
mso-font-kerning:0pt">利用</span><span lang="EN-US" style="font-size:12.0pt;
font-family:&quot;simsun&quot;,&quot;serif&quot;;mso-bidi-font-family:宋体;color:#464646;mso-font-kerning:
0pt">file.GetFileName().IsEmpty()</span><span style="font-size:12.0pt;
font-family:宋体;mso-ascii-font-family:simsun;mso-hansi-font-family:simsun;
mso-bidi-font-family:宋体;color:#464646;mso-font-kerning:0pt">来判断<br /><br /></span></p><p><span style="font-size:12.0pt;font-family:宋体;color:#464646;">示例代码：</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strFilename&nbsp;=&nbsp;_T("D:\\大学语文.docx");<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFile&nbsp;file;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.Open(strFilename,CFile::modeReadWrite);<span style="color: #008000; ">//<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!file.GetFileName().IsEmpty())<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.Close();<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("File&nbsp;Already&nbsp;Close&nbsp;\n");<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><p style="margin-top:3.75pt;margin-right:0cm;margin-bottom:3.75pt;margin-left: 0cm;line-height:15.75pt;background:white"><span style="color:#464646">方法三：<br /></span><span style="font-family: simsun, serif; color: #464646;"><br /></span><span style="font-size:12.0pt;font-family:宋体;color:#464646;">通过设置成员变量来记录文件是否被打开。如</span><span style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;;color:#464646;">BOOL&nbsp;bIsFileOpen;</span><span style="font-size:12.0pt;font-family:宋体;color:#464646;">默认是</span><span style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;;color:#464646;">FALSE,</span><br /></p><p class="MsoNormal"><span style="font-size:12.0pt;font-family:宋体;mso-ascii-font-family:
simsun;mso-hansi-font-family:simsun;mso-bidi-font-family:宋体;color:#464646;
mso-font-kerning:0pt">打开成功，把它置为</span><span lang="EN-US" style="font-size:
12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;;mso-bidi-font-family:宋体;color:#464646;
mso-font-kerning:0pt">TRUE;</span><span style="font-size:12.0pt;font-family:宋体;
mso-ascii-font-family:simsun;mso-hansi-font-family:simsun;mso-bidi-font-family:
宋体;color:#464646;mso-font-kerning:0pt">否则置为</span><span lang="EN-US" style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;;mso-bidi-font-family:宋体;
color:#464646;mso-font-kerning:0pt">FALSE;</span></p><p><span style="font-size:12.0pt;font-family:宋体;color:#464646;">然后在程序里面判断就可以了。关闭后置</span><span style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;; color:#464646;">bIsFileOpen<span style="font-size: 12pt; font-family: 宋体;">为</span></span><span style="font-size:12.0pt;font-family:&quot;simsun&quot;,&quot;serif&quot;; color:#464646;">FALSE,</span></p><span style="font-family:&quot;simsun&quot;,&quot;serif&quot;; color:#464646"></span><p>&nbsp;</p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/203381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-09-23 16:46 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/09/23/203381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC 解决默认回车或ESC会关闭对话框的办法</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/09/13/203208.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 13 Sep 2013 00:31:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/09/13/203208.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/203208.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/09/13/203208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/203208.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/203208.html</trackback:ping><description><![CDATA[<span style="font-family: 宋体; line-height: 25px; background-color: #ffffff; font-size: 12pt;">一种方法：解决方法是在CDialog::PreTranslateMessage() 的重载函数中将ESC和回车按键的消息处理掉.<br /></span><span style="font-family: 宋体; line-height: 25px; background-color: #ffffff;"><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->BOOL&nbsp;CYourDlg::PreTranslateMessage(MSG*&nbsp;pMsg)&nbsp;&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pMsg-&gt;message==WM_KEYDOWN&amp;&amp;pMsg-&gt;wParam==VK_RETURN)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TRUE;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pMsg-&gt;message==WM_KEYDOWN&amp;&amp;pMsg-&gt;wParam==VK_ESCAPE)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TRUE;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;CDialog::PreTranslateMessage(pMsg);&nbsp;&nbsp;<br />} &nbsp;</div><br /><span style="font-size: 12pt;">另一种方法：</span><span style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">一开始的cancel按扭不要去掉，双击它进入命令OnCancel(), 把OnCancel()去掉</span><br style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5;" /><span style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">直接返回，这就没问题了</span><br style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5;" /><br style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5;" /><span style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; font-size: 12pt;">如果你已经把按钮删掉，那就得手工加这个命令，但效果一样</span><br style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5;" /><img src ="http://www.cppblog.com/wanghaiguang/aggbug/203208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-09-13 08:31 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/09/13/203208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC获取系统当前时间</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/08/22/202704.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 22 Aug 2013 09:36:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/08/22/202704.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202704.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/08/22/202704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202704.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">1.使用CTime类 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">CString str; //获取系统时间 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">CTime tm; tm=CTime::GetCurrentTime(); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str=tm.Format("现在时间是%Y年%m月%d日 %X");</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">MessageBox(str,NULL,MB_OK); 2: 得到系统时间日期(使用GetLocalTime) 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">SYSTEMTIME st; 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">CString strDate,strTime; 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">GetLocalTime(&amp;st); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond);</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">3.使用GetTickCount//获取程序运行时间 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">long t1=GetTickCount();//程序段开始前取得系统运行时间(ms) 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">Sleep(500); long t2=GetTickCount();//程序段结束后取得系统运行时间(ms) 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str.Format("time:%dms",t2-t1);//前后之差即 程序运行时间 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">AfxMessageBox(str);//获取系统运行时间 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">long t=GetTickCount(); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">CString str,str1; 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str1.Format("系统已运行 %d时",t/3600000); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str=str1; t%=3600000; 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str1.Format("%d分",t/60000); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str+=str1; t%=60000; 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str1.Format("%d秒",t/1000); 　　</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25px; background-color: #ffffff;">str+=str1; AfxMessageBox(str);<br /><br />本文转自：<a href="http://www.cnblogs.com/bigbigtree/archive/2011/12/02/2272066.html" style="font-family: verdana, 'courier new'; line-height: 21px;">http://www.cnblogs.com/bigbigtree/archive/2011/12/02/2272066.html</a></p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-08-22 17:36 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/08/22/202704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Word、RichEdit文本转RTF文件，RTF文件转HTML</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202684.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 21 Aug 2013 00:53:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202684.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202684.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202684.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202684.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202684.html</trackback:ping><description><![CDATA[<strong style="font-family: Verdana; font-size: 12pt;">1、RichEdit文本转RTF文件</strong><strong><br /></strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">static</span>&nbsp;DWORD&nbsp;CALLBACK&nbsp;MyStreamOutCallback(DWORD&nbsp;dwCookie,&nbsp;LPBYTE&nbsp;pbBuff,&nbsp;LONG&nbsp;cb,&nbsp;LONG&nbsp;*pcb)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CFile*&nbsp;pFile&nbsp;=&nbsp;(CFile*)&nbsp;dwCookie;<br />&nbsp;&nbsp;&nbsp;&nbsp;pFile-&gt;Write(pbBuff,&nbsp;cb);<br />&nbsp;&nbsp;&nbsp;&nbsp;*pcb&nbsp;=&nbsp;cb;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;CKTLXFunction::OnBnClickedIssuePaper()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;control&nbsp;notification&nbsp;handler&nbsp;code&nbsp;here</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sText;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_richEdit.GetWindowText(sText);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(sText.IsEmpty()&nbsp;&amp;&amp;&nbsp;m_sImportPaperPath.IsEmpty())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("内容为空");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sImportRtfPath&nbsp;=&nbsp;CCommonFun::GetExecutablePath()&nbsp;+&nbsp;"temp.rtf";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(CFileFind().FindFile(sImportRtfPath))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::DeleteFile(sImportRtfPath);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CFile&nbsp;cFile(TEXT(sImportRtfPath),&nbsp;CFile::modeCreate|CFile::modeWrite);<br />&nbsp;&nbsp;&nbsp;&nbsp;EDITSTREAM&nbsp;es;<br />&nbsp;&nbsp;&nbsp;&nbsp;es.dwCookie&nbsp;=&nbsp;(DWORD)&nbsp;&amp;cFile;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置用例参数,以便回调函数调用</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;es.pfnCallback&nbsp;=&nbsp;MyStreamOutCallback;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_richEdit.StreamOut(SF_RTF,&nbsp;es);<br />}</div><br /><strong style="font-family: Verdana; font-size: 12pt;">2、word文本转RTF文件</strong><strong><br /></strong><br /><div style="background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><font size="2">&nbsp; &nbsp; CString &nbsp;m_sImportRtfPath&nbsp;=&nbsp;CCommonFun::GetExecutablePath()&nbsp;+&nbsp;"temp.rtf";</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff;">if</span><font size="2">&nbsp;(CFileFind().FindFile(m_sImportRtfPath))</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::DeleteFile(m_sImportRtfPath);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;_Application&nbsp;WordApp;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;CoInitialize(NULL);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff;">if</span><font size="2">(!WordApp.CreateDispatch("Word.Application",NULL))</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG("创建Word服务失败!");</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff;">return</span><font size="2">&nbsp;FALSE;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;WordApp.SetVisible(FALSE);</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;COleVariant&nbsp;vTrue((</font><span style="font-size: 13px; color: #0000ff;">short</span><font size="2">)TRUE),vFalse((</font><span style="font-size: 13px; color: #0000ff;">short</span><font size="2">)FALSE),vOpt((</font><span style="font-size: 13px; color: #0000ff;">long</span><font size="2">)DISP_E_PARAMNOTFOUND,&nbsp;VT_ERROR);</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;Documents&nbsp;docs=WordApp.GetDocuments();</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;docs.Open(COleVariant(</font><span style="font-size: 13px; color: red;">"word文件路径"</span><font size="2">),&nbsp;vFalse,&nbsp;vFalse,&nbsp;vFalse,&nbsp;COleVariant(""),&nbsp;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant(""),&nbsp;vFalse,&nbsp;COleVariant(""),&nbsp;COleVariant(""),</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant((</font><span style="font-size: 13px; color: #0000ff;">short</span><font size="2">)0),COleVariant("UTF-8")&nbsp;,vTrue,&nbsp;vFalse,&nbsp;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant((</font><span style="font-size: 13px; color: #0000ff;">short</span><font size="2">)0),&nbsp;vFalse,&nbsp;COleVariant(""));</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;_Document&nbsp;active_doc;&nbsp;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;active_doc&nbsp;=&nbsp;WordApp.GetActiveDocument();</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;active_doc.SaveAs(COleVariant(</font><span style="font-size: 13px; color: red;">m_sImportRtfPath</span><font size="2">),&nbsp;COleVariant((</font><span style="font-size: 13px; color: #0000ff;">short</span><font size="2">)wdFormatRTF),&nbsp;vFalse,&nbsp;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant(""),vFalse,&nbsp;COleVariant(""),&nbsp;vFalse,&nbsp;vTrue,&nbsp;vFalse,&nbsp;vFalse,</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vFalse,COleVariant("936"),&nbsp;vFalse,&nbsp;vFalse,&nbsp;COleVariant((</font><span style="font-size: 13px; color: #0000ff;">short</span><font size="2">)0),&nbsp;vFalse);</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;WordApp.Quit(vOpt,&nbsp;vOpt,&nbsp;vOpt);</font><br /><div>&nbsp; &nbsp; active_doc.ReleaseDispatch();</div><div>&nbsp; &nbsp; docs.ReleaseDispatch();</div><div><span style="white-space: pre;">&nbsp;   </span>WordApp.ReleaseDispatch();<span style="white-space: pre;">		</span>//释放对象指针。切记，必须调用</div></div><br /><strong style="font-family: Verdana; font-size: 12pt;">3、RTF文件转html文件</strong><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;保存html文件&nbsp;[8/12/2013&nbsp;dell]</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;_Application&nbsp;WordApp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CoInitialize(NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!WordApp.CreateDispatch("Word.Application",NULL))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">AfxMessageBox("创建Word服务失败!");</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;WordApp.SetVisible(FALSE);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;COleVariant&nbsp;vTrue((<span style="color: #0000FF; ">short</span>)TRUE),vFalse((<span style="color: #0000FF; ">short</span>)FALSE),vOpt((<span style="color: #0000FF; ">long</span>)DISP_E_PARAMNOTFOUND,&nbsp;VT_ERROR);<br />&nbsp; &nbsp; CString &nbsp;m_sImportRtfPath&nbsp;=&nbsp;CCommonFun::GetExecutablePath()&nbsp;+&nbsp;"temp.rtf";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!CFileFind().FindFile(m_sImportRtfPath))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG("转换html文件失败，没有找到rtf文件&nbsp;：&nbsp;%s",&nbsp;m_sImportRtfPath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Documents&nbsp;docs=WordApp.GetDocuments();<br />&nbsp;&nbsp;&nbsp;&nbsp;docs.Open(COleVariant(<span style="color: red;">m_sImportRtfPath</span>),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vFalse,vFalse,vFalse,COleVariant(""),COleVariant(""),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vFalse,COleVariant(""),COleVariant(""),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant((<span style="color: #0000FF; ">short</span>)0),COleVariant("UTF-8")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,vTrue,vFalse,COleVariant((<span style="color: #0000FF; ">short</span>)0),vFalse,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant(""));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;_Document&nbsp;active_doc;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;active_doc&nbsp;=&nbsp;WordApp.GetActiveDocument();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;active_doc.SaveAs(COleVariant(<span style="color: red;">"保存</span><span style="color: red;">html文件路径</span><span style="color: red;">"</span>),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COleVariant((<span style="color: #0000FF; ">short</span>)wdFormatHTML),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vFalse,&nbsp;COleVariant(""),vFalse,&nbsp;COleVariant(""),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vFalse,vTrue,vFalse,vFalse,vFalse,COleVariant("936"),<span style="color: #008000; ">//</span><span style="color: #008000; ">COleVariant(L"UTF-8")</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vFalse,vFalse,COleVariant((<span style="color: #0000FF; ">short</span>)0),vFalse);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WordApp.Quit(vOpt,&nbsp;vOpt,&nbsp;vOpt);<br /><div style="font-size: 14px;">&nbsp; &nbsp; active_doc.ReleaseDispatch();</div><div style="font-size: 14px;">&nbsp; &nbsp; docs.ReleaseDispatch();</div><div style="font-size: 14px;">&nbsp; &nbsp; WordApp.ReleaseDispatch();<span style="white-space: pre;">		</span>//释放对象指针。切记，必须调用</div></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-08-21 08:53 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Richedit使用大全</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202683.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 21 Aug 2013 00:42:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202683.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202683.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202683.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202683.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.常见问题          a.可以编译,不能执行的     AfxInitRichEdit();          b.升级默认的Riched版本(默认的有一些bug)，如     可在InitInstance中添加     LoadLibrary("RICHED20.DLL")     最后注意     FreeLibrary 如果是CRichEditView基类的可用     BOOL ...&nbsp;&nbsp;<a href='http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202683.html'>阅读全文</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-08-21 08:42 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/08/21/202683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC设置控件背景透明</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/08/18/202616.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Sun, 18 Aug 2013 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/08/18/202616.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202616.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/08/18/202616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202616.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202616.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">添加消息响应WM_CTLCOLOR，<br />Static代码如下：</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">HBRUSH&nbsp;CTest1Dlg::OnCtlColor(CDC</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pDC,&nbsp;CWnd</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pWnd,&nbsp;UINT&nbsp;nCtlColor)&nbsp;<br />{<br />HBRUSH&nbsp;hbr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CDialog::OnCtlColor(pDC,&nbsp;pWnd,&nbsp;nCtlColor);<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Change&nbsp;any&nbsp;attributes&nbsp;of&nbsp;the&nbsp;DC&nbsp;here</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">CFont&nbsp;m_font;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">声明变量</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">m_font.CreatePointFont(</span><span style="color: #000000; ">600</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">华文行楷</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置字体大小和类型</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(pWnd</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">GetDlgCtrlID()</span><span style="color: #000000; ">==</span><span style="color: #000000; ">IDC_STATIC01)</span><span style="color: #008000;">//可以用</span><span style="font-size: 13px; color: red;">CTLCOLOR_STATIC</span><span style="font-size: 13px; color: #008000;">表示静态控件</span><span style="color: #008000;"><br /></span><span style="color: #000000; ">{<br />&nbsp;&nbsp;&nbsp;pDC</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SelectObject(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_font);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置字体&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;pDC</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetTextColor(RGB(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">));&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置字体颜色</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;pDC</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetBkMode(TRANSPARENT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">属性设置为透明</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(HBRUSH)::GetStockObject(NULL_BRUSH);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">不返回画刷</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">}<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Return&nbsp;a&nbsp;different&nbsp;brush&nbsp;if&nbsp;the&nbsp;default&nbsp;is&nbsp;not&nbsp;desired</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;hbr;<br />}</span></div><br />Radio和Check代码如下<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->HBRUSH&nbsp;CLoginDlg::OnCtlColor(CDC*&nbsp;pDC,&nbsp;CWnd*&nbsp;pWnd,&nbsp;UINT&nbsp;nCtlColor)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">HBRUSH&nbsp;hbr&nbsp;=&nbsp;CDialog::OnCtlColor(pDC,&nbsp;pWnd,&nbsp;nCtlColor);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH&nbsp;hbr&nbsp;=&nbsp;::CreateSolidBrush(#f9f9f9);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;&nbsp;Change&nbsp;any&nbsp;attributes&nbsp;of&nbsp;the&nbsp;DC&nbsp;here</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pWnd-&gt;GetDlgCtrlID()&nbsp;==&nbsp;IDC_RADIO_REALNAME&nbsp;&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWnd-&gt;GetDlgCtrlID()&nbsp;==&nbsp;IDC_RADIO_ANONYMOUS&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWnd-&gt;GetDlgCtrlID()&nbsp;==&nbsp;IDC_CHECK_SELFSELECT)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetBkMode(TRANSPARENT);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWnd-&gt;GetWindowRect(&amp;rc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScreenToClient(&amp;rc);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDC*&nbsp;dc&nbsp;=&nbsp;GetDC();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;BitBlt(0,0,rc.Width(),rc.Height(),dc,rc.left,rc.top,SRCCOPY);&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">把父窗口背景先画到按钮上</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseDC(dc);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbr&nbsp;=&nbsp;(HBRUSH)&nbsp;::GetStockObject(NULL_BRUSH);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><p>&nbsp;</p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-08-18 16:54 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/08/18/202616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008中docsingl.cpp文件中的ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED))错误 </title><link>http://www.cppblog.com/wanghaiguang/archive/2013/08/12/202499.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Mon, 12 Aug 2013 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/08/12/202499.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202499.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/08/12/202499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202499.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202499.html</trackback:ping><description><![CDATA[<span style="font-family: Arial; line-height: 19px; background-color: #ffffff; font-size: 12pt;">MFC程序vs2008编译通过，运行时出错，无法打开，提示f:\dd\xxxx的docsingl.cpp中的210行，找到以下代码：</span><br style="font-family: Tahoma, Arial; line-height: 19px; background-color: #ffffff;" /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;CSingleDocTemplate::SetDefaultTitle(CDocument*&nbsp;pDocument)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strDocName;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!GetDocString(strDocName,&nbsp;CDocTemplate::docName)&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDocName.IsEmpty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;use&nbsp;generic&nbsp;'untitled'</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED));</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDocument-&gt;SetTitle(strDocName);<br />}</div><br style="font-family: Tahoma, Arial; line-height: 19px; background-color: #ffffff;" /><span style="font-family: Arial; line-height: 19px; background-color: #ffffff; font-size: 12pt;">红色行就是出错地方，原因是资源文件引起，一般是从英文或其它语言改成简体中文而造成，把语言相关改为以下几行</span><br style="font-family: Tahoma, Arial; line-height: 19px; background-color: #ffffff;" /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">#if</span>&nbsp;!defined(AFX_RESOURCE_DLL)&nbsp;||&nbsp;defined(AFX_TARG_CHS)<br />#ifdef&nbsp;_WIN32<br />LANGUAGE&nbsp;4,&nbsp;2<br />#pragma&nbsp;code_page(936)<br /><span style="color: #0000FF; ">#endif</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">_WIN32</span></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-08-12 17:41 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/08/12/202499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC判断线程是否存在</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/07/31/202258.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 31 Jul 2013 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/07/31/202258.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202258.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/07/31/202258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202258.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202258.html</trackback:ping><description><![CDATA[<p style="margin-top:0cm;margin-right:0cm;margin-bottom:7.5pt;margin-left:0cm;
line-height:18.75pt;background:white;mso-background-themecolor:background1"><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">GetExitCodeThread</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial">函数是获得线程的退出码，</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">&nbsp;<o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; text-indent: 24pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">函数：</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">
GetExitCodeThread()<o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; text-indent: 24pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">功能：获取一个结束线程的返回值</span><span lang="EN-US" style="font-size:10.5pt;
font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; text-indent: 24pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">函数原形：</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">
BOOL GetExitCodeThread( HANDLE<span class="apple-converted-space">&nbsp;</span><a href="http://hi.baidu.com/fc/editor/"><span style="color:windowtext;text-decoration:
none;text-underline:none">hThread</span></a>, LPDWORD<span class="apple-converted-space">&nbsp;</span><a href="http://hi.baidu.com/fc/editor/"><span style="color:windowtext;text-decoration:
none;text-underline:none">lpExitCode</span></a>);<o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; text-indent: 24pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">参数：</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">
hThread </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial">指向欲获取返回值的线程对象的句柄</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; text-indent: 24pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<span class="apple-converted-space"><wbr>&nbsp;</span>lpExitCode </span><span style="font-size:
10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">用于存储线程的返回值</span><span lang="EN-US" style="font-size:10.5pt;font-family:
&quot;Arial&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; text-indent: 24pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">返回值：函数执行成功则返回非</span><span lang="EN-US" style="font-size:10.5pt;
font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">0</span><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">值，否则返回</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">
0</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial">（</span><span lang="EN-US" style="font-size:
10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">FALSE</span><span style="font-size:
10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">）</span></p>

<p style="margin: 0cm 0cm 7.5pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial">第一个参数是线程句柄，用</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">
CreateThread </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial">创建线程时获得到。</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial">第二个参数是一个</span><span lang="EN-US" style="font-size:
10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"> DWORD</span><span style="font-size:
10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial">的指针，用户应该使用一个</span><span lang="EN-US" style="font-size:10.5pt;font-family:
&quot;Arial&quot;,&quot;sans-serif&quot;"> DWORD </span><span style="font-size:10.5pt;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial">类型的变量去接收数据，返回的数据是线程的退出码，</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><br />
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial">通过线程退出码可以判断线程是否正在运行，还是已经退出。或者可以判断线程是否是正常退出还是异常退出。</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p style="margin: 0cm 0cm 7.5pt; line-height: 18.75pt; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial">执行成功时，存放线程的状态码，如果是线程的返回值，表示线程执行完，</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">&nbsp;&nbsp;</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial">如果线程没执行完，返回</span><span lang="EN-US" style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">STILL_ACTIVE,</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial">如果线程的返回值就是</span><span lang="EN-US" style="font-size:
10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">STILL_ACTIVE</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial">，就无法判断</span><span lang="EN-US" style="font-size:
10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">&nbsp;&nbsp;.</span></p><span style="font-size: 14pt;"><strong><br />MSDN解释:</strong></span><br /><h1><span style="font-size: 12pt; font-family: Verdana;">GetExitCodeThread Function</span></h1> <p> </p><p><span style="font-family: Verdana;">Retrieves the termination status of the specified thread.</span></p> <p>&nbsp;</p><pre xml:space="preserve"><span style="font-family: Verdana;">BOOL WINAPI GetExitCodeThread(   </span><span style="font-family: Verdana; color: #0000ff;">__in</span><span style="font-family: Verdana;">           HANDLE </span><em><a href=""><span style="font-family: Verdana;">hThread</span></a></em><span style="font-family: Verdana;">,   </span><span style="font-family: Verdana;"> </span><span style="font-family: Verdana; color: #0000ff;">__out</span><span style="font-family: Verdana;">         LPDWORD </span><em><a href=""><span style="font-family: Verdana;">lpExitCode</span></a></em><span style="font-family: Verdana;"> ); </span></pre> <div style="position: absolute; visibility: hidden; overflow: visible;" id="reftip"></div> <h4><span style="font-family: Verdana;">Parameters</span></h4> <dl> <dt><em style="font-family: Verdana;">hThread</em>  </dt><dd> <p><span style="font-family: Verdana;">A handle to the thread. </span></p> <p><span style="font-family: Verdana;">The handle must have the THREAD_QUERY_INFORMATION access right. For more  information, see </span><a href="ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dllproc/base/thread_security_and_access_rights.htm"><span style="font-family: Verdana;">Thread Security  and Access Rights</span></a><span style="font-family: Verdana;">.</span></p> </dd><dt><em style="font-family: Verdana;">lpExitCode</em>  </dt><dd> <p><span style="font-family: Verdana;">A pointer to a variable to receive the thread termination status. If the  specified thread has not terminated and the function succeeds, the termination  status returned is STILL_ACTIVE.</span></p></dd></dl> <h4><span style="font-family: Verdana;">Return Value</span></h4> <p><span style="font-family: Verdana;">If the function succeeds, the return value is nonzero.</span></p> <p><span style="font-family: Verdana;">If the function fails, the return value is zero. To get extended error  information, call </span><strong style="font-family: Verdana;">GetLastError</strong>.</p> <h4><span style="font-family: Verdana;">Remarks</span></h4> <p><span style="font-family: Verdana;">If the thread has terminated and the function succeeds, the termination  status returned may be one of the following:</span></p> <p>&nbsp;</p> <ul> <li><span style="font-family: Verdana;">The exit value specified in the </span><a href="ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dllproc/base/exitthread.htm"><strong style="font-family: Verdana;">ExitThread</strong></a><span style="font-family: Verdana;"> or </span><a href="ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dllproc/base/terminatethread.htm"><strong style="font-family: Verdana;">TerminateThread</strong></a><span style="font-family: Verdana;"> function.  </span></li><li><span style="font-family: Verdana;">The return value from the thread function.  </span></li><li><span style="font-family: Verdana;">The exit value of the thread's process. </span></li></ul> <p><strong style="font-family: Verdana;">Warning</strong><span style="font-family: Verdana;">&nbsp;&nbsp;If a thread happens to return STILL_ACTIVE (259)  as an error code, applications that test for this value could end up in an  infinite loop.</span></p><br />参考例子：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; font-family: Verdana;">&nbsp;1</span>&nbsp;<span style="color: #0000ff; font-family: Verdana;">int</span><span style="font-family: Verdana;">&nbsp;main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">&nbsp;2</span><span style="font-family: Verdana;">&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">&nbsp;3</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;exitCode1&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">&nbsp;4</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;exitCode2&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">&nbsp;5</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;threadId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">&nbsp;6</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; font-family: Verdana;">&nbsp;7</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hThrd1&nbsp;=&nbsp;CreateThread(NULL,&nbsp;0,&nbsp;&nbsp;&nbsp;ThreadFunc1,&nbsp;0,&nbsp;0,&nbsp;&amp;threadId&nbsp;);&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">&nbsp;(hThrd1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">10</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Thread&nbsp;1&nbsp;launched\n");&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">11</span>&nbsp;<br /><span style="color: #008080; font-family: Verdana;">13</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hThrd2&nbsp;=&nbsp;CreateThread(NULL,&nbsp;0,&nbsp;&nbsp;ThreadFunc2,&nbsp;0,&nbsp;0,&nbsp;&amp;threadId&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">&nbsp;(hThrd2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">15</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Thread&nbsp;2&nbsp;launched\n");&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">16</span>&nbsp;<br /><span style="color: #008080; font-family: Verdana;">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">for</span><span style="font-family: Verdana;">&nbsp;(;;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">19</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">20</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Press&nbsp;any&nbsp;key&nbsp;to&nbsp;exit..\n");&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">21</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">22</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetExitCodeThread(hThrd1,&nbsp;&amp;exitCode1);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">23</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetExitCodeThread(hThrd2,&nbsp;&amp;exitCode2);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">&nbsp;(&nbsp;exitCode1&nbsp;==&nbsp;STILL_ACTIVE&nbsp;)&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">25</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("Thread&nbsp;1&nbsp;is&nbsp;still&nbsp;running!");&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">26</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; font-family: Verdana;">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">&nbsp;(&nbsp;exitCode2&nbsp;==&nbsp;STILL_ACTIVE&nbsp;)&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">28</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("Thread&nbsp;2&nbsp;is&nbsp;still&nbsp;running!");&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">&nbsp;(&nbsp;exitCode1&nbsp;!=&nbsp;STILL_ACTIVE&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;exitCode2&nbsp;!=&nbsp;STILL_ACTIVE&nbsp;)&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">break</span><span style="font-family: Verdana;">;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">31</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">32</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; font-family: Verdana;">33</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hThrd1);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">34</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hThrd2);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">35</span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; font-family: Verdana;">36</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Thread&nbsp;1&nbsp;returned&nbsp;%d\n",&nbsp;exitCode1);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">37</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Thread&nbsp;2&nbsp;returned&nbsp;%d\n",&nbsp;exitCode2);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;EXIT_SUCCESS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">39</span><span style="font-family: Verdana;">&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">40</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; font-family: Verdana;">41</span><span style="font-family: Verdana;">&nbsp;DWORD&nbsp;WINAPI&nbsp;ThreadFunc1(LPVOID&nbsp;n)&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">42</span><span style="font-family: Verdana;">&nbsp;{&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">43</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep((DWORD)n*1000*2);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;(DWORD)n&nbsp;*&nbsp;10;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">45</span><span style="font-family: Verdana;">&nbsp;}&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">46</span>&nbsp;<br /><span style="color: #008080; font-family: Verdana;">48</span><span style="font-family: Verdana;">&nbsp;DWORD&nbsp;WINAPI&nbsp;ThreadFunc2(LPVOID&nbsp;n)&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">49</span><span style="font-family: Verdana;">&nbsp;{&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">50</span><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep((DWORD)n*1000*2);&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;(DWORD)n&nbsp;*&nbsp;10;&nbsp;&nbsp;&nbsp;</span><br /><span style="color: #008080; font-family: Verdana;">52</span><span style="font-family: Verdana;">&nbsp;}&nbsp;</span></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-07-31 11:37 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/07/31/202258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC实现的 picture control 类，对话框上显示图片</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/07/22/202033.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Mon, 22 Jul 2013 10:09:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/07/22/202033.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/202033.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/07/22/202033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/202033.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/202033.html</trackback:ping><description><![CDATA[<div id="article_content" style="margin: 20px 0px 0px; line-height: 26px; font-family: Arial; color: #333333; background-color: #ffffff;"><div id="contentdiv"><h2><ul style="font-size: 14px;"><li style="font-size: 10pt; padding-left: 0.5em;"><a href="http://www.codeproject.com/KB/graphics/CPictureControl/CPictureCtrl.zip" style="color: purple; text-decoration: none;">Download&nbsp;<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;">control</span>&nbsp;source - 2.61 KB</a></li><li style="font-size: 10pt; padding-left: 0.5em;"><a href="http://www.codeproject.com/KB/graphics/CPictureControl/CPictureCtrlDemo.zip" style="color: purple; text-decoration: none;">Download demo - 2.19 MB</a></li></ul></h2><h2>以上是源码及演示程序下载地址</h2><h2>（文章原地址&nbsp;<a href="http://www.codeproject.com/Articles/24969/An-MFC-picture-control-to-dynamically-show-picture" style="color: #336699; text-decoration: none;">http://www.codeproject.com/Articles/24969/An-MFC-picture-control-to-dynamically-show-picture</a>）</h2><h2>Introduction 介绍</h2><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">这篇文章描述的是一个可以用于在对话框上<span style="font-size: 10pt;">显示各种主流类型图片</span>&nbsp;<span style="font-size: 10pt;">(如 BMP, GIF, JPEG...)</span>&nbsp;<span style="font-size: 10pt;">的</span><span style="font-size: 10pt;">MFC</span><span style="font-size: 10pt;">控件</span></p><h2>Background 背景</h2><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">我花了一些时间去搜索可以用于显示图片的MFC控件, 但却没有发现合适的。 所以我决定自己做一个轻量级，灵活度高的图片控件（Picture control）去显示各种类型的图片。</p><h2>Using the code 如何使用</h2><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">这个控件内部使用的是GDI+库，所以请在使用时把GdiPlus.lib加入到你的工程中（include libraries<span style="font-size: 10pt;">）。</span></p><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">使用这个控件时，先用VC++对话框设计器创建一个静态文字控件（static text&nbsp;<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">control</span><span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;">）</span>&nbsp;。之后用MFC向导为这个控件分配一个控件变量，类型定义为CPictureCtrl。</p><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">现在你可以用你的控件装载显示图片了，你只需要在这几个<code style="color: #990000; font-family: 'Courier New', Courier, mono; font-size: 11pt;">C<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Picture</span>Ctrl::LoadFrom...</code>&nbsp;函数， 选择合适你需要的的进行调用。装载后控件会自动更新并显示图片。</p><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">要清除掉控件中显示的图片，调用<code style="color: #990000; font-family: 'Courier New', Courier, mono; font-size: 11pt;">C<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Picture</span>Ctrl::FreeImage</code>即可。</p><p style="font-family: Verdana, Arial, sans-serif; font-size: 10pt;">你的图片会被自动调整到控件的大小，这可能会改变图片原先的长宽比例。</p><div id="premain0" width="100%" style="font-family: Verdana, Arial, sans-serif; font-size: 0.8em; text-align: right; color: #004cd5; border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: #cccccc;"><img id="preimg0" src="http://www.codeproject.com/images/minus.gif" height="9" width="9" alt="" style="border: none; max-width: 100%; overflow: auto;" /><span id="precollapse0" style="margin-bottom: 0px;">&nbsp;Collapse</span>&nbsp;|&nbsp;<a href="http://www.codeproject.com/Articles/24969/An-MFC-picture-control-to-dynamically-show-picture#" style="color: purple; text-decoration: none;">Copy Code</a></div><pre id="pre0" style="white-space: pre-wrap; word-wrap: break-word; background-color: #fbedbb; padding: 6px; font-family: 'Courier New', Courier, mono; font-size: 9pt; overflow: auto; border: 1px solid #fbedbb; margin-top: 0px;"><span style="color: blue;">class</span> C<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Picture</span>Ctrl :     <br /><span style="color: blue;">public</span> CStatic <br />{<br /> <span style="color: blue;">public</span>:      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Constructor </span>    <br />&nbsp;&nbsp;&nbsp;C<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Picture</span>Ctrl(<span style="color: blue;">void</span>);      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Destructor </span>    <br />&nbsp;&nbsp;&nbsp;~C<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Picture</span>Ctrl(<span style="color: blue;">void</span>); <br /> <br /><span style="color: blue;">public</span>:      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Loads an image from a file </span>    <br />&nbsp;&nbsp;&nbsp;BOOL LoadFromFile(CString &amp;szFilePath);      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Loads an image from an IStream interface </span>    <br />&nbsp;&nbsp;&nbsp;BOOL LoadFromStream(IStream* piStream);      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Loads an image from a byte stream; </span>    <br />&nbsp;&nbsp;&nbsp;BOOL LoadFromStream(BYTE* pData, size_t nSize);      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Loads an image from a Resource <br /></span>&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">     BOOL LoadFromResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType); </span>     <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Overload - Single load function </span>    <br />&nbsp;&nbsp;&nbsp;BOOL Load(CString &amp;szFilePath);     <br />&nbsp;&nbsp;&nbsp;BOOL Load(IStream* piStream);     <br />&nbsp;&nbsp;&nbsp;BOOL Load(BYTE* pData, size_t nSize); <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">     BOOL Load(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType); </span>     <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Frees the image data </span>    <br />&nbsp;&nbsp;&nbsp;<span style="color: blue;">void</span> FreeData();<br />  <br /><span style="color: blue;">protected</span>:     <br />&nbsp;&nbsp;&nbsp;<span style="color: blue;">virtual</span> <span style="color: blue;">void</span> PreSubclassWindow();      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Draws the <span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Control</span> </span>    <br />&nbsp;&nbsp;&nbsp;<span style="color: blue;">virtual</span> <span style="color: blue;">void</span> DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);    <br />&nbsp;&nbsp;&nbsp;<span style="color: blue;">virtual</span> BOOL OnEraseBkgnd(CDC* pDC);<br />  <br /><span style="color: blue;">private</span>:      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">Internal image stream buffer </span>    <br />&nbsp;&nbsp;&nbsp;IStream* m_pStream;      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;"><span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">Control</span> flag if a pic is loaded </span>   <br /> &nbsp;&nbsp;&nbsp;BOOL m_bIsPicLoaded;      <br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; font-style: italic;">//</span><span style="color: #008000; font-style: italic;">GDI Plus Token </span>    <br />&nbsp;&nbsp;&nbsp;ULONG_PTR m_gdiplusToken; };</pre><h2>Points of interest</h2><p><code><span style="font-family: Verdana, Arial, sans-serif; font-size: 16px;">这个控件是基于&nbsp;</span></code><code style="color: #990000; font-family: 'Courier New', Courier, mono; font-size: 11pt;">CStatic</code>&nbsp;<span style="font-family: Verdana, Arial, sans-serif; font-size: 10pt; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">control&nbsp;</span><span style="font-family: Verdana, Arial, sans-serif; font-size: 10pt; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900;">设计的（基类使用的是CStatic）</span><span style="font-family: Verdana, Arial, sans-serif; font-size: 12px;">。所以你可以使用CStatic control的各种功能</span><span style="font-family: Verdana, Arial, sans-serif; font-size: 12px;">，但它并不会显示任何文字。对GDI+库的使用使其可以支持各种主流类型的图片。</span></p><h2>History 历史</h2><ul style="font-family: Verdana, Arial, sans-serif;"><li style="font-size: 10pt;">1.0 - Initial release.</li><li style="font-size: 10pt;">1.1 - A bug when drawing the&nbsp;<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">control</span>&nbsp;without a loaded image was corrected.</li><li style="font-size: 10pt;">1.2 - A bug when drawing the&nbsp;<span style="border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #ff9900; font-weight: bold;">control</span>&nbsp;was corrected.<p style="font-size: 10pt;">Loading an image from a resource is disabled due to problems recognizing it correctly as an image.</p></li></ul></div><h2>License</h2><div id="LicenseTerms" style="font-family: Verdana, Arial, sans-serif;"><p style="font-size: 10pt;">This article, along with any associated source code and files, is licensed under&nbsp;<a href="http://www.codeproject.com/info/cpol10.aspx" rel="license" style="color: purple; text-decoration: none;">The Code Project Open License (CPOL)</a></p></div><h2>About the Author</h2><div style="float: right; font-family: Verdana, Arial, sans-serif;"><div style="overflow: hidden;"></div></div><table cellpadding="0" cellspacing="5" border="0" style="color: #000000; font-family: Verdana, Arial, sans-serif; font-size: 14px;"><tbody><tr valign="top" style="font-size: 10pt;"><td id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberPhotoTable" valign="top" style="font-size: 10pt; width: 155px;"><strong><a id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberProfileLink" href="http://www.codeproject.com/Members/TEiseler" style="color: purple; text-decoration: none;">TEiseler</a></strong><br /><br /><center></center><div style="font-size: 8pt !important;"><span id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberJobTitle">Tester / Quality Assurance</span><br /><br /><span id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberLocation"><img src="http://www.codeproject.com/script/Geo/Images/DE.gif" alt="Germany" width="16px" height="11px" style="border: none; max-width: 100%; overflow: auto;" />&nbsp;Germany</span><br /><br /><span id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberType">Member</span></div></td><td style="font-size: 10pt;">&nbsp;<br /><br /></td></tr></tbody></table>本文转自：<a href="http://blog.csdn.net/cashey1991/article/details/7516996" style="font-family: verdana, 'courier new'; line-height: 21px;">http://blog.csdn.net/cashey1991/article/details/7516996</a></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/202033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-07-22 18:09 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/07/22/202033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态创建视图时候 AfxCheckDialogTemplate执行出错</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/05/31/200722.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 31 May 2013 09:02:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/05/31/200722.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/200722.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/05/31/200722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/200722.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/200722.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;"><span style="font-size: 12pt; font-family: Verdana;"></span></p><p style="margin:0cm;margin-bottom:.0001pt;line-height:200%;background:white"><span style="color:#454545">动态创建视图时候</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545"> AfxCheckDialogTemplate</span><span style="color:#454545">执行出错</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="color:#454545">在</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">mfc</span><span style="color:#454545">的</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">sdi</span><span style="color:#454545">架构中，准备多做几个视图，试图类继承自</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">formview</span><span style="color:#454545">，但在动态创建视图的时候出了错误，</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">AfxCheckDialogTemplate</span><span style="color:#454545">执行出错。后来通过搜索发现</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">cformview</span><span style="color:#454545">类关联对话框时候，资源必须具备</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">child</span><span style="color:#454545">属性。</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">1.CFormView</span><span style="color:#454545">类关联的对话框资源必须具有</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">Child</span><span style="color:#454545">属性。</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="color:#454545">由</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">CFormView</span><span style="color:#454545">派生的类，可以关联一个对话框资源。但该对话框资源必须在属性设定中</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">Style</span><span style="color:#454545">选定</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">[Child]</span><span style="color:#454545">属性，否则的话，</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="color:#454545">代码可以编译，但</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">Debug</span><span style="color:#454545">运行会报告一个断言错误，跟踪代码，断言在：</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">#ifdef _DEBUG</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">&nbsp;&nbsp;&nbsp; // dialog template must exist and be invisible with WS_CHILD set</span><span style="font-size:10.5pt; line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">&nbsp;&nbsp;&nbsp; if (!_AfxCheckDialogTemplate(m_lpszTemplateName, TRUE))</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">&nbsp;&nbsp;&nbsp; {</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASSERT(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // invalid dialog template name</span><span style="font-size:10.5pt;line-height: 200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostNcDestroy();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // cleanup if Create fails too soon</span><span style="font-size: 10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">&nbsp;&nbsp;&nbsp; }</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">#endif //_DEBUG</span></p>  <p style="margin: 0cm 0cm 0.0001pt; line-height: 200%; background-color: white; background-position: initial initial; background-repeat: initial initial;"><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">2.CFormView</span><span style="color:#454545">比较特殊，是一个父窗体嵌套了一个子窗体，所以，</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">CFormView</span><span style="color:#454545">类的派生类的实例不响应</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">WM_CLOSE</span><span style="color:#454545">消息，仅仅响应</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">WM_DESTROY</span><span style="color:#454545">消息。</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="color:#454545">另外，若要用代码关闭当前</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">View,</span><span style="color:#454545">也不能直接：</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">PostMessage(WM_CLOSE,0,0);</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="color:#454545">而必须先获取父窗体的指针，然后对父窗体发送</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">WM_CLOSE</span><span style="color:#454545">消息才行，像这样：</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#454545">GetParent()-&amp;gt;PostMessage(WM_CLOSE,0,0);</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="color:#454545">才能够达到目的。</span><span style="font-size:10.5pt;line-height:200%;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;; color:#454545"><br /> </span><span style="color:#454545">《深入浅出</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">MFC</span><span style="color:#454545">》第八章</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">461</span><span style="color:#454545">页图</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">8-1</span><span style="color:#454545">清楚地说明了这种情况，</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">View</span><span style="color:#454545">窗口是</span><span style="font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;; color:#454545">CChildFrame</span><span style="color:#454545">窗口的子窗口。</span></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;"><span style="font-size: 12pt; font-family: Verdana;"></span></p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/200722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-05-31 17:02 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/05/31/200722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC拖动无标题窗口</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/05/30/200689.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 30 May 2013 00:35:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/05/30/200689.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/200689.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/05/30/200689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/200689.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/200689.html</trackback:ping><description><![CDATA[拖动无标题的窗口可以重载<span style="color: #333333; font-family: arial, 'courier new', courier, 宋体, monospace; line-height: 24px; white-space: pre-wrap;"></span><span style="color: #333333; font-family: arial, 'courier new', courier, 宋体, monospace; line-height: 24px; white-space: pre-wrap;">WM_LBUTTONDOWN，添加如下代码：</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->SendMessage(WM_SYSCOMMAND,0xF012,0);</div> 或<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->PostMessage&nbsp;(WM_NCLBUTTONDOWN&nbsp;,&nbsp;HTCAPTION&nbsp;,&nbsp;MAKELPARAM(point.x&nbsp;,&nbsp;point.&nbsp;y&nbsp;));</div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/200689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-05-30 08:35 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/05/30/200689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC设置透明度</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200672.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 29 May 2013 03:18:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200672.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/200672.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/200672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/200672.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 12pt;">代码示例：</span><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">#define</span><span style="font-family: Verdana;">&nbsp;LWA_COLORKEY&nbsp;0x00000001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">方式</span><br /><span style="color: #0000ff; font-family: Verdana;">#define</span><span style="font-family: Verdana;">&nbsp;WS_EX_LAYERED&nbsp;0x00080000&nbsp;</span><br /><br /><span style="font-family: Verdana;">typedef&nbsp;BOOL&nbsp;(WINAPI&nbsp;*lpfnSetLayeredWindowAttributes)(HWND&nbsp;hWnd,&nbsp;COLORREF&nbsp;crKey,&nbsp;BYTE&nbsp;bAlpha,&nbsp;DWORD&nbsp;dwFlags);&nbsp;</span><br /><span style="font-family: Verdana;">lpfnSetLayeredWindowAttributes&nbsp;SetLayeredWindowAttributes;&nbsp;</span><br /><br /><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">设置成边缘透明&nbsp;</span><br /><span style="font-family: Verdana;">COLORREF&nbsp;maskColor=#000000;</span><br /><br /><span style="font-family: Verdana;">HMODULE&nbsp;hUser32&nbsp;=&nbsp;GetModuleHandle("user32.dll");&nbsp;</span><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">加载动态链接库</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">SetLayeredWindowAttributes&nbsp;=&nbsp;(lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32,"SetLayeredWindowAttributes");&nbsp;</span><br /><br /><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">取得SetLayeredWindowAttributes函数指针&nbsp;</span><br /><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">为窗口加入WS_EX_LAYERED扩展属性</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">SetWindowLong(</span><span style="color: #0000ff; font-family: Verdana;">this</span><span style="font-family: Verdana;">-&gt;GetSafeHwnd(),&nbsp;GWL_EXSTYLE,&nbsp;GetWindowLong(GetSafeHwnd(),&nbsp;GWL_EXSTYLE)^WS_EX_LAYERED);&nbsp;</span><br /><br /><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">调用SetLayeredWinowAttributes函数</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">SetLayeredWindowAttributes(</span><span style="color: #0000ff; font-family: Verdana;">this</span><span style="font-family: Verdana;">-&gt;GetSafeHwnd(),&nbsp;maskColor,&nbsp;192,&nbsp;LWA_COLORKEY);&nbsp;</span><br /><br /><span style="font-family: Verdana;">FreeLibrary(hUser32);&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">释放动态链接库</span></div><br /><span times="" new=""  roman";="" mso-hansi-font-family:"="" roman";color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">以上代码加入</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">OnInitDialog()</span><span times="" new=""  roman";mso-hansi-font-family:"="" roman";="" color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">中，其中</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">&nbsp;SetLayeredWindowAttributes(this-&gt;GetSafeHwnd(), maskColor, 192, LWA_COLORKEY);&nbsp;</span><span times="" new=""  roman";="" mso-hansi-font-family:"="" roman";color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">里，</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">maskColor</span><span times="" new=""  roman";mso-hansi-font-family:"="" roman";color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">为将进行透明处理的颜色，</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">&nbsp;192</span><span times="" new=""  roman";mso-hansi-font-family:"="" roman";="" color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">为透明度，</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">&nbsp;LWA_COLORKEY</span><span times="" new=""  roman";""="" "="" roman";color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">为透明方式。</span><span style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ffffff;"><br /><br /></span><span times="" new=""  roman";="" mso-hansi-font-family:"="" roman";color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">若要透明整个对话框，则</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">LWA_COLORKEY=2;<br /></span><span times="" new=""  roman";="" mso-hansi-font-family:"="" roman";color:black;"="" style="line-height: 25px; color: #333333; background-color: #ffffff; font-family: Verdana; font-size: 12pt;">若要对选定颜色透明，则</span><span style="line-height: 25px; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">LWA_COLORKEY=1;</span><br />&nbsp; &nbsp;<br /><span style="font-family: Verdana; font-size: 12pt;">本文转自：</span><a href="http://chenjiuliang.blog.163.com/blog/static/36572155201151735735374/"><span style="font-family: Verdana; font-size: 12pt;">http://chenjiuliang.blog.163.com/blog/static/36572155201151735735374/</span></a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/200672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-05-29 11:18 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC设置对话框背景图片</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200671.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 29 May 2013 03:02:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200671.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/200671.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/200671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/200671.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 12pt;">1、导入Bitmap资源图片，</span><br /><span style="font-family: Verdana; font-size: 12pt;">2、重载WM_PAINT &#8212;&#8212;&gt;</span><span style="color: #454545; font-family: Verdana; background-color: #ffffff; font-size: 12pt;">void CXXXDlg::OnPaint()<br /></span><span style="font-family: Verdana; font-size: 12pt;">3、添加如下代码：<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; CRect&nbsp;&nbsp;&nbsp;rect;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&amp;rect);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CDC&nbsp;&nbsp;&nbsp;dcMem;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dcMem.CreateCompatibleDC(&amp;dc);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;&nbsp;&nbsp;bmpBackground;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bmpBackground.LoadBitmap(IDB_BITMAP_TOOL);&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">IDB_BITMAP_TOOL是你自己的图对应的ID&nbsp;</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;BITMAP&nbsp;&nbsp;&nbsp;bitmap;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bmpBackground.GetBitmap(&amp;bitmap);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;&nbsp;&nbsp;*pbmpOld=dcMem.SelectObject(&amp;bmpBackground);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dc.StretchBlt(0,0,rect.Width(),rect.Height(),&amp;dcMem,0,0,&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); &nbsp;&nbsp;</div><span style="font-family: Verdana; font-size: 12pt;"><br />其他方法：<br />重写WM_ERASEBKGND消息<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->BOOL&nbsp;CxxDialog::OnEraseBkgnd(CDC*&nbsp;pDC)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;CDialog::OnEraseBkgnd(pDC);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">忘记要不要执行父类的这个了.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CDC&nbsp;&nbsp;memdc;<br />&nbsp;&nbsp;&nbsp;&nbsp;memdc.CreateCompatibleDC(pDC);<br />&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;bmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;*pOldBmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BITMAP&nbsp;bm;<span style="color: #008000; ">//</span><span style="color: #008000; ">用来保存图片的长宽等信息</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;bmp.LoadBitmap(IDB_BITMAP1);<br />&nbsp;&nbsp;&nbsp;&nbsp;bmp.GetBitmap(&amp;bm);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">将图片选进缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;pOldBmp&nbsp;=&nbsp;(CBitmap&nbsp;*)memdc.SelectObject(&amp;bmp);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">如果图片跟对话框的客户区一样大，直接用BitBlt就可以<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">pDC-&gt;BitBlt(0,&nbsp;0,&nbsp;rcWnd.Width(),&nbsp;rcWnd.Height(),&nbsp;&amp;memdc,&nbsp;0,&nbsp;0,&nbsp;SRCCOPY);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">如果图片比对话框的背景小，就要用StrechBlt来拉伸图片</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;StrechBlt(0,&nbsp;0,&nbsp;rcWnd.Width,&nbsp;rcWnd.Height(),&nbsp;&amp;memdc,&nbsp;0,&nbsp;0,&nbsp;bm.bmWidth,bm.bmHeight,&nbsp;SRCCOPY);<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放DC</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;memdc.SelectObject(pOldBmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;memdc.DeleteDC();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TRUE;&nbsp;<br />}</div><span style="font-family: Verdana; font-size: 12pt;"><br />其他方法：</span><a href="http://blog.csdn.net/ply421600/article/details/6692967">http://blog.csdn.net/ply421600/article/details/6692967</a><span style="font-family: Verdana; font-size: 12pt;"><br /></span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/200671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-05-29 11:02 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/05/29/200671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Base64编解码(C++版)</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198626.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 20 Mar 2013 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198626.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/198626.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/198626.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/198626.html</trackback:ping><description><![CDATA[.h文件:<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;ZBase64<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">编码<br />&nbsp;&nbsp;&nbsp;&nbsp;DataByte<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[in]输入的数据长度,以字节为单位<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;Encode(<span style="color: #0000FF; ">const</span>&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;Data,<span style="color: #0000FF; ">int</span>&nbsp;DataByte);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">解码<br />&nbsp;&nbsp;&nbsp;&nbsp;DataByte<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[in]输入的数据长度,以字节为单位<br />&nbsp;&nbsp;&nbsp;&nbsp;OutByte<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[out]输出的数据长度,以字节为单位,请不要通过返回值计算<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出数据的长度<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;Decode(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;Data,<span style="color: #0000FF; ">int</span>&nbsp;DataByte,<span style="color: #0000FF; ">int</span>&amp;&nbsp;OutByte);<br />};</div> <br />.cpp文件：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;"stdAfx.h"<br />#include&nbsp;"ZBase64.h"<br /><br /><span style="color: #0000FF; ">string</span>&nbsp;ZBase64::Encode(<span style="color: #0000FF; ">const</span>&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;Data,<span style="color: #0000FF; ">int</span>&nbsp;DataByte)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">编码表</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">返回值</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strEncode;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;Tmp[4]={0};<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;LineLength=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;(<span style="color: #0000FF; ">int</span>)(DataByte&nbsp;/&nbsp;3);i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp[1]&nbsp;=&nbsp;*Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp[2]&nbsp;=&nbsp;*Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp[3]&nbsp;=&nbsp;*Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[Tmp[1]&nbsp;&gt;&gt;&nbsp;2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[((Tmp[1]&nbsp;&lt;&lt;&nbsp;4)&nbsp;|&nbsp;(Tmp[2]&nbsp;&gt;&gt;&nbsp;4))&nbsp;&amp;&nbsp;0x3F];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[((Tmp[2]&nbsp;&lt;&lt;&nbsp;2)&nbsp;|&nbsp;(Tmp[3]&nbsp;&gt;&gt;&nbsp;6))&nbsp;&amp;&nbsp;0x3F];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[Tmp[3]&nbsp;&amp;&nbsp;0x3F];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(LineLength+=4,LineLength==76)&nbsp;{strEncode+="\r\n";LineLength=0;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">对剩余数据进行编码</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Mod=DataByte&nbsp;%&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Mod==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp[1]&nbsp;=&nbsp;*Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[(Tmp[1]&nbsp;&amp;&nbsp;0xFC)&nbsp;&gt;&gt;&nbsp;2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[((Tmp[1]&nbsp;&amp;&nbsp;0x03)&nbsp;&lt;&lt;&nbsp;4)];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;"==";<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(Mod==2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp[1]&nbsp;=&nbsp;*Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp[2]&nbsp;=&nbsp;*Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[(Tmp[1]&nbsp;&amp;&nbsp;0xFC)&nbsp;&gt;&gt;&nbsp;2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[((Tmp[1]&nbsp;&amp;&nbsp;0x03)&nbsp;&lt;&lt;&nbsp;4)&nbsp;|&nbsp;((Tmp[2]&nbsp;&amp;&nbsp;0xF0)&nbsp;&gt;&gt;&nbsp;4)];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;EncodeTable[((Tmp[2]&nbsp;&amp;&nbsp;0x0F)&nbsp;&lt;&lt;&nbsp;2)];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strEncode+=&nbsp;"=";<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strEncode;<br />}<br /><br /><span style="color: #0000FF; ">string</span>&nbsp;ZBase64::Decode(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;Data,<span style="color: #0000FF; ">int</span>&nbsp;DataByte,<span style="color: #0000FF; ">int</span>&amp;&nbsp;OutByte)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">解码表</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;DecodeTable[]&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,<br />,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,<br />,&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;'+'</span><span style="color: #008000; "><br /></span>,&nbsp;0,&nbsp;0,<br />,&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;'/'</span><span style="color: #008000; "><br /></span>,&nbsp;53,&nbsp;54,&nbsp;55,&nbsp;56,&nbsp;57,&nbsp;58,&nbsp;59,&nbsp;60,&nbsp;61,&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;'0'-'9'</span><span style="color: #008000; "><br /></span>,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,<br />,&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;11,&nbsp;12,<br />,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;'A'-'Z'</span><span style="color: #008000; "><br /></span>,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,<br />,&nbsp;27,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;36,&nbsp;37,&nbsp;38,<br />,&nbsp;40,&nbsp;41,&nbsp;42,&nbsp;43,&nbsp;44,&nbsp;45,&nbsp;46,&nbsp;47,&nbsp;48,&nbsp;49,&nbsp;50,&nbsp;51,&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;'a'-'z'</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">返回值</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strDecode;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nValue;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(i&nbsp;&lt;&nbsp;DataByte)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*Data&nbsp;!=&nbsp;'\r'&nbsp;&amp;&amp;&nbsp;*Data!='\n')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nValue&nbsp;=&nbsp;DecodeTable[*Data++]&nbsp;&lt;&lt;&nbsp;18;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nValue&nbsp;+=&nbsp;DecodeTable[*Data++]&nbsp;&lt;&lt;&nbsp;12;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDecode+=(nValue&nbsp;&amp;&nbsp;0x00FF0000)&nbsp;&gt;&gt;&nbsp;16;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutByte++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*Data&nbsp;!=&nbsp;'=')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nValue&nbsp;+=&nbsp;DecodeTable[*Data++]&nbsp;&lt;&lt;&nbsp;6;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDecode+=(nValue&nbsp;&amp;&nbsp;0x0000FF00)&nbsp;&gt;&gt;&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutByte++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*Data&nbsp;!=&nbsp;'=')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nValue&nbsp;+=&nbsp;DecodeTable[*Data++];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDecode+=nValue&nbsp;&amp;&nbsp;0x000000FF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutByte++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;回车换行,跳过</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strDecode;<br />}</div><br /><font face="宋体" size="2"><span style="line-height: 20px;">使用示例（结合CxImage库）：</span></font><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CString&nbsp;CScanDlg::EncodeImage()<br />{<span style="color: #008000; ">//</span><span style="color: #008000; ">对图片进行Base64编码</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;ZBase64&nbsp;zBase;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">图片编码</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CxImage&nbsp;&nbsp;image;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;定义一个CxImage对象&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;image.Load(<span style="color: #0000FF; ">this</span>-&gt;m_strImgPath,&nbsp;CXIMAGE_FORMAT_JPG);&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">先装载jpg文件,需要指定文件类型</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;size=0;<span style="color: #008000; ">//</span><span style="color: #008000; ">得到图像大小</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;BYTE*&nbsp;buffer=0;<span style="color: #008000; ">//</span><span style="color: #008000; ">存储图像数据的缓冲</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;image.Encode(buffer,size,CXIMAGE_FORMAT_JPG);<span style="color: #008000; ">//</span><span style="color: #008000; ">把image对象中的图像以type类型数据copy到buffer</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strTmpResult=zBase.Encode(buffer,size);<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;strTmpResult.c_str();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;result;<br />}</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;CScanDlg::DecodeImageData(CString&nbsp;strData)<br />{<span style="color: #008000; ">//</span><span style="color: #008000; ">对Base64编码过的数据解码并显示原图片</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;ZBase64&nbsp;zBase;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;OutByte=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strTmpResult=zBase.Decode(strData,strData.GetLength(),OutByte);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,len&nbsp;=&nbsp;strTmpResult.length();<br />&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;*buffer&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BYTE[len];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i=0;i&lt;len;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[i]&nbsp;=&nbsp;strTmpResult[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;CxImage&nbsp;image(buffer,len,CXIMAGE_FORMAT_JPG);<span style="color: #008000; ">//</span><span style="color: #008000; ">把内存缓冲buffer中的数据构造成Image对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;buffer;<br />&nbsp;&nbsp;&nbsp;&nbsp;CDC*&nbsp;hdc&nbsp;=&nbsp;m_picture.GetDC();<br />&nbsp;&nbsp;&nbsp;&nbsp;m_bitmap&nbsp;=&nbsp;image.MakeBitmap(hdc-&gt;m_hDC);<br />&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;h0ldBmp&nbsp;=&nbsp;m_picture.SetBitmap(m_bitmap);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(h0ldBmp)&nbsp;DeleteObject(h0ldBmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(hdc-&gt;m_hDC)&nbsp;m_picture.ReleaseDC(hdc);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m_bitmap)&nbsp;DeleteObject(m_bitmap);<br />}</div><br />本文转自：http://www.cnblogs.com/phinecos/archive/2008/10/10/1308272.html<img src ="http://www.cppblog.com/wanghaiguang/aggbug/198626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-03-20 14:00 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008打开资源文件时显示说没有安装这个ActiveX控件 "{648A5600-2C6E-101B-82B6-000000000014</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198617.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 20 Mar 2013 02:23:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198617.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/198617.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/198617.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/198617.html</trackback:ping><description><![CDATA[<p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;"><strong>手动注册：</strong><br /><br /></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: Verdana; font-size: 12pt;">大家知道，当我们安装VC++6.0/VB6.0时，如果选择了ACtiveX控件项（自定义安装），MSComm控件就会自动安装在计算机上了，并在系统文件夹下多了3个文件：Mscomm.srg, Mscomm32.ocx,Mscomm32.dep</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">　　注意，操作系统不同，则系统文件夹不同：</span><br /><span style="font-family: Verdana; font-size: 12pt;">　　　　　　　Win98:&nbsp;&nbsp;&nbsp; windows/system</span><br /><span style="font-family: Verdana; font-size: 12pt;">　　　　　　　Win2000:&nbsp; winnt/system32</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp; 那么用了MSComm控件的程序在发布时或者在VS2008开发环境下如何来注册MSComm控件呢？发布程序时可以用安装程序，我们这里不介绍，只谈谈如何手工来注册安装MSComm控件。</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;">　</p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">　　第一步：将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中。要注意的是，MSComm控件是要授权的，所以必须将其使用&#8220;执照&#8221;Licence 在注册表中登记注册，下一步就是注册方法。至于为什么要这样做，可以看看下面的网页：</span><a href="http://support.microsoft.com/support/kb/articles/q151/7/71.asp" style="color: #000000; text-decoration: initial;"><span style="font-family: Verdana; font-size: 12pt;">http://support.microsoft.com/support/kb/articles/q151/7/71.asp</span></a></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;">　　</p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">　　第二步：用Windows下的注册工具regsvr32注册该OCX控件，点击&#8220;开始&#8221;-&gt;"运行"，再在中填入（假设操作安装在C盘，WIN2000）：</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Regsvr32&nbsp;&nbsp;</span><a href="file:///C:/winnt/system32/Mscomm32.ocx" style="color: #000000; text-decoration: initial;"><span style="font-family: Verdana; font-size: 12pt;">C:\winnt\system32\Mscomm32.ocx</span></a></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;">　</p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp; 　第三步：在注册表中手工新建一个主键项：先在点击&#8220;开始&#8221;-&gt;"运行"，再在中填入regedit命令打开注册表，找到HKEY_CLASSES_ROOT\Licenses，在其中添加主键</span><br /><span style="font-family: Verdana; font-size: 12pt;">4250E830-6AC2-11cf-8ADB-00AA00C00905　并将内容设置为：</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">　　　　　　　kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">　　　（注：这项内容也可以用记事本程序打开Mscomm.srg文件看到）</span></p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;">　</p><p align="left" style="font-family: 宋体, Arial, 'Times New Roman'; font-size: 12px; line-height: normal; background-color: #ffffff; margin-top: 3px; margin-bottom: 3px;"><span style="font-family: Verdana; font-size: 12pt;">　　在VC（包括VC.NET）中应用，我已经介绍多次了，这里再说说在Delphi中的应用：进入Delphi环境中，选择菜单命令：Component-&gt;Import ActiveX Control,在列表中可以看到Microsoft Comm Control，version 6.0, 选中后点击Install按钮,就完成安装。在ActiveX控件页上可以看到MSComm控件的电话图标。<br /><br /></span><span style="font-family: Verdana; font-size: 12pt;">以上转自：</span><span style="font-size: 12pt;">http://www.gjwtech.com/scomm/manaualregistermscomm.htm<br /></span><span style="font-size: 12pt;"><br /><br /><strong>自动注册：</strong><br /></span>&nbsp; &nbsp; <span style="font-size: 12pt;">&nbsp; <br /></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 12pt;">运行附件中的&#8220;</span><span style="font-size: 12pt;">注册.cmd&#8221;完成自动注册&nbsp;</span><span style="font-size: medium;">MSComm控件。</span>&nbsp;&nbsp;<a title="MSComm" href="/Files/wanghaiguang/mscomm.rar"><span style="font-size: 12pt;">MSComm</span></a><span style="font-size: medium;"><br /></span>&nbsp; &nbsp; &nbsp; &nbsp;</p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/198617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-03-20 10:23 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/03/20/198617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008 下error PRJ0003 : Error spawning 'cmd.exe'的解决方法</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/03/07/198255.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 07 Mar 2013 02:49:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/03/07/198255.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/198255.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/03/07/198255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/198255.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/198255.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-indent: 20px; background-color: #ffffff;"></span><span style="font-family: Verdana; font-size: 12pt; line-height: 19px; text-indent: 20px; background-color: #ffffff; color: #0000ff;">方法1：<br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 19px; text-indent: 20px; background-color: #ffffff;"><br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 19px; text-indent: 20px; background-color: #ffffff;">In the Options go into Projects and Solutions -&gt; VC++ Directories page and place this rows:<br /><br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 19px; text-indent: 20px; background-color: #ffffff;">$(SystemRoot)\System32<br /></span><span style="background-color: #ffffff; font-family: Verdana; font-size: 12pt; line-height: 19px; text-indent: 20px;">$(SystemRoot)<br /></span><span style="background-color: #ffffff; font-family: Verdana; font-size: 12pt; line-height: 19px; text-indent: 20px;">$(SystemRoot)\System32\wbem<br /></span><span style="background-color: #ffffff; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-indent: 20px;"><br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 16px; background-color: #ffffff;">适用VC8的各种工程项目（包括移动设备的项目），如果在加了以后还出现这样的错误提示，将上面的三句删除掉，重新加一次就可以。<br /><br /></span><span style="font-size: 12pt; font-family: Verdana; color: #0000ff;">方法2：</span><br /><br /><span style="font-family: Verdana; font-size: 12pt; line-height: 16px; background-color: #ffffff;">在Visual Studio中，选择工具-&gt;选项-&gt;工程和解决方案-&gt;VC++目录&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 16px; background-color: #ffffff;">点击上方的像文件夹的按钮-新建行，然后在空白处添加cmd.exe所在的目录C:\Windows\System32\ （如果你是默认装在C盘的话）点击确定，就OK了。&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 16px; background-color: #ffffff;">In VS, go to&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 16px; background-color: #ffffff;">tools&gt;options&gt;projects and solutions&gt;VC++ Directories&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 16px; background-color: #ffffff;">click the little folder button (new line) then in the new line that appears put:&nbsp;<br /><br /></span><span style="font-size: 12pt; font-family: Verdana;">本文转自：</span><span style="font-size: 12pt; font-family: Verdana;">http://www.cppblog.com/zhangyq/archive/2009/02/16/73940.html</span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/198255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-03-07 10:49 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/03/07/198255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC检测网络连接和ping IP地址</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198157.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 01 Mar 2013 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198157.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/198157.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/198157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/198157.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 12pt;">代码示例：<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><div>#include &lt;Sensapi.h&gt;</div><div>#pragma comment(lib, "Sensapi.lib")<br /></div>BOOL&nbsp;CheckNetIsOK(<span style="color: #0000FF; ">const</span>&nbsp;CString&nbsp;sUpdateIP)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Judge&nbsp;Network&nbsp;is&nbsp;Connected</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nCount&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dw;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;IsNetworkAlive(&amp;dw))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(10000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sNetWorkConnect;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sNetWorkConnect.Format("第%d次网络未成功连接,&nbsp;10秒后重试",&nbsp;nCount);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.SetWindowText(sNetWorkConnect);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCount++&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(nCount&nbsp;&lt;4);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(nCount&nbsp;==&nbsp;4)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.SetWindowText("网络连接失败,&nbsp;共检测40秒");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;n&nbsp;=&nbsp;CCommonFun::WinExecAndWait32(_T("ping.exe"),&nbsp;sUpdateIP&nbsp;+&nbsp;"&nbsp;-n&nbsp;2"<span style="color: #008000; ">/*</span><span style="color: #008000; ">sCmdPara</span><span style="color: #008000; ">*/</span>,&nbsp;NULL,&nbsp;10000);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(n&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TRUE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sNetWorkConnect;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sNetWorkConnect.Format("网络连接正常,&nbsp;Ping:%s&nbsp;失败,&nbsp;请检测此IP对应的服务器是否正常工作",&nbsp;sUpdateIP);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.SetWindowText(sNetWorkConnect);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><span style="font-family: Verdana; font-size: 12pt;"><br /></span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/198157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-03-01 15:51 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC CEdit显示追加信息</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198156.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 01 Mar 2013 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198156.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/198156.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/198156.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/198156.html</trackback:ping><description><![CDATA[代码示例：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;LineNum=m_recvCtrl.GetLineCount();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(LineNum&nbsp;&gt;&nbsp;100)&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;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;超过最大信息显示行数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.SetSel(0,&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.Clear();&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;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;清空编辑框</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CTime&nbsp;RevTime&nbsp;=&nbsp;CTime::GetCurrentTime();<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;Temp&nbsp;=&nbsp;RevTime.Format("[%Y/%m/%d&nbsp;%H:%M:%S]:&nbsp;");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strEdit;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.GetWindowText(strEdit);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.SetSel(strEdit.GetLength(),&nbsp;strEdit.GetLength());&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_recvCtrl.ReplaceSel(Temp&nbsp;+&nbsp;sText&nbsp;+&nbsp;"\n");</div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/198156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-03-01 15:50 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/03/01/198156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查找CString里面出现某个字符的次数 </title><link>http://www.cppblog.com/wanghaiguang/archive/2013/02/19/197935.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 19 Feb 2013 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/02/19/197935.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/197935.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/02/19/197935.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/197935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/197935.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">1、</span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">Replace函数替换查找<br /><br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">Replace函数</span><span style="font-family: Verdana; line-height: 24px; text-indent: 30px; background-color: #ffffff; font-size: 12pt;">返回值：返回被替换的字符数。如果这个字符串没有改变则返回零。</span><br /><span style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;"></span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;"><br />CString sTest="aabbccaadd"; <br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">int nCount=s.Replace("a","a");<br /></span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;"><br />nCount</span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">就是你的想要的值<br /></span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">CString::Replace</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">int Replace( TCHAR chOld, TCHAR chNew );</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">Return Value</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">The number of replaced instances of the character. Zero if the string isn't changed.<br /><br /><br /></span><span style="font-family: Verdana; font-size: 12pt;">2、</span><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">标准函数 count_if<br /></span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">#include &lt;iostream&gt;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">#include &lt;string&gt;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">#include &lt;functional&gt;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">#include &lt;algorithm&gt;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">using namespace std;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">int main( void )</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">{</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;const string a = " 12113";</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; count_if( a.begin(), a.end(), bind2nd(equal_to&lt;char&gt;(),'1') ) &lt;&lt; endl;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;return 0;</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">}</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">CString也一样，但它没有标准的迭代器，因此需要写成</span><br style="font-family: Verdana, 宋体; font-size: 12px; line-height: 17.33333396911621px; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 12pt; line-height: 17.33333396911621px; background-color: #ffffff;">count_if( (LPCTSTR)a, (LPCTSTR)a+a.GetLength(), bind2nd(equal_to&lt;TCHAR&gt;(),_T('某字符')) )</span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/197935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-02-19 14:34 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/02/19/197935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC获取磁盘空间信息</title><link>http://www.cppblog.com/wanghaiguang/archive/2013/01/16/197324.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 16 Jan 2013 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2013/01/16/197324.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/197324.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2013/01/16/197324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/197324.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/197324.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 12pt;">示例代码：</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-family: Verdana; font-size: 12pt;">DWORD&nbsp;CCommonFun::GetDesignatedDiskFreeSpace(</span><span style="color: #0000ff; font-family: Verdana; font-size: 12pt;">const</span><span style="font-family: Verdana; font-size: 12pt;">&nbsp;CString&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">&amp;</span><span style="font-family: Verdana; font-size: 12pt;">szPath)</span><br /><span style="font-family: Verdana; font-size: 12pt;">{</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwTotalDiskSpace,dwFreeDiskSpace,dwUsedDiskSpace;&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;ULARGE_INTEGER&nbsp;uiFreeBytesAvailableToCaller;</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;ULARGE_INTEGER&nbsp;uiTotalNumberOfBytes;</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;ULARGE_INTEGER&nbsp;uiTotalNumberOfFreeBytes;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana; font-size: 12pt;">if</span><span style="font-family: Verdana; font-size: 12pt;">(GetDiskFreeSpaceEx(szPath,&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">&amp;</span><span style="font-family: Verdana; font-size: 12pt;">uiFreeBytesAvailableToCaller,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: Verdana; font-size: 12pt;">&amp;</span><span style="font-family: Verdana; font-size: 12pt;">uiTotalNumberOfBytes,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: Verdana; font-size: 12pt;">&amp;</span><span style="font-family: Verdana; font-size: 12pt;">uiTotalNumberOfFreeBytes))</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;{</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwTotalDiskSpace&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">=</span><span style="font-family: Verdana; font-size: 12pt;">&nbsp;(DWORD)(uiTotalNumberOfBytes.QuadPart&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">/</span>&nbsp;<span style="font-family: Verdana; font-size: 12pt;">1024</span>&nbsp;<span style="font-family: Verdana; font-size: 12pt;">/</span>&nbsp;<span style="font-family: Verdana; font-size: 12pt;">1024</span><span style="font-family: Verdana; font-size: 12pt;">);</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwFreeDiskSpace&nbsp;&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">=</span><span style="font-family: Verdana; font-size: 12pt;">&nbsp;(DWORD)(uiFreeBytesAvailableToCaller.QuadPart&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">&gt;&gt;</span>&nbsp;<span style="font-family: Verdana; font-size: 12pt;">20</span><span style="font-family: Verdana; font-size: 12pt;">);</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwUsedDiskSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">=</span><span style="font-family: Verdana; font-size: 12pt;">&nbsp;dwTotalDiskSpace&nbsp;</span><span style="font-family: Verdana; font-size: 12pt;">-</span><span style="font-family: Verdana; font-size: 12pt;">&nbsp;dwFreeDiskSpace;</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE(</span><span style="font-family: Verdana; font-size: 12pt;">"</span><span style="font-family: Verdana; font-size: 12pt;">硬盘%s::总空间%dMB,&nbsp;已用%dMB,&nbsp;可用%dMB\n</span><span style="font-family: Verdana; font-size: 12pt;">"</span><span style="font-family: Verdana; font-size: 12pt;">,&nbsp;szPath,</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwTotalDiskSpace,&nbsp;dwUsedDiskSpace,&nbsp;dwFreeDiskSpace);</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana; font-size: 12pt;">return</span><span style="font-family: Verdana; font-size: 12pt;">&nbsp;dwFreeDiskSpace;</span><br /><span style="font-family: Verdana; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; font-family: Verdana; font-size: 12pt;">return</span>&nbsp;<span style="font-family: Verdana; font-size: 12pt;">-</span><span style="font-family: Verdana; font-size: 12pt;">1</span><span style="font-family: Verdana; font-size: 12pt;">;</span><br /><span style="font-family: Verdana; font-size: 12pt;">}</span></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/197324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2013-01-16 17:00 <a href="http://www.cppblog.com/wanghaiguang/archive/2013/01/16/197324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>