﻿<?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++博客-brent's hut-随笔分类-C++</title><link>http://www.cppblog.com/aqazero/category/1964.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 07 Feb 2020 14:03:47 GMT</lastBuildDate><pubDate>Fri, 07 Feb 2020 14:03:47 GMT</pubDate><ttl>60</ttl><item><title>Use Skia in MFC or Win32 application</title><link>http://www.cppblog.com/aqazero/archive/2020/02/07/217109.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 06 Feb 2020 23:53:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2020/02/07/217109.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/217109.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2020/02/07/217109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/217109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/217109.html</trackback:ping><description><![CDATA[<strong>What is Skia</strong><br />
<br />
<span style="font-family: Roboto, Arial, sans-serif; font-size: 15px;">Skia is an open source 2D graphics library which provides common APIs that work across a variety of hardware and software platforms. It serves as the graphics engine for Google Chrome and Chrome OS, Android, Mozilla Firefox and Firefox OS, and many other products.<br />
<br />
<strong>How to download and build Skia</strong><br />
<br />
</span>Just follow&nbsp;<a href="https://skia.org/user/download" style="font-size: medium;">https://skia.org/user/download</a>, and do it step by step, we will need a static build for use lately.<br />
<br />
<strong>How to use Skia in a MFC application</strong><br />
<br />
1. Create your MFC application<br />
<br />
2. Add Skia path to "VC++ Directories" of the project<br />
<br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/SkiaMfc.include.png" width="492" height="342" alt="" /><br /><br />3. Add Skia library paths to "Additional Library Directories"<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/SkiaMfc.libDir.png" width="492" height="342" alt="" /><br /><br />4. Add "uafxcw.lib;LIBCMT.lib;opengl32.lib;glu32.lib;skia.lib;sk_app.GLWindowContext.obj;sk_app.GLWindowContext_win.obj" to "Additional Dependencies". Add "uafxcw.lib;LIBCMT.lib;" to "Ignore Specific Default Libraries."<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/SkiaMfc.libAdd.png" width="492" height="342" alt="" /><br /><br />5. In XXXDlg.h:<br /><div><em style="color: #00ccff;">#include "tools\sk_app\DisplayParams.h"</em></div><div><em style="color: #00ccff;">#include "tools\sk_app\WindowContext.h"</em></div><br /><div>protected:</div><div><span style="white-space:pre">	</span>HICON m_hIcon;</div><div><span style="white-space: pre; color: #00ccff;">	</span><em style="color: #00ccff;">sk_app::DisplayParams m_paras;</em></div><div><em><span style="white-space:pre">	</span></em><em style="color: #00ccff;">std::unique_ptr&lt;sk_app::WindowContext&gt; m_skaContext;</em></div><br />6. In XXXDlg.cpp:<br /><br /><div><em style="color: #00ccff;">#include "include\core\SkPoint.h"</em></div><div><em style="color: #00ccff;">#include "include\core\SkFont.h"</em></div><div><em style="color: #00ccff;">#include "include\core\SkCanvas.h"</em></div><div><em style="color: #00ccff;">#include "include\core\SkSurface.h"</em></div><div><em style="color: #00ccff;">#include "tools\sk_app\win\WindowContextFactory_win.h"</em></div><div><span style="color: #00ccff;"><em>using namespace sk_app;</em><br /><br /></span><div>BOOL XXXDlg::OnInitDialog()</div><div>{<br /><span style="white-space:pre">	</span><em style="color: #00ccff;">m_skaContext = window_context_factory::MakeGLForWin(m_hWnd, m_paras);</em><br /><span style="white-space:pre">	</span>return TRUE;<br />}</div></div><br /><div>void XXXDlg::OnSize(UINT nType, int cx, int cy)</div><div>{</div><div><em><span style="white-space: pre; color: #00ccff;">	</span></em><em style="color: #00ccff;">if(m_skaContext)</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">m_skaContext-&gt;resize(cx, cy);</em></div><div>}<br /><br /><div>void XXXDlg::OnPaint()</div><div>{<br /><div><em><span style="white-space: pre; color: #00ccff;">	</span></em><em style="color: #00ccff;">sk_sp&lt;SkSurface&gt; backbuffer = m_skaContext-&gt;getBackbufferSurface();</em></div><div><span style="white-space:pre"><em></em></span></div><div><em><span style="white-space:pre">	</span></em><em style="color: #00ccff;">if (backbuffer) {</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">SkCanvas* c = backbuffer-&gt;getCanvas();</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">c-&gt;clear(SK_ColorWHITE);</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">SkPaint p(SkColors::kBlack);</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">c-&gt;drawLine(SkPoint::Make(0, 0), SkPoint::Make(m_skaContext-&gt;width(), m_skaContext-&gt;height()), p);</em></div><div><em><br /></em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">static const char message[] = "Hello World";</em></div><div><em><br /></em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">SkFont font;</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">font.setSubpixel(true);</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">font.setSize(20);</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">c-&gt;drawSimpleText(message, strlen(message), SkTextEncoding::kUTF8, 0, m_skaContext-&gt;height() -2, font, p);</em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">backbuffer-&gt;flush();</em></div><div><em><br /></em></div><div><em><span style="white-space:pre">		</span></em><em style="color: #00ccff;">m_skaContext-&gt;swapBuffers();</em></div><div><em><span style="white-space:pre">	</span></em><em style="color: #00ccff;">}</em></div><div></div>}<br /><br />7. If everything is OK, the result will be:<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/SkiaMfc.result.png" width="562" height="439" alt="" /><br /></div></div><img src ="http://www.cppblog.com/aqazero/aggbug/217109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2020-02-07 07:53 <a href="http://www.cppblog.com/aqazero/archive/2020/02/07/217109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>polygon offset demo (Fifth and Final version) (Updated)</title><link>http://www.cppblog.com/aqazero/archive/2010/09/09/126241.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 09 Sep 2010 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/09/09/126241.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/126241.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/09/09/126241.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/126241.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/126241.html</trackback:ping><description><![CDATA[<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip</a></p>
<p><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/aqazero/OffsetDemo5.png" width=1277 height=768></p>
<img src ="http://www.cppblog.com/aqazero/aggbug/126241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-09-09 15:27 <a href="http://www.cppblog.com/aqazero/archive/2010/09/09/126241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Polygon offset demo (3rd)</title><link>http://www.cppblog.com/aqazero/archive/2010/09/05/125942.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Sun, 05 Sep 2010 10:01:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/09/05/125942.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/125942.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/09/05/125942.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/125942.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/125942.html</trackback:ping><description><![CDATA[<span style="COLOR: rgb(0,44,153)">
<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip</a></p>
</span>
<img src ="http://www.cppblog.com/aqazero/aggbug/125942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-09-05 18:01 <a href="http://www.cppblog.com/aqazero/archive/2010/09/05/125942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Polygon Offset Demo (Updated)</title><link>http://www.cppblog.com/aqazero/archive/2010/09/04/125861.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Sat, 04 Sep 2010 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/09/04/125861.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/125861.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/09/04/125861.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/125861.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/125861.html</trackback:ping><description><![CDATA[<font color=#002c99>
<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip</a></p>
</font>
<img src ="http://www.cppblog.com/aqazero/aggbug/125861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-09-04 11:25 <a href="http://www.cppblog.com/aqazero/archive/2010/09/04/125861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Polygon Offset Demo</title><link>http://www.cppblog.com/aqazero/archive/2010/09/02/125691.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 02 Sep 2010 14:25:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/09/02/125691.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/125691.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/09/02/125691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/125691.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/125691.html</trackback:ping><description><![CDATA[<span style="COLOR: rgb(0,44,153)">
<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip</a></p>
</span>
<img src ="http://www.cppblog.com/aqazero/aggbug/125691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-09-02 22:25 <a href="http://www.cppblog.com/aqazero/archive/2010/09/02/125691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Speed test: deflation of random 500 points and 1000 points polygon.</title><link>http://www.cppblog.com/aqazero/archive/2010/09/01/125505.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 01 Sep 2010 02:29:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/09/01/125505.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/125505.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/09/01/125505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/125505.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/125505.html</trackback:ping><description><![CDATA[<span style="COLOR: rgb(0,44,153)">
<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo5_8.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo5_8.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo5_8.zip</a></p>
<p></span><br>&nbsp;</p>
<img src ="http://www.cppblog.com/aqazero/aggbug/125505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-09-01 10:29 <a href="http://www.cppblog.com/aqazero/archive/2010/09/01/125505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Polygon offset with holes (Expansion and Deflation of polygons with holes)</title><link>http://www.cppblog.com/aqazero/archive/2010/09/01/125497.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 01 Sep 2010 02:03:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/09/01/125497.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/125497.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/09/01/125497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/125497.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/125497.html</trackback:ping><description><![CDATA[<span style="COLOR: rgb(0,44,153)">
<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip</a></p>
</span>
<img src ="http://www.cppblog.com/aqazero/aggbug/125497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-09-01 10:03 <a href="http://www.cppblog.com/aqazero/archive/2010/09/01/125497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多边形等距线算法的实现</title><link>http://www.cppblog.com/aqazero/archive/2010/08/25/124744.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 25 Aug 2010 15:10:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/08/25/124744.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/124744.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/08/25/124744.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/124744.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/124744.html</trackback:ping><description><![CDATA[<p><a title=http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip href="http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip">http://www.cppblog.com/Files/aqazero/OffsetDemo6.zip</a></p>
<img src ="http://www.cppblog.com/aqazero/aggbug/124744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-08-25 23:10 <a href="http://www.cppblog.com/aqazero/archive/2010/08/25/124744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>simulate OnIdle in MFC ActiveX control</title><link>http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 15 Apr 2010 07:49:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/112672.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/112672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/112672.html</trackback:ping><description><![CDATA[There are two ways to do this, one is simple, another is complicated but more powerful.<br><br>Method A:<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">::SetWindowsHookEx(WH_FOREGROUNDIDLE, YourIdleProc,&nbsp;AfxGetInstanceHandle(),&nbsp;GetCurrentThreadId());</span></div>
<br>Method B (my way):<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;HHOOK&nbsp;s_hGetMsgHook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">LRESULT&nbsp;FAR&nbsp;PASCAL&nbsp;GetMsgProc(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nCode,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;AFX_MANAGE_STATE(AfxGetStaticModuleState(&nbsp;));<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;LPMSG&nbsp;lpMsg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(LPMSG)&nbsp;lParam;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;(nCode&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;PM_REMOVE&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;wParam)<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">your&nbsp;code&nbsp;here.&nbsp;maybe&nbsp;to&nbsp;deal&nbsp;with&nbsp;hot-keys,&nbsp;accelerators ...<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">see&nbsp;</span><span style="color: #008000; text-decoration: underline;">http://support.microsoft.com/kb/187988</span><span style="color: #008000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">my&nbsp;code&nbsp;to&nbsp;simulate&nbsp;OnIdle</span><span style="color: #008000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;BOOL&nbsp;bIdle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWinApp</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pApp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AfxGetApp();<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">bIdle&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;pApp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">IsIdleMessage(lpMsg))<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bIdle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TRUE;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(bIdle)<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msgPeek&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">0</span><span style="color: #000000;">};<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">::PeekMessage(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">msgPeek,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;PM_NOREMOVE))<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VERIFY(PostMessage(AfxGetMainWnd()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetSafeHwnd(),&nbsp;WM_USER</span><span style="color: #000000;">+</span><span style="color: #000000;">0x12</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0x34</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0x56</span><span style="color: #000000;">));<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hwnd&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;AfxGetMainWnd()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetSafeHwnd()&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"><br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">message&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;WM_USER</span><span style="color: #000000;">+</span><span style="color: #000000;">0x12</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">wParam&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0x34</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">lParam&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0x56</span><span style="color: #000000;">)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">message&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;WM_NULL;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">lParam&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0L</span><span style="color: #000000;">;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">wParam&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0L</span><span style="color: #000000;">;<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pApp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">OnIdle(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bIdle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;::CallNextHookEx(s_hGetMsgHook,&nbsp;nCode,&nbsp;wParam,&nbsp;lParam);<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;CYourOleControl::OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct)&nbsp;<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"></span><span style="color: #008000;">...<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(NULL&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;s_hGetMsgHook)<br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_hGetMsgHook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::SetWindowsHookEx(WH_GETMESSAGE,&nbsp;GetMsgProc,&nbsp;AfxGetInstanceHandle(),&nbsp;GetCurrentThreadId());<br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CYourOleControl::OnDestroy()&nbsp;<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">...</span><span style="color: #008000;"><br></span><span style="color: #008080;">54</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;::UnhookWindowsHookEx(s_hGetMsgHook);<br></span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;s_hGetMsgHook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br></span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;COleControl::OnDestroy();<br></span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>Method A is far more simple, but with Method B:<br><br>1) You can override CWinApp::IsIdleMessage to filter some special messages, such as a frequent timer which will not affect what you want to do in CWinApp::OnIdle. Because timer will affect message queue and if you don't filter it, OnIdle will be called every time after the timer is invoked.<br><br>2) Sometimes your action in OnIdle will affect message queue inevitably, thus you will get a infinite loop: OnIdle-&gt;the special messages in message queue-&gt;OnIdle-&gt;... But with Method B, with SPY++ you can find the special messages, and filter them in IsIdleMessage.<br>   <img src ="http://www.cppblog.com/aqazero/aggbug/112672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-04-15 15:49 <a href="http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这是个很狡猾的bug。</title><link>http://www.cppblog.com/aqazero/archive/2010/03/04/108868.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 04 Mar 2010 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/03/04/108868.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/108868.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/03/04/108868.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/108868.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/108868.html</trackback:ping><description><![CDATA[某天， 发现一个bug， 会导致release版本下异常， 但在debug版本下正常， 可以定位该bug在下面代码中：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CMoveHandlerStateDraw::OnLButtonUp(UINT&nbsp;nFlags,&nbsp;CPoint&nbsp;point)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;AdjustPoint(point);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;m_pHandler</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Drop(point,&nbsp;m_ptHandlerPos);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"><br>}</span></div>
但是，一旦往这个函数中插入用来dump数据的代码， bug就不再出现， 不论是将数据写到文件还是显示在messagebox上。 <br>启用release版本的"Debug Information"， bug也不再出现。<br>就算只是在<span style="color: #000000;">该函数中声明一个CString变量， 这个狡猾的bug似乎马上就知道，马上就藏起来， 把这个变量一去掉， 它马上又跑出来了。<br><br>但后来发现， 这只是一只很普通的bug，根本没什么超能力。<br><br>聪明的你，知道这是为什么吗？<br><br></span> <img src ="http://www.cppblog.com/aqazero/aggbug/108868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-03-04 11:12 <a href="http://www.cppblog.com/aqazero/archive/2010/03/04/108868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista windows 7 areo progress bar</title><link>http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 06 Nov 2009 03:56:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/100283.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/100283.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/100283.html</trackback:ping><description><![CDATA[vista windows 7 areo progress bar 比较恶心， 它会自己画进度， 以前的正常的代码到vista/window7上以后， 进度条就画不到100%了。<br><br>http://stackoverflow.com/questions/313792/disabling-progress-bar-animation-on-vista-aero<br>http://msdn.microsoft.com/en-us/library/aa511486.aspx<br><br>用"meters"? 没空啊。<br><br>我的暴力方法是：
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">g_xpStyle.SetWindowTheme(m_hProgressWnd,&nbsp;L</span><span style="color: #000000;">""</span><span style="color: #000000;">,L</span><span style="color: #000000;">""</span><span style="color: #000000;">);</span></div>
<br>g_xpStyle 就是那个 CVisualStylesXP， google 一下就有了。<br> <img src ="http://www.cppblog.com/aqazero/aggbug/100283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2009-11-06 11:56 <a href="http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从资源中加载jpg, png到GDI+ Image</title><link>http://www.cppblog.com/aqazero/archive/2009/11/05/100221.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 05 Nov 2009 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2009/11/05/100221.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/100221.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2009/11/05/100221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/100221.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/100221.html</trackback:ping><description><![CDATA[从资源中加载jpg和png文件， 貌似不应该是个大问题， 一google结果一大堆， 却有两个陷阱，trap啊<br><br>1， 是Bitmap(RT_BITMAP)类型的图片无法加载， RT_BITMAP是预定义类型， 资源里面没有bmp文件的头， <span style="color: #000000;">SizeofResource 的返回值要比图片文件</span>少几个字节，因为少了这几个字节， 所以GDI+会返回invalid parameter错误。<br><br>2， 从<span style="color: #000000;">IStream</span><span style="color: #000000;">里面创建出来的Image对象似乎会引用到</span>堆里面的内存， 如果<span style="color: #000000;">hBuffer被释放了， 创建的Image的内容就会被破坏，有时只能画出一小部分图片， 有时整个图片就是空白， 视当时的内存状况而定。调用Image的Clone也没用。<br><br></span><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">CYourClass::</span><span style="color: #000000;">~</span><span style="color: #000000;">CYourClass()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(IMG_VECTOR::iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_arImage.begin();&nbsp;it&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;m_arImage.end();&nbsp;it</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">it;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(HGLB_VECTOR::iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_arGlobal.begin();&nbsp;it&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;m_arGlobal.end();&nbsp;it</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GlobalUnlock(</span><span style="color: #000000;">*</span><span style="color: #000000;">it);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GlobalFree(</span><span style="color: #000000;">*</span><span style="color: #000000;">it);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CYourClass::AddImage(HMODULE&nbsp;hInst,&nbsp;UINT&nbsp;nResourceID,&nbsp;LPCTSTR&nbsp;lpType)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(lpType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;RT_BITMAP)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">GDI+&nbsp;can&nbsp;not&nbsp;load&nbsp;RT_BITMAP&nbsp;resouce,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">because&nbsp;they&nbsp;are&nbsp;predefined&nbsp;resource,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">they&nbsp;don't&nbsp;contains&nbsp;the&nbsp;image&nbsp;file&nbsp;header.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(FALSE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;HRSRC&nbsp;hResource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::FindResource(hInst,&nbsp;MAKEINTRESOURCE(nResourceID),&nbsp;lpType);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">hResource)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;imageSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::SizeofResource(hInst,&nbsp;hResource);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">imageSize)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pResourceData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::LockResource(::LoadResource(hInst,&nbsp;hResource));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">pResourceData)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;HGLOBAL&nbsp;hBuffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::GlobalAlloc(GMEM_FIXED,&nbsp;imageSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(NULL&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;hBuffer)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pBuffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::GlobalLock(hBuffer);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pBuffer)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(pBuffer,&nbsp;pResourceData,&nbsp;imageSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IStream</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pStream&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(::CreateStreamOnHGlobal(hBuffer,&nbsp;FALSE,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">pStream)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;S_OK)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gdiplus::Image&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pImage&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Gdiplus::Image::FromStream(pStream);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStream</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Release();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pImage)<br>&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pImage</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetLastStatus()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Gdiplus::Ok&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImage</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetWidth()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<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;m_arImage.push_back(pImage);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">it&nbsp;seems&nbsp;the&nbsp;image&nbsp;will&nbsp;take&nbsp;usage&nbsp;of&nbsp;the&nbsp;global&nbsp;memory.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">so&nbsp;the&nbsp;global&nbsp;memory&nbsp;should&nbsp;be&nbsp;kept&nbsp;until&nbsp;the&nbsp;image&nbsp;destroy.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_arGlobal.push_back(hBuffer);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pImage;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GlobalUnlock(hBuffer);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;::GlobalFree(hBuffer);<br>}</span></div>
<br> <img src ="http://www.cppblog.com/aqazero/aggbug/100221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2009-11-05 16:01 <a href="http://www.cppblog.com/aqazero/archive/2009/11/05/100221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>恨不相逢未嫁时</title><link>http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 29 Oct 2009 03:56:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/99731.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/99731.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/99731.html</trackback:ping><description><![CDATA[http://www.codeguru.com/cpp/controls/toolbar/customizingtoolbars/article.php/c2511/<br>bcgcontrolbar<br><br>人世间最痛苦的事莫过于此。<br><br><img src ="http://www.cppblog.com/aqazero/aggbug/99731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2009-10-29 11:56 <a href="http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>create mfc dialog by template will drive you mad.</title><link>http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 19 Nov 2008 07:10:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/67287.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/67287.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/67287.html</trackback:ping><description><![CDATA[I have a dialog template in resource, and i have a dialog class, called CMyDialog.<br><br>And now, sometimes , i need CMyDialog to be a model dialog (WS_POPUP), sometimes be a child of another dialog(WS_CHILD).<br><br>How to make this done without duplicating the template in resource?<br><br>Call ModifyStyle after creation? Failed<br>Modify the LPCREATESTRUCT's style in CMyDialog::OnCreate ? Failed.<br>Override PreCreateWindow? Failed.<br><br>After a lot of tracing and a lot of googling. I worked out something like this:<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">BOOL&nbsp;CMyDialog::CreateAsChild(CWnd&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pParent)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">IsWindow(pParent</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetSafeHwnd()))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;m_lpszTemplateName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ATL_MAKEINTRESOURCE(IDD_WALLLAYER_PROPERTYPAGE);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;used&nbsp;for&nbsp;help</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(m_nIDHelp&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nIDHelp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LOWORD((DWORD_PTR)m_lpszTemplateName);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hInst&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AfxFindResourceHandle(m_lpszTemplateName,&nbsp;RT_DIALOG);<br>&nbsp;&nbsp;&nbsp;&nbsp;HRSRC&nbsp;hResource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::FindResource(hInst,&nbsp;m_lpszTemplateName,&nbsp;RT_DIALOG);<br>&nbsp;&nbsp;&nbsp;&nbsp;HGLOBAL&nbsp;hTemplate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LoadResource(hInst,&nbsp;hResource);<br>&nbsp;&nbsp;&nbsp;&nbsp;LPCDLGTEMPLATE&nbsp;lpDialogTemplate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(LPCDLGTEMPLATE)LockResource(hTemplate);<br>&nbsp;&nbsp;&nbsp;&nbsp;DLGTEMPLATEEX</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;lpDlgTmpEx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(DLGTEMPLATEEX</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;)lpDialogTemplate;<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwOldStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bIsDlgEx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">signature&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0xFFFF</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(bIsDlgEx)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwOldStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DS_SETFONT&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;WS_CHILD;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwOldStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((LPDLGTEMPLATE)lpDialogTemplate)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((LPDLGTEMPLATE)lpDialogTemplate)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DS_SETFONT&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;WS_CHILD;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lpDialogInit&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CreateDlgIndirect(lpDialogTemplate,&nbsp;pParent,&nbsp;hInst);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(bIsDlgEx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dwOldStyle;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((LPDLGTEMPLATE)lpDialogTemplate)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dwOldStyle;<br>&nbsp;&nbsp;&nbsp;&nbsp;UnlockResource(hTemplate);<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeResource(hTemplate);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;bResult;<br>}</span></div>
<br>If you need your dialog to behavior as WS_POPUP or WS_CHILD without duplicating your dialog template, you just get an ugly answer. And anyone who know another better way, let me know please. <br><br>MFC<br><img src ="http://www.cppblog.com/aqazero/aggbug/67287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-11-19 15:10 <a href="http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图形文本编辑器的源码和简单文档</title><link>http://www.cppblog.com/aqazero/archive/2008/08/27/60165.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 27 Aug 2008 08:05:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/08/27/60165.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/60165.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/08/27/60165.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/60165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/60165.html</trackback:ping><description><![CDATA[我说的图形文本编辑器不是纯文本编辑，见 <a target="_blank" title="自己实现图形文本编辑器" href="http://www.cppblog.com/aqazero/archive/2006/12/01/15835.html">自己实现图形文本编辑器</a> 或者 <a target="_blank" title="Graphical text proposal (draft)" href="http://www.eclipse.org/gef/team/wysiwyg.html">Graphical Text Proposal (Draft)</a><br><br><a target="_blank" title="Demo 地址" href="http://www.cppblog.com/Files/aqazero/BrentEditor_demo.zip">Demo EXE 地址</a> (无公害，因为是用wxWidgets，连Icon都没有，经常把人给吓着了。该程序对硬件无要求，对使用者有一定要求...)<br><br><a target="_blank" title="源代码" href="http://www.cppblog.com/Files/aqazero/BrentEditor.rar">源代码地址</a><br><br>编译需要<a target="_blank" title="wxWidgets" href="http://www.wxwidgets.org/">wxWidgets</a>。在这之后再没用过wxWidgets了，感觉就是另一套MFC。<br><br>抓个图:<br><img src="http://www.cppblog.com/images/cppblog_com/aqazero/editor.JPG" border="0"><br><br>写到Table和导出html部分的时候就力不从心了，草草了事。 导出html是做得最人模狗样，但却最败絮其中的部分。(英文版操作系统下导出html会crash，原因未知)<br><br>一直有用C#重新写一个的冲动，只是到时一定又是虎头蛇尾。<br>       <img src ="http://www.cppblog.com/aqazero/aggbug/60165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-08-27 16:05 <a href="http://www.cppblog.com/aqazero/archive/2008/08/27/60165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谁能告诉我有没有程序员专用键盘？我要C++语法的那种-_-!</title><link>http://www.cppblog.com/aqazero/archive/2008/06/06/52365.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 06 Jun 2008 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/06/06/52365.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/52365.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/06/06/52365.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/52365.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/52365.html</trackback:ping><description><![CDATA[All right, some one has done something...<br><br>http://www.kaufmann.no/roland/dvorak/<br><br>take your time and enjoy yourself -_-!<br><br><img src ="http://www.cppblog.com/aqazero/aggbug/52365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-06-06 15:00 <a href="http://www.cppblog.com/aqazero/archive/2008/06/06/52365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Create projects easily with private MFC, ATL and CRT assemblies</title><link>http://www.cppblog.com/aqazero/archive/2008/05/21/50660.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 21 May 2008 09:51:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/05/21/50660.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/50660.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/05/21/50660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/50660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/50660.html</trackback:ping><description><![CDATA[<span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspx<br><br>"$(DevEnvDir)..\..\VC\bin\mt.exe" -manifest "$(TargetDir)release.manifest"&nbsp; &#8211;outputresource:"$(TargetDir)$(TargetFileName)";#1<br><br>release.manifest:<br>&lt;?xml version='1.0' encoding='UTF-8' standalone='yes'?&gt;<br>&lt;assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'&gt;<br>&nbsp; &lt;dependency&gt;<br>&nbsp;&nbsp;&nbsp; &lt;dependentAssembly&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/dependentAssembly&gt;<br>&nbsp; &lt;/dependency&gt;<br>&nbsp; &lt;dependency&gt;<br>&nbsp;&nbsp;&nbsp; &lt;dependentAssembly&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;assemblyIdentity type='win32' name='Microsoft.VC80.MFC' version='8.0.50727.762' processorArchitecture='x86' /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/dependentAssembly&gt;<br>&nbsp; &lt;/dependency&gt;<br>&nbsp; &lt;dependency&gt;<br>&nbsp;&nbsp;&nbsp; &lt;dependentAssembly&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/dependentAssembly&gt;<br>&nbsp; &lt;/dependency&gt;<br>&lt;/assembly&gt;<br><br>copy&nbsp; C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest&nbsp;&nbsp; D:\xxProject\bin\release\Microsoft.VC80.CRT.manifest<br><br>copy C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\*.*&nbsp; </span><span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">D:\xxProject\bin\release\<br><br><br></span><span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">copy&nbsp; C:\WINDOWS\WinSxS\Manifests\</span><span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05.manifest&nbsp; </span><span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">D:\xxProject\bin\release\Microsoft.VC80.MFC.manifest<br><br></span><span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">copy C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05\*.*&nbsp; </span><span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">D:\xxProject\bin\release\<br></span> <img src ="http://www.cppblog.com/aqazero/aggbug/50660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-05-21 17:51 <a href="http://www.cppblog.com/aqazero/archive/2008/05/21/50660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>令人发中指的代码</title><link>http://www.cppblog.com/aqazero/archive/2008/05/11/49502.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Sun, 11 May 2008 03:09:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/05/11/49502.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/49502.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/05/11/49502.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/49502.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/49502.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;CFEPBaseView<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CFepBaseView()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pCoord&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Coord();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #0000ff;">protected</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;CCoord&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;m_pCoord;<br>}<br><br></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;CCutListView&nbsp;:&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;CFEPBaseView<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CCutListView()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pCoord&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Coord();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #0000ff;">protected</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;CCoord&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;m_pCoord;<br>}</span></div>
<br> <img src ="http://www.cppblog.com/aqazero/aggbug/49502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-05-11 11:09 <a href="http://www.cppblog.com/aqazero/archive/2008/05/11/49502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ie helper, great!</title><link>http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 13 Mar 2008 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/44374.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/44374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/44374.html</trackback:ping><description><![CDATA[http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c6175/<br><img src ="http://www.cppblog.com/aqazero/aggbug/44374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-03-13 15:29 <a href="http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>render whole html page</title><link>http://www.cppblog.com/aqazero/archive/2007/10/11/33986.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 11 Oct 2007 15:57:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2007/10/11/33986.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/33986.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2007/10/11/33986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/33986.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/33986.html</trackback:ping><description><![CDATA[Ask:<br>Hi,<br>I'm trying to render the contents of a HTML page hosted in a web<br>browser control so that I can save the result as an image.<br><br>There are a number of ways to do this. For example you can use any of<br>IHTMLElementRender,&#173; IViewObject or WM_PRINT. The problem with these<br>methods is that you only will receive the portion of the page's content<br>that is visible in the web browser. If the page's size is bigger than<br>the dimensions of the web browser these hidden or "scrollable" parts<br>will not get rendered in the above methods.<br><br>You could resize the browser to fit the entire page but that is not<br>feasible in a scenario when a user is using the browser. A second<br>approach is to load the page into a second hidden browser which, again,<br>is resized to fit the entire page. The problem with this approach is<br>that I can't load the document again since it's appearance could<br>change. I want to render exactly what's in the user's browser. AFAIK<br>there is know easy way to exactly clone a MSHTML document.<br><br>Does anyone (Igor?) have any clues how these "hidden" ares could be<br>rendered? Any help much appreciated.<br><br>Regards,<br>Christoffer<br>&nbsp;<br>Answer: <br>&nbsp;&nbsp;&nbsp; I took a couple of ideas from Code Project and pieced them together to<br>do just this. I render the client area into a small bitmap, blit it<br>into a final larger (page size) bitmap and scroll the control to get at<br>another area. This was simpler than trying to get it to render into<br>the correct area of the page size bitmap.<br><br>This was written for a browser control that was NOT seen by the user so<br>I didn't care where the final scroll position was.<br><br>1. From the IHTMLDocument interface call get_body to get the<br>IHTMLElement enterface.<br>2. Get the IHTMLElement2 interface (pBody2 in the code).<br>3. Call get_scrollHeight and get_scrollWidth, get_clientWidth,<br>get_clientHeight.<br>4. Get the IHTMLElementRender interface (pRenderer in the code).<br>5. Create a bitmap the size of the client area and select it into a<br>clientDC.<br>6. Create a bitmap the size of the scroll area and select it into a<br>pageDC.<br>7. Use some code like the following to scroll and render the page:<br><br>long x = scrollWidth;<br>long lastX = -1;<br>bool doneX = false;<br>while (!doneX)<br>{<br>&nbsp;&nbsp;&nbsp; pBody2-&gt;put_scrollLeft(x);<br>&nbsp;&nbsp;&nbsp; pBody2-&gt;get_scrollLeft(&amp;x);<br>&nbsp;&nbsp;&nbsp; if (-1 == lastX)<br>&nbsp;&nbsp;&nbsp; lastX = x + clientWidth;<br>&nbsp;&nbsp;&nbsp; long y = scrollHeight;<br>&nbsp;&nbsp;&nbsp; long lastY = -1;<br>&nbsp;&nbsp;&nbsp; bool doneY = false;<br>&nbsp;&nbsp;&nbsp; while (!doneY)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pBody2-&gt;put_scrollTop(y);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pBody2-&gt;get_scrollTop(&amp;y);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (-1 == lastY)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; lastY = y + clientHeight;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; hr = pRenderer-&gt;DrawToDC&#173;(clientDC);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BitBlt(pageDC,x,y,lastX-x,lastY-y,clientDC,2,2,SRCCOPY);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; doneY = (y==0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; lastY = y;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; y -= clientHeight-4;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; doneX = (0==x);<br>&nbsp;&nbsp;&nbsp; lastX = x;<br>&nbsp;&nbsp;&nbsp; x -= clientWidth-4;<br>}<br><br>The pageDC bitmap now holds the full image of the page and you can save<br>it or do anything else you want. You'll note that what I'm doing is<br>trying to scroll too far and letting IE scroll appropriately. Also<br>note that I clip a 2 pixel edge when blitting. This is from actual<br>testing - needed to not clip the border of the control.<br><br>Hope this helps,<br><br>David Stidolph<br>Austin, TX<br><br>Ask:<br>&nbsp;&nbsp;&nbsp; Thanks for the solution, but it will unfortunately not work in my case<br>because the control is used by a user and can therefor not be scrolled<br>programmatically.<br><br>My focus now is on trying to clone the MSHTML document and then load<br>the clone in another hidden browser contol which I can resize to fit<br>the entire page and then do the rendering. The way I'm currently<br>cloning the document is saving the HTML to disk and then replacing all<br>references (images, .js, .css., ...) in the HTML document with local<br>ones which I have downloaded from the originating server (will do this<br>as a last resort), the cache or (in the cases where it's possible)<br>copied directly from the MSHTML document. When that is done I have a<br>local copy which a can browse to. Does anyone know of a better way to<br>clone a MSHTML document?<br><br>Answer:<br>&nbsp;&nbsp;&nbsp; How about using a LockWindowUpdate call before the snapshot and<br>then unlocking it after? That way, the user never knows the WB<br>scrolled. <br>  <img src ="http://www.cppblog.com/aqazero/aggbug/33986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2007-10-11 23:57 <a href="http://www.cppblog.com/aqazero/archive/2007/10/11/33986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>note Algorithm book, sql server download, .net context help, activex hotkey/ accelerator</title><link>http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 14 Sep 2007 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/32214.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/32214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/32214.html</trackback:ping><description><![CDATA[crystal lattice
晶格<br><br>a great book about Algorithm&nbsp; http://www2.toki.or.id/book/AlgDesignManual/INDEX.HTM
<br><br>sql server developer<br>http://beta.verycd.com/groups/@g19046/135284.topic<br>http://beta.verycd.com/groups/@g19046/64613.topic
<br>  <br><br>A great idea about context help:<br>1)http://www.codeproject.com/csharp/ContextHelpMadeEasy.asp<br>2)http://netpl.blogspot.com/2007/07/context-help-made-easy-revisited.html<br><br><br>How to deal with hotkey / accelerator keys in activex<br>http://support.microsoft.com/?scid=kb;EN-US;Q187988
<br>
<br>You know how to google ,you know almost every thing.<br>  <img src ="http://www.cppblog.com/aqazero/aggbug/32214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2007-09-14 16:13 <a href="http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本替换工具</title><link>http://www.cppblog.com/aqazero/archive/2007/03/15/19870.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 15 Mar 2007 03:05:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2007/03/15/19870.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/19870.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2007/03/15/19870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/19870.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/19870.html</trackback:ping><description><![CDATA[使用:<br />    1,Search<br />    2,在list中选定要替换的文件和行<br />    3,Replace<br />    4,双击list可用选定编辑器打开。如果使用notepad++可直接定位到行。<br /><br /><br />图片:<br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/batchStrReplace.JPG" alt="batchStrReplace.JPG" border="0" height="459" width="915" /><br /><br />源代码<br />    http://www.cppblog.com/Files/aqazero/BatchStrReplace.zip<br /><img src ="http://www.cppblog.com/aqazero/aggbug/19870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2007-03-15 11:05 <a href="http://www.cppblog.com/aqazero/archive/2007/03/15/19870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调试ISAPI</title><link>http://www.cppblog.com/aqazero/archive/2006/12/19/16604.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Tue, 19 Dec 2006 02:24:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/12/19/16604.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/16604.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/12/19/16604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/16604.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/16604.html</trackback:ping><description><![CDATA[1，设置用户权限<br />将IUSR_[COMPUTERNAME]和IWAM_[COMPUTERNAME]添加到amdministrators组<br /><br />管理工具-本地安全策略-本地策略-用户权利指派<br />以操作系统方式操作  添加      INTERACTIVE, IUSR_[COMPUTERNAME], IWAM_[COMPUTERNAME]<br />作为服务登录         添加      INTERACTIVE, IUSR_[COMPUTERNAME], IWAM_[COMPUTERNAME]<br />调试程序               添加       INTERACTIVE, IUSR_[COMPUTERNAME], IWAM_[COMPUTERNAME]<br /><br />重新启动计算机，以使用户权限设置生效。<br /><br />2，设置Web服务<br />服务<br />IIS Admin Service<br />Simple Mail Transport Protocol (SMTP)<br />FTP Publishing Service<br />World Wide Web Publishing Service<br />的启动方式-&gt;手动。<br /><br />设置 IIS Admin Service  登录身份设为本地系统帐号，并允许与桌面交互<br /><br />打开管理工具-Internet 服务管理器，设置要允许调试的虚拟目录的属性:<br />执行许-&gt;脚本和可执行程序<br />应用程序保护-&gt;底(IIS进程)<br /><br />启动默认Web站点(必须将Web服务激活，否则调试时虽然运行了inetinfo.exe，但不会运行Web服务)<br /><br />3，配置VC project<br />Project-setting-Debug<br />Executable for debug session : C:\WINNT\system32\inetsrv\inetinfo.exe<br />Program argument : -e w3svc<br /><br />4，调试<br />执行命令行 iisreset /stop<br /><br />修改注册表信息:<br />
REGEDIT4<br /><br />
[HKEY_CLASSES_ROOT\AppID\{61738644-F196-11D0-9953-00C04FD919C1}]<br />
"LocalService"=-<br />
"RunAs"=-<br /><br />
[HKEY_CLASSES_ROOT\AppID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}]<br />
"LocalService"=-<br />
"RunAs"=-<br /><br />
[HKEY_CLASSES_ROOT\AppID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}]<br />
"LocalService"=-<br />
"RunAs"="Interactive User"<br /><br />
将以上注册表信息保存为.reg文件双击即可。<br /><br />可以开始在VC中调试了，按F5..<br /><br />5,恢复环境<br />按Shift + F5中断调试。<br /><br />恢复注册表信息：<br />REGEDIT4<br /><br />[HKEY_CLASSES_ROOT\AppID\{61738644-F196-11D0-9953-00C04FD919C1}]<br />"LocalService"="IISADMIN"<br />"RunAs"=-<br /><br />[HKEY_CLASSES_ROOT\AppID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}]<br />"LocalService"="IISADMIN"<br />"RunAs"=-<br /><br />[HKEY_CLASSES_ROOT\AppID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}]<br />"LocalService"="IISADMIN"<br />"RunAs"=-<br /><br />执行命令行 iisreset /start<br /><br />可能需要用到的.reg .bat<br /><a target="" class="" title="" href="/Files/aqazero/iisIsapiDebug.zip">http://www.cppblog.com/Files/aqazero/iisIsapiDebug.zip</a><br /><br />更详细信息:<br />http://xmlrad.com/DelosBin/Delos.dll/ServePage?URL=Manual/Appendix07/index.htm&amp;WEB_ID=101001015<br /><img src ="http://www.cppblog.com/aqazero/aggbug/16604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-12-19 10:24 <a href="http://www.cppblog.com/aqazero/archive/2006/12/19/16604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己实现图形文本编辑器</title><link>http://www.cppblog.com/aqazero/archive/2006/12/01/15835.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 01 Dec 2006 02:06:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/12/01/15835.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/15835.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/12/01/15835.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/15835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/15835.html</trackback:ping><description><![CDATA[我说的图形文本编辑器就是不用windows控件如editbox,richedit之类实现文档编辑，不是纯文本编辑。<br />要实现图形绘制，象visio那样；要能画表格，象word那样；要能导出html，象word那样。<br />以后要在此基础上实现表单绘制和流程绘制。<br /><br />程序目前完成了一小部分：<br /><br /><a class="" title="" href="/Files/aqazero/BrentEditor_demo.zip" target="">http://www.cppblog.com/Files/aqazero/BrentEditor_demo.zip</a><br /><br />实现的功能有：<br /><br />1) 编辑文本<br />双击可编辑对象，将进入编辑模式。在编辑模式下按ESC或者单击不可编辑对象，将退出编辑模式。按住鼠标移动可以选择文本，实现了上下左右键的navigation，实现了回车分段。<br />没有实现对英语单词整个单词的处理。分行会发生在单词的任何部分。主要考虑面对的是中文用户。<br /><br />2) 绘制DIV，按工具栏上的方框，直接在画布上点击拉动。<br /><br />3) 支持无限undo/redo，Ctrl+Z Ctrl+Y<br /><br />4) 支持文本的复制粘贴, Ctrl+C Ctrl+V ，剪切未实现。<br /><br />5) 可以导出到html文件，菜单File - export html<br />导出html后，排版可能和程序不同。<br /><br />6) 实现了保存读取<br />保存的文件其实是个压缩文件。<br /><br />7）实现了部分table功能<br />要调整表格之前，请先选择定某单元格。<br />“绘制表格”功能目前还未支持undo/redo<br /><br />8) 目前的画布布局为 flow，对象的位置由flow算法决定，所以只能调整大小，不能调整位置。<br /><br />下一步将实现的是：<br /><br />1) 绘制table<br /><br />2) 更改字体<br /><br />3) 更改DIV、cell边框属性，设置填充颜色<br /><br />4) 实现absolute定位<br /><br />5) 实现折线绘制，以及智能连线(象viso中那样连接两个对象，自己拐弯的折线)<br /><br />...<br /><br />然后就是绘制workflow，连接数据库等等了。<br /><br />...<br /><img src ="http://www.cppblog.com/aqazero/aggbug/15835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-12-01 10:06 <a href="http://www.cppblog.com/aqazero/archive/2006/12/01/15835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Excel addin处理学生成绩</title><link>http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Tue, 28 Nov 2006 06:40:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/15731.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/15731.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/15731.html</trackback:ping><description><![CDATA[老婆是班主任，每次考试都要给学生发工资条....一样的成绩条。<br>每次都要重复一些excel插入，复制，粘贴的操作，于是自作聪明地让我帮她写程序。<br>为了这么点小事，让我用vc++写程序(我对VBA不熟啊...)，实在是大材小用啊。<br>而且程序写好后还问题多多，bug多多，嗯，您就凑合着用吧。<br>有问题就在这里留个言，程序已经有更新功能了，我修改起来你更新起来都会很方便的(但愿如此了)。<br><br>for user:<br>安装程序在 <a target="" class="" title="" href="http://www.cppblog.com/Files/aqazero/brentExcelAddinSetup_fm.zip">http://www.cppblog.com/Files/aqazero/brentExcelAddinSetup_fm.zip</a><br>excel文件格式参考 <a href="http://www.cppblog.com/Files/aqazero/example_brentAddin.zip">http://www.cppblog.com/Files/aqazero/example_brentAddin.zip</a><br><br>很烂的源码：<a href="http://www.cppblog.com/Files/aqazero/BrentAddin.rar">http://www.cppblog.com/Files/aqazero/BrentAddin.rar</a><br> <img src ="http://www.cppblog.com/aqazero/aggbug/15731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-11-28 14:40 <a href="http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>graphical text editor (二)(内有帅图)</title><link>http://www.cppblog.com/aqazero/archive/2006/11/22/15544.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 22 Nov 2006 08:42:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/11/22/15544.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/15544.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/11/22/15544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/15544.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/15544.html</trackback:ping><description><![CDATA[使用wxWidgets库。
文本编辑是自己实现的，没有用到控件。
导出到html。<br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt1.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt2.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt3.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt4.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt5.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt6.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt7.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt8.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt9.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt10.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt11.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt12.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/aqazero/gt13.jpg" alt="gt1.jpg" align="middle" border="0" /><br /><br /><img src ="http://www.cppblog.com/aqazero/aggbug/15544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-11-22 16:42 <a href="http://www.cppblog.com/aqazero/archive/2006/11/22/15544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>graphical text editor？</title><link>http://www.cppblog.com/aqazero/archive/2006/10/08/13458.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Sun, 08 Oct 2006 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/10/08/13458.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/13458.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/10/08/13458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/13458.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/13458.html</trackback:ping><description><![CDATA[
		<p align="left">做一个文本编辑器似乎已经不是很难了。<br />网上有很多源代码可以下载，也有具体的一步步的教程。<br />如：<a href="http://www.catch22.net/tuts/editor01.asp">http://www.catch22.net/tuts/editor01.asp</a><br /><br />但做一个graphical text editor呢？象WORD那样即可以画表格，也可以编辑带字体的文本。<br /><img height="600" alt="drawer.jpg" src="http://www.cppblog.com/images/cppblog_com/aqazero/drawer.jpg" width="800" border="0" /><br />图I</p>
		<p align="left">一开始我弄了这个(图I)用来画表格.table是一个对象，包含cell对象，以及rowInfo和colInfo。cell包含的string，char并不作为单独的一个对象。<br /><br /><br /><img height="600" alt="brenteditor1.jpg" src="http://www.cppblog.com/images/cppblog_com/aqazero/brenteditor1.jpg" width="800" border="0" /><br />图II<br /><img height="600" alt="brenteditor2.jpg" src="http://www.cppblog.com/images/cppblog_com/aqazero/brenteditor2.jpg" width="800" border="0" /><br />图III<br /><br />后来改写，把每个char当成一个对象，但char对象和其它对象的compose却又成问题。。<br />Range的表示也成问题。<br /><br />似乎table等对象只能绝对定位，无法实现象word中表格的对齐方式和文字围绕效果。</p>
		<p align="left">写得好累，有谁知道有开源的用C++写的graphical text editor，或者自己有写的，希望能交流一下啊。</p>
<img src ="http://www.cppblog.com/aqazero/aggbug/13458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-10-08 16:13 <a href="http://www.cppblog.com/aqazero/archive/2006/10/08/13458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 运算符优先级列表</title><link>http://www.cppblog.com/aqazero/archive/2006/06/08/8284.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 08 Jun 2006 01:33:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/06/08/8284.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/8284.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/06/08/8284.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/8284.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/8284.html</trackback:ping><description><![CDATA[
		<a href="http://www.cppreference.com/operator_precedence.html">http://www.cppreference.com/operator_precedence.html</a>
		<br />
		<table class="code-table" border="1">
				<tbody>
						<tr>
								<th class="code-table-th">Precedence</th>
								<th class="code-table-th">Operator</th>
								<th class="code-table-th">Description</th>
								<th class="code-table-th">Example</th>
								<th class="code-table-th">Associativity</th>
						</tr>
						<tr>
								<td class="code-table-td">1</td>
								<td class="code-table-td">()<br />[]<br />-&gt;<br />.<br />::<br />++<br />--</td>
								<td class="code-table-td">Grouping operator<br />Array access<br />Member access from a pointer<br />Member access from an object<br />Scoping operator<br />Post-increment<br />Post-decrement</td>
								<td class="code-table-td">(a + b) / 4;<br />array[4] = 2;<br />ptr-&gt;age = 34;<br />obj.age = 34;<br />Class::age = 2;<br />for( i = 0; i &lt; 10; i++ ) ...<br />for( i = 10; i &gt; 0; i-- ) ...</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">2</td>
								<td class="code-table-td">!<br />~<br />++<br />--<br />-<br />+<br />*<br />&amp;<br />(type)<br /><a href="http://www.cppreference.com/keywords/sizeof.html">sizeof</a></td>
								<td class="code-table-td">Logical negation<br />Bitwise complement<br />Pre-increment<br />Pre-decrement<br />Unary minus<br />Unary plus<br />Dereference<br />Address of<br />Cast to a given type<br />Return size in bytes</td>
								<td class="code-table-td">if( !done ) ...<br />flags = ~flags;<br />for( i = 0; i &lt; 10; ++i ) ...<br />for( i = 10; i &gt; 0; --i ) ...<br />int i = -1;<br />int i = +1;<br />data = *ptr;<br />address = &amp;obj;<br />int i = (int) floatNum;<br />int size = sizeof(floatNum);</td>
								<td class="code-table-td">right to left</td>
						</tr>
						<tr>
								<td class="code-table-td">3</td>
								<td class="code-table-td">-&gt;*<br />.*</td>
								<td class="code-table-td">Member pointer selector<br />Member pointer selector</td>
								<td class="code-table-td">ptr-&gt;*var = 24;<br />obj.*var = 24;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">4</td>
								<td class="code-table-td">*<br />/<br />%</td>
								<td class="code-table-td">Multiplication<br />Division<br />Modulus</td>
								<td class="code-table-td">int i = 2 * 4;<br />float f = 10 / 3;<br />int rem = 4 % 3;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">5</td>
								<td class="code-table-td">+<br />-</td>
								<td class="code-table-td">Addition<br />Subtraction</td>
								<td class="code-table-td">int i = 2 + 3;<br />int i = 5 - 1;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">6</td>
								<td class="code-table-td">&lt;&lt;<br />&gt;&gt;</td>
								<td class="code-table-td">Bitwise shift left<br />Bitwise shift right</td>
								<td class="code-table-td">int flags = 33 &lt;&lt; 1;<br />int flags = 33 &gt;&gt; 1;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">7</td>
								<td class="code-table-td">&lt;<br />&lt;=<br />&gt;<br />&gt;=</td>
								<td class="code-table-td">Comparison less-than<br />Comparison less-than-or-equal-to<br />Comparison greater-than<br />Comparison geater-than-or-equal-to</td>
								<td class="code-table-td">if( i &lt; 42 ) ...<br />if( i &lt;= 42 ) ...<br />if( i &gt; 42 ) ...<br />if( i &gt;= 42 ) ...</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">8</td>
								<td class="code-table-td">==<br />!=</td>
								<td class="code-table-td">Comparison equal-to<br />Comparison not-equal-to</td>
								<td class="code-table-td">if( i == 42 ) ...<br />if( i != 42 ) ...</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">9</td>
								<td class="code-table-td">&amp;</td>
								<td class="code-table-td">Bitwise AND</td>
								<td class="code-table-td">flags = flags &amp; 42;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">10</td>
								<td class="code-table-td">^</td>
								<td class="code-table-td">Bitwise exclusive OR</td>
								<td class="code-table-td">flags = flags ^ 42;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">11</td>
								<td class="code-table-td">|</td>
								<td class="code-table-td">Bitwise inclusive (normal) OR</td>
								<td class="code-table-td">flags = flags | 42;</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">12</td>
								<td class="code-table-td">&amp;&amp;</td>
								<td class="code-table-td">Logical AND</td>
								<td class="code-table-td">if( conditionA &amp;&amp; conditionB ) ...</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">13</td>
								<td class="code-table-td">||</td>
								<td class="code-table-td">Logical OR</td>
								<td class="code-table-td">if( conditionA || conditionB ) ...</td>
								<td class="code-table-td">left to right</td>
						</tr>
						<tr>
								<td class="code-table-td">14</td>
								<td class="code-table-td">? :</td>
								<td class="code-table-td">Ternary conditional (if-then-else)</td>
								<td class="code-table-td">int i = (a &gt; b) ? a : b;</td>
								<td class="code-table-td">right to left</td>
						</tr>
						<tr>
								<td class="code-table-td">15</td>
								<td class="code-table-td">=<br />+=<br />-=<br />*=<br />/=<br />%=<br />&amp;=<br />^=<br />|=<br />&lt;&lt;=<br />&gt;&gt;=</td>
								<td class="code-table-td">Assignment operator<br />Increment and assign<br />Decrement and assign<br />Multiply and assign<br />Divide and assign<br />Modulo and assign<br />Bitwise AND and assign<br />Bitwise exclusive OR and assign<br />Bitwise inclusive (normal) OR and assign<br />Bitwise shift left and assign<br />Bitwise shift right and assign</td>
								<td class="code-table-td">int a = b;<br />a += 3;<br />b -= 4;<br />a *= 5;<br />a /= 2;<br />a %= 3;<br />flags &amp;= new_flags;<br />flags ^= new_flags;<br />flags |= new_flags;<br />flags &lt;&lt;= 2;<br />flags &gt;&gt;= 2;</td>
								<td class="code-table-td">right to left</td>
						</tr>
						<tr>
								<td class="code-table-td">16</td>
								<td class="code-table-td">,</td>
								<td class="code-table-td">Sequential evaluation operator</td>
								<td class="code-table-td">for( i = 0, j = 0; i &lt; 10; i++, j++ ) ...</td>
								<td class="code-table-td">left to right</td>
						</tr>
				</tbody>
		</table>
		<div>
		</div>
<img src ="http://www.cppblog.com/aqazero/aggbug/8284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-06-08 09:33 <a href="http://www.cppblog.com/aqazero/archive/2006/06/08/8284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于内存泄漏记录</title><link>http://www.cppblog.com/aqazero/archive/2006/06/05/8183.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 05 Jun 2006 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/06/05/8183.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/8183.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/06/05/8183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/8183.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/8183.html</trackback:ping><description><![CDATA[
		<p>文章地址:http://www-128.ibm.com/developerworks/cn/linux/l-mleak2/index.html#main<br />本地文件地址:http://www.cppblog.com/Files/aqazero/dbg_new.zip<br /></p>
<img src ="http://www.cppblog.com/aqazero/aggbug/8183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-06-05 17:27 <a href="http://www.cppblog.com/aqazero/archive/2006/06/05/8183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>还是关于异常</title><link>http://www.cppblog.com/aqazero/archive/2006/05/31/14172.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 31 May 2006 03:40:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/05/31/14172.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14172.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/05/31/14172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14172.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14172.html</trackback:ping><description><![CDATA[早上看到一篇别人的blog,上有如下代码:<br />try{<br />   ...<br />   throw "teststring";//1<br />}<br />catch(string &amp; rs){//2<br />   ...<br />}<br />想要用//2处的语句来捕获//1处的异常,当然是不对的.<br />正确的应该是:<br />catch(char * ps){ 或 catch(const char * ps){<br /><br />其实因为"teststring"是保存在代码段中的,所以应该抛出const指针<br />try{<br />   ...<br />   throw static_cast&lt;const char *&gt;("teststring");<br />}<br />catch(char * ps){//错,改为=&gt; catch(const char * ps){<br />   ...<br />}<br />天下太平,但如果钻牛角尖:<br />try{<br />   ...<br />   throw static_cast&lt;const char *&gt;("teststring");//3<br />}<br />catch(const char * const&amp; rps){//4<br />   ...<br />}<br />可以吗?编译正常,但//4无法捕获//3的异常.<br />但为什么<br />try{<br />   ...<br />   throw static_cast&lt;const string&gt;string("teststring");//5<br />}<br />catch(const string &amp; rs){//6<br />   ...<br />}<br />//6处就可以捕获到//5处的异常呢<br />因为//5处抛出的异常类型根本就不是const的.只是string的类型<br />而//3处的异常的类型的确是cosnt char *<br />嘿嘿...<br /><br />简单的说异常的处理需要引入一个全局的对象.<br />throw x;的时候用x来给这个全局对象y赋值,当捕获的时候在catch( type z)处,用y给z赋值.<br />如果x的类型不是指针(比如string),不管它有没有常量性,y的类型都是string,而z的类型不管是string 还是const string都能捕获x.<br /><br />但是,当x的类型是指针的时候,y的类型的常量性和x是一致的,z的类型也只有和x一致才能捕获x的异常.<br /><br />但//4处就是不能捕获//3的异常.<br />也许是VC++的问题?<br />不知道别的编译器如何.<br />还好用引用来捕获指针...普通人应该都不会这么做-_-<br />但尽量用const类型来catch,应该是个好习惯.<img src ="http://www.cppblog.com/aqazero/aggbug/14172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-05-31 11:40 <a href="http://www.cppblog.com/aqazero/archive/2006/05/31/14172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>