﻿<?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</title><link>http://www.cppblog.com/aqazero/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:41:50 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:41:50 GMT</pubDate><ttl>60</ttl><item><title>Game of life WASM</title><link>http://www.cppblog.com/aqazero/archive/2021/01/08/217562.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 07 Jan 2021 17:59:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2021/01/08/217562.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/217562.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2021/01/08/217562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/217562.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/217562.html</trackback:ping><description><![CDATA[<div>有人用web assembly写了一版game of lie，<br />网站: https://playgameoflife.com/<br />代码: https://github.com/edwinm/game-of-life<br />用c语言暴力运算，没有任何优化，所以虽然用了wasm，速度相当不行。<br /><br />真正的大牛还是Alan Hensel：<br /><div>http://www.cppblog.com/aqazero/archive/2005/07/22/14207.html<br /><br />可惜现在要运行java applet没那么容易<br /><br /><br /><br /><div>https://madewithwebassembly.com/<br /><br />web&nbsp;assembly的网站列表。<br /><br />其中列出来的一些知名项目：<br />Google&nbsp;的tensorflow&nbsp;js, Google&nbsp;Earth,&nbsp;SketchUp<br />AutoCAD&nbsp;的&nbsp;web&nbsp;app<br />Unity&nbsp;3d&nbsp;游戏引擎<br />Doom3&nbsp;demo，烧显卡3d游戏<br />Microsoft&nbsp;的blazor也在其中<br />还有一个不知名，但有趣的game&nbsp;of&nbsp;life游戏(虽然用了c语言写wasm，但算法毫无优化)<br />嗯，居然还有Diablo I<br /><br />可以通过关键字搜索</div></div></div><img src ="http://www.cppblog.com/aqazero/aggbug/217562.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> 2021-01-08 01:59 <a href="http://www.cppblog.com/aqazero/archive/2021/01/08/217562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio + IIS Express debug problem.</title><link>http://www.cppblog.com/aqazero/archive/2020/02/12/217123.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 12 Feb 2020 00:35:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2020/02/12/217123.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/217123.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2020/02/12/217123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/217123.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/217123.html</trackback:ping><description><![CDATA[Created a simple MVC project in VS 2019, when I clicked debug, it either popped up a "process&nbsp;with&nbsp;and&nbsp;Id&nbsp;of&nbsp; &nbsp;is&nbsp;not&nbsp;running" message box or show ERR_CONNECTION_RESET error in the browser.<br /><br />unstalling/reinstalling IIS express, deleting IIS configuration files, deleting the hidden .vs folder under the project, none of this worked.<br /><br />I started IIS Express in CMD, it showed the message : Unable to launch the IIS Express Web server. The format of the specified network name is invalid - 0x800704BE<br /><br />Found this link&nbsp;<a href="http://habjan.blogspot.com/2014/02/visual-studio-2013-unable-to-launch-iis.html">http://habjan.blogspot.com/2014/02/visual-studio-2013-unable-to-launch-iis.html</a>&nbsp;and followed the instuctions:<br /><br /><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><strong>1.</strong>&nbsp;check the IP address bindings by&nbsp;opening&nbsp;command prompt in admin mode and running this command:</em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><br /></em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="color: blue; font-family: &quot;Courier New&quot;, Courier, monospace;"><strong><em>netsh http show iplisten</em></strong></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><br /></em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em>this showed me that the service is listening only 192.168.1.3.</em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><br /></em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><strong>2.</strong>&nbsp;then I went to delete this binding by running this command:</em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><br /></em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="color: blue; font-family: &quot;Courier New&quot;, Courier, monospace;"><strong><em>netsh http delete iplisten ipaddress=192.168.1.3.</em></strong></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><br /></em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><span style="font-family: Verdana, sans-serif;"><em><strong>3.</strong>&nbsp;and set the service up to listen to all IP addresses by running this command:</em></span></div><div style="margin: 0px; outline: none; color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; text-align: justify; background-color: #ffffff;"><em><br /></em></div><div style="margin: 0px; outline: none; text-align: justify; background-color: #ffffff;"><strong style="color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;"><span style="color: blue; font-family: &quot;Courier New&quot;, Courier, monospace;"><em>netsh http add iplisten ipaddress=0.0.0.0<br /><br /></em></span></strong><span style="color: #000000; font-family: verdana, &quot;courier new&quot;; text-align: start;">And then followed this link&nbsp;</span><a href="https://stackoverflow.com/questions/20036984/how-do-i-restore-a-missing-iis-express-ssl-certificate" style="color: #333333; font-family: &quot;Helvetica Neue Light&quot;, HelveticaNeue-Light, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;">https://stackoverflow.com/questions/20036984/how-do-i-restore-a-missing-iis-express-ssl-certificate<br /><br /></a><em>cd C:\Program Files (x86)\IIS Express IisExpress<br /><br /></em></div><div><em>AdminCmd.exe setupsslUrl -url:https://localhost:44387/ -UseSelfSigned</em><br /><br />It works now, great job for creating the mazes, Microsoft.</div><br /><br /><br /><img src ="http://www.cppblog.com/aqazero/aggbug/217123.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-12 08:35 <a href="http://www.cppblog.com/aqazero/archive/2020/02/12/217123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>XML Serialization for Complex Object Model</title><link>http://www.cppblog.com/aqazero/archive/2019/04/04/216331.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 03 Apr 2019 17:31:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2019/04/04/216331.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/216331.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2019/04/04/216331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/216331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/216331.html</trackback:ping><description><![CDATA[C# Xmlable serialization facing maintenance and compatibility.<br /><br />代码：<br /><div>http://www.cppblog.com/Files/aqazero/DrawTools2005Xmlable.zip</div><img src ="http://www.cppblog.com/aqazero/aggbug/216331.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> 2019-04-04 01:31 <a href="http://www.cppblog.com/aqazero/archive/2019/04/04/216331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>An Implement of Topological Sort in C# 拓扑排序</title><link>http://www.cppblog.com/aqazero/archive/2019/04/04/216330.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 03 Apr 2019 17:28:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2019/04/04/216330.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/216330.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2019/04/04/216330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/216330.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/216330.html</trackback:ping><description><![CDATA[<div>reference:</div><div>https://en.wikipedia.org/wiki/Topological_sorting<br /><br />代码：<br /><div>http://www.cppblog.com/Files/aqazero/TopoSort.zip</div></div><img src ="http://www.cppblog.com/aqazero/aggbug/216330.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> 2019-04-04 01:28 <a href="http://www.cppblog.com/aqazero/archive/2019/04/04/216330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Read tiff File Tags in C# 读取Tiff文件头</title><link>http://www.cppblog.com/aqazero/archive/2019/04/04/216329.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 03 Apr 2019 17:24:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2019/04/04/216329.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/216329.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2019/04/04/216329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/216329.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/216329.html</trackback:ping><description><![CDATA[资源:<br /><div>https://en.wikipedia.org/wiki/List_of_file_signatures</div><div>http://www.fileformat.info/format/tiff/corion.htm</div><div>https://mh-nexus.de/en/hxd/</div><br />代码：<br /><div>http://www.cppblog.com/Files/aqazero/TiffTag.zip</div><img src ="http://www.cppblog.com/aqazero/aggbug/216329.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> 2019-04-04 01:24 <a href="http://www.cppblog.com/aqazero/archive/2019/04/04/216329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Red Black Tree in C#</title><link>http://www.cppblog.com/aqazero/archive/2017/04/29/214894.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 28 Apr 2017 21:02:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2017/04/29/214894.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/214894.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2017/04/29/214894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/214894.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/214894.html</trackback:ping><description><![CDATA[Several weeks ago, I tried hard to search an implement of balance binary tree in C#, &nbsp;what i needed was something like std::set&lt;key, comparator&gt; in C++: the data should be sorted, can be inserted and deleted at low cost and provides iterator which can move&nbsp;forward and backward. It looks like this can be easily achieved by List&lt;T&gt; with List&lt;T&gt;.Sort and List&lt;T&gt;.BinarySearch, the problem is that the performance of List&lt;T&gt; is not acceptable when the data collection size is big in my case.<br /><br />I failed to find anything that can be used directly, it is hard to believe, a lot of implement of red-black tree in Java or C++ can be easily got from internet (although none of them meets my requirement), but none in C#.<br /><br />So I had to implement one, it was translated from a C++ implement and modified to provide an immutable node.<br /><br />Source code&nbsp;<br /><div><a href="http://www.cppblog.com/Files/aqazero/RBTree.zip">http://www.cppblog.com/Files/aqazero/RBTree.zip</a><br />Use at your own risk!</div>Example:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RBTree&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;rbt&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RBTree&lt;<span style="color: #0000FF; ">int</span>&gt;(Comparer&lt;<span style="color: #0000FF; ">int</span>&gt;.Default);<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Add(3);<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Add(1);<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Add(10);<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Add(6);<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Add(7);<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Remove(10);<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RBNode&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;node6&nbsp;=&nbsp;rbt.GetNode(6);<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rbt.Remove(node6);<br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RBNode&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;node&nbsp;=&nbsp;rbt.GetNode(3);<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;=&nbsp;node.Prev;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(<span style="color: #0000FF; ">null</span>&nbsp;!=&nbsp;node)<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Trace.WriteLine(node.Value);<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;=&nbsp;node.Next;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />Output:<br /><div>1</div><div>3</div><div>7</div><img src ="http://www.cppblog.com/aqazero/aggbug/214894.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> 2017-04-29 05:02 <a href="http://www.cppblog.com/aqazero/archive/2017/04/29/214894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>use regular expressions in visual studio to modify xaml in batch</title><link>http://www.cppblog.com/aqazero/archive/2016/05/10/213484.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Tue, 10 May 2016 06:23:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2016/05/10/213484.html</guid><description><![CDATA[<div>xmlns:lex="http://schemas.root-project.org/xaml/presentation"<br /><div>xmlns:p="clr-namespace:Pasasoft.Fep.UI.Properties"<br /><br /><div>"{lex:LocText Key=([a-zA-Z_]+), Assembly=Pasasoft.Fep.UI}"</div><div>"{x:Static p:Resources.$1}"<br /><br /><a href="https://docs.microsoft.com/en-us/visualstudio/ide/using-regular-expressions-in-visual-studio?view=vs-2019">https://docs.microsoft.com/en-us/visualstudio/ide/using-regular-expressions-in-visual-studio?view=vs-2019</a></div></div></div><img src ="http://www.cppblog.com/aqazero/aggbug/213484.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> 2016-05-10 14:23 <a href="http://www.cppblog.com/aqazero/archive/2016/05/10/213484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quotes to live by</title><link>http://www.cppblog.com/aqazero/archive/2014/01/17/205451.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 17 Jan 2014 12:43:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2014/01/17/205451.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/205451.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2014/01/17/205451.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/205451.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/205451.html</trackback:ping><description><![CDATA[<div>Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. - (Martin Golding)<br /><br /></div><div></div><div>There are two ways to write error-free programs; only the third one works. - (Alan J. Perlis)&nbsp;<br /><br /></div><div></div><div>A good programmer is someone who always looks both ways before crossing a one-way street. - (Doug Linder)<br /><br /></div><div></div><div>It should be noted that no ethically -trained software engineer would ever consent to write a DestroyBaghdad procedure. Basic professional ethics would instead require him to write a DestroyCity procedure, to which Baghdad could be given as a parameter. &nbsp;&#8213; Nathaniel S. Borenstein<br /><br /></div><div></div><div>You've baked a really lovely cake, but then you've used dog sh*t for frosting. &#8213; Steve Jobs<br /><br /><div>http://www.codeproject.com/Messages/4739776/Quotes-to-live-by.aspx</div></div><img src ="http://www.cppblog.com/aqazero/aggbug/205451.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> 2014-01-17 20:43 <a href="http://www.cppblog.com/aqazero/archive/2014/01/17/205451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>printer driver</title><link>http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 12 Sep 2012 15:26:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/190456.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/190456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/190456.html</trackback:ping><description><![CDATA[<div>C:\PROGRA~2\COMMON~1\FLOORC~1\FEP\PRIMOA~2\PrimoRun.exe</div><br />1) disable driver digital signatures<br /><a href="http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/turning-off-digital-signatures/23c67c73-3fa0-4de3-a9b5-3adf4c3472f3">http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/turning-off-digital-signatures/23c67c73-3fa0-4de3-a9b5-3adf4c3472f3</a>&nbsp;<br /><br /><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; ">You can disable digitally signed signatures, however it is not recommended.<br /><strong>Important:&nbsp;</strong>The driver signing enforcement in Windows 7 and Vista is there for a reason. Unsigned drivers could theoretically contain malicious code and harm your computer.</p><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; "><strong>Step 1:</strong>&nbsp;Click Start button on the left bottom corner of desktop. In the search box, type "cmd"<br /><br /><strong>Step 2:</strong>&nbsp;Go to Run command, and right click on command prompt and click on "Run as administrator".<br /><br /><strong>Step 3:</strong>&nbsp;In the command prompt, type in these commands: Be very careful here. BCDEDIT controls how your computer boots up.<br /></p><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; "><strong>IMPORTANT:</strong>make a backup of your bcd file first. To do that, type:<br /><strong>bcdedit /export C:\savedbcd</strong><br /><br />This will create a file c:\savebcd which is your boot entry backup.<br />If you mess up, you can always undo changes by:<br /><br /><strong>bcdedit /import c:\savedbcd</strong></p><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; ">Then type these commands:<br /><br /><strong>bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS</strong><br /><strong>bcdedit.exe -set TESTSIGNING ON</strong><br /><br />After you finished the steps above mentioned, you have made digital driver signing signature disabled for all installation.&nbsp;So you can install device drivers on Windows 7 without warning message that those drivers should be digitally signed.<br /><br /><br />2) install gpedit on window 7 basic&nbsp;<br /><a href="http://www.askvg.com/how-to-enable-group-policy-editor-gpedit-msc-in-windows-7-home-premium-home-basic-and-starter-editions/comment-page-4/#comments">http://www.askvg.com/how-to-enable-group-policy-editor-gpedit-msc-in-windows-7-home-premium-home-basic-and-starter-editions/comment-page-4/#comments</a>&nbsp;<br /><br /><strong style="padding: 0px; margin: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #333333; line-height: 20px; ">NOTE:</strong><span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; ">&nbsp;For Windows 7&nbsp;</span><strong style="padding: 0px; margin: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #333333; line-height: 20px; ">64-bit (x64)</strong><span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; ">&nbsp;users! You'll also need to go to "SysWOW64" folder present in C:\Windows folder and copy "GroupPolicy", "GroupPolicyUsers" folders and gpedit.msc file from there and paste them in "C:\Windows\System32" folder.</span>&nbsp;<br /><br /><span style="font-size: 11px;"><a href="http://www.cppblog.com/Files/aqazero/add_gpedit_msc_by_jwils876-d3kh6vm.zip">http://www.cppblog.com/Files/aqazero/add_gpedit_msc_by_jwils876-d3kh6vm.zip</a></span><br /><br /><br />3) uninstall&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL</span>&nbsp;<br /><a href="http://answers.yahoo.com/question/index?qid=20061224095808AAMxsCT">http://answers.yahoo.com/question/index?qid=20061224095808AAMxsCT</a>&nbsp;<br /><span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL ANTIVIRUS</span>&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL SPYWARE PROTECTION</span>&nbsp;&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL FIREWALL</span>&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL SAFETY AND SECURITY CENTER</span>&nbsp;<br /><br /><a href="http://forums.techguy.org/digital-photography-imaging/536280-alternate-solution-printer-driver-unknown.html">http://forums.techguy.org/digital-photography-imaging/536280-alternate-solution-printer-driver-unknown.html</a>&nbsp;<br /><br /><br /><br /></p><img src ="http://www.cppblog.com/aqazero/aggbug/190456.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> 2012-09-12 23:26 <a href="http://www.cppblog.com/aqazero/archive/2012/09/12/190456.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>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>使用ASP.net + WF的感受</title><link>http://www.cppblog.com/aqazero/archive/2009/04/06/79108.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 06 Apr 2009 10:30:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2009/04/06/79108.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/79108.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2009/04/06/79108.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/79108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/79108.html</trackback:ping><description><![CDATA[两个多星期的努力， 终于把Prototype搞定了。实现了以下功能：<br><br>1，一个state machine workflow(Fund Request Process work flow)<br>2， 使用Polic来控制业务逻辑<br>3，实现了xoml和dll的分离，动态加载xoml，提供一个编辑工具，可以edit the workflow on-the-fly<br><br>1, 并没有传说中的那么难<br>ASP.net和WF我都不熟， 根据两本书，一个msdn上的例子"Web Form Workflow Approvals Stater kit"和另一个例子Orders http://www.odetocode.com/Articles/465.aspx的基础上把prototype搞出来了。<br><br>2，理解概念很重要<br>如果不理解WF是怎么调用外部函数（CallExternalMethodActivity）， 是怎么传Event给WF（HandleExternalEventActivity），DependencyProperty是怎么回事， 基本不用再搞了。<br><br>3，很多设计可做<br>WF只实现了workflow最内核的部分，非常灵活。 同样的实现可以采用完全不同的实现方式。 怎么实现workflow definition， 怎么设计Activities， 需要为Activities添加那些DependencyProperty， 这些DependencyProperty是怎么互相关联的， 怎么只在xoml里面保存workflow definition， 怎么实现Workflow和业务数据的交互， 怎么实现Workflow和组织结构或者role的关联， 都可以有完全不同的设计。<br><br>4，还有很多概念。。<br>因为是prototype， 很多东西没考虑， 比如事务transation或者Compensate， 异常处理等。<br><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/aqazero/gpas_program_struct.jpg" width="1228" height="768"><br><br> <img src ="http://www.cppblog.com/aqazero/aggbug/79108.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-04-06 18:30 <a href="http://www.cppblog.com/aqazero/archive/2009/04/06/79108.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/10/08/63485.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 08 Oct 2008 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/10/08/63485.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/63485.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/10/08/63485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/63485.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/63485.html</trackback:ping><description><![CDATA[有一本书叫《Effective C#》，被翻译了，里面有一章叫《实现标准Dispose模式》，里面有一句话叫做：<br><br>"释放托管资源"。莫非是"release managed resource"?<br><br>什么叫做释放托管资源(release managed resource)? 莫非是把成员的引用设置为null?<br><br>一般来说如果一个对象被dispose了，那它也要马上人间蒸发了，GC从全局变量和栈里面就要找不到它了，更不要说它的内部成员变量了，这时候设置它的成员为null有什么必要呢？<br><br>看了MSDN才知道，人家是"dispose managed resource"，就是调用managed的对象的dispose方法。<br><br>太囧了，无法用中文表达。<br><br>有牛人在研究用中文写程序，为什么IG诺贝尔奖不颁发给它呢？ 同时，我终于知道为什么英文影印版的书比中文翻译版的要贵了。<br><br><img src ="http://www.cppblog.com/aqazero/aggbug/63485.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-10-08 17:06 <a href="http://www.cppblog.com/aqazero/archive/2008/10/08/63485.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></channel></rss>