﻿<?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++博客-力为的技术博客</title><link>http://www.cppblog.com/mythma/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 04:44:24 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 04:44:24 GMT</pubDate><ttl>60</ttl><item><title>VS2010 Win32编译失败一例</title><link>http://www.cppblog.com/mythma/archive/2017/11/15/215349.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Wed, 15 Nov 2017 11:07:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2017/11/15/215349.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/215349.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2017/11/15/215349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/215349.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/215349.html</trackback:ping><description><![CDATA[<div><br />在编译一个第三方库的时候出现如下错误：<br /><br />C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.<span style="background-color: #ffffff; color: #333333; font-family: arial; font-size: 13px;">Cpp.Win32.Targets(157,5):<br /><br />症状<br />Release编译没问题，只有Debug出现上述错误。<br /><br />&#8220;解决&#8221;办法&#8221;<br />把调试信息格式设置为空<br />C/C+++/常规/</span><span style="color: #333333; font-family: arial; font-size: 13px; background-color: #ffffff;">调试信息格式</span></div><img src ="http://www.cppblog.com/mythma/aggbug/215349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2017-11-15 19:07 <a href="http://www.cppblog.com/mythma/archive/2017/11/15/215349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>std::vector使用一例</title><link>http://www.cppblog.com/mythma/archive/2015/11/03/using-std-vector-in-point-cloud.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Tue, 03 Nov 2015 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/11/03/using-std-vector-in-point-cloud.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/212174.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/11/03/using-std-vector-in-point-cloud.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/212174.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/212174.html</trackback:ping><description><![CDATA[<h1>1. 准备</h1><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">使用std::vector应该知道几点：</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">（1）内存连续的容器，有点像数组</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">（2）与std::list相比，插入和删除元素比较慢- 因为数据迁移</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">（3）添加元素可能会引发内存分配和数据迁移。</p><h1>2. 问题</h1><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">AnyCAD::API::PointCloudNode使用FloatList &nbsp;及std::vector&lt;float&gt;来存储一些列的点[x0, y0, z0, x1, y1, z1, .....]:</p><table xhe-border"="" style="border-color: #d3d3d3;"><tbody><tr><td align="right" valign="top" style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; border-color: #d3d3d3;">void&nbsp;</td><td valign="bottom" style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; border-color: #d3d3d3;">SetPoints&nbsp;(const FloatList &amp;buffer)</td></tr></tbody></table><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">若想要显示n个点，需要3n的长度:<br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">为了在空间中模拟某个物体的运动轨迹，即一系列的点，如何才能高效的实现动态绘制呢？</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><img src="http://ww2.sinaimg.cn/bmiddle/72555d50gw1exnuml7rvuj20gj08yaar.jpg" _xhe_src="http://ww2.sinaimg.cn/bmiddle/72555d50gw1exnuml7rvuj20gj08yaar.jpg" style="max-width: 98%;"  alt="" /><br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><h1>3. 方案</h1><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">最基本的办法：</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">定义的变量:</p><pre name="code" style="margin-top: 4px; margin-bottom: 4px; background-color: #f0f0f0;">PointCloudNode m_PointCoud; <br />std::_vector&lt;float&gt; m_Points;</pre><br />每次调用push_back添加点：<p>&nbsp;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"></p><pre name="code" style="margin-top: 4px; margin-bottom: 4px; background-color: #f0f0f0;"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;onAddPoint(x,&nbsp;y,&nbsp;z)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push(y);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push(z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_PointCloud.SetPoints(m_Points);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render();<br />&nbsp;}</div></pre><br />&#8220;优化1&#8221;：为了减少显示的点太多引起内存问题和效率问题，可以限定显示的点的个数<p>&nbsp;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"></p><pre name="code" style="margin-top: 4px; margin-bottom: 4px; background-color: #f0f0f0;">int MAX_POINT3_COUNT = MAX_POINT_COUNT * 3;</pre><br /><p>&nbsp;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"></p><pre name="code" style="margin-top: 4px; margin-bottom: 4px; background-color: #f0f0f0;"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;onAddPointV1(x,&nbsp;y,&nbsp;z)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m_Points.size()&nbsp;&gt;&nbsp;MAX_POINT3_COUNT)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.erase(m_Points.begin());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.erase(m_Points.begin());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.erase(m_Points.begin());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push(z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_PointCloud.SetPoints(m_Points);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render();<br />&nbsp;}</div></pre><p>&nbsp;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">onAddPointV1引入了什么问题？</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">优化2：避免每次vector都重新分配内存，指定vector的初始内存大小</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"></p><pre name="code" style="margin-top: 4px; margin-bottom: 4px; background-color: #f0f0f0;">m_Points.reserve(MAX_POINT3_COUNT);</pre><br />优化3：避免由于删除头元素引擎的数据迁移<p>&nbsp;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">新加入的点放在队尾还是队头，对于显示而言，结果都是一样一样的。所以可以覆盖&#8221;过期的"的点。</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">int m_TotalCount = 0;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"></p><pre name="code" style="margin-top: 4px; margin-bottom: 4px; background-color: #f0f0f0;"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;onAddPointV3(x,&nbsp;y,&nbsp;z)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++m_TotalCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m_TotalCount&nbsp;&lt;=&nbsp;MAX_POINT_COUNT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push_back(x);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push_back(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points.push_back(z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos&nbsp;=&nbsp;(m_TotalCount&nbsp;%&nbsp;100&nbsp;-&nbsp;1)&nbsp;*&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points[pos]&nbsp;=&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points[pos+1]&nbsp;=&nbsp;y;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Points[pos+2]&nbsp;=&nbsp;z;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_PointCloud.SetPoints(m_Points);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render();&nbsp;<br />}</div></pre><br /><h1>4 总结</h1><p>&nbsp;</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;">略</p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><p style="margin: 4px 0px; padding: 2px 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></p><img src ="http://www.cppblog.com/mythma/aggbug/212174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-11-03 16:43 <a href="http://www.cppblog.com/mythma/archive/2015/11/03/using-std-vector-in-point-cloud.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在MFC中使用快速三维建模控件</title><link>http://www.cppblog.com/mythma/archive/2015/09/28/mfc-graphics-control.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Mon, 28 Sep 2015 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/09/28/mfc-graphics-control.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/211910.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/09/28/mfc-graphics-control.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/211910.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/211910.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mythma/archive/2015/09/28/mfc-graphics-control.html'>阅读全文</a><img src ="http://www.cppblog.com/mythma/aggbug/211910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-09-28 16:35 <a href="http://www.cppblog.com/mythma/archive/2015/09/28/mfc-graphics-control.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2015武汉校园招聘归来</title><link>http://www.cppblog.com/mythma/archive/2015/09/28/new_hire_wuhan_2015.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Mon, 28 Sep 2015 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/09/28/new_hire_wuhan_2015.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/211909.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/09/28/new_hire_wuhan_2015.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/211909.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/211909.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 结束了在武汉四天的校招行程。第一天判笔试题到晚上十二点，接着连续技术面试两天半。校招不仅仅是脑力上考验，也是体力上的考验。但相比去年在成都的招聘行程，今年感觉轻松许多，从而也有精力写写这几天的感想。&nbsp;&nbsp;<a href='http://www.cppblog.com/mythma/archive/2015/09/28/new_hire_wuhan_2015.html'>阅读全文</a><img src ="http://www.cppblog.com/mythma/aggbug/211909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-09-28 16:32 <a href="http://www.cppblog.com/mythma/archive/2015/09/28/new_hire_wuhan_2015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>istreambuf_iterator 使用</title><link>http://www.cppblog.com/mythma/archive/2015/08/07/istreambuf_iterator.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Fri, 07 Aug 2015 05:42:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/08/07/istreambuf_iterator.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/211500.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/08/07/istreambuf_iterator.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/211500.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/211500.html</trackback:ping><description><![CDATA[<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp; &nbsp; std::<span style="color: #0000FF; ">string</span>&nbsp;str;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.seekg(0,&nbsp;std::ios::end);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.reserve(file.tellg());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.seekg(0,&nbsp;std::ios::beg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.assign((std::istreambuf_iterator&lt;<span style="color: #0000FF; ">char</span>&gt;(file)),&nbsp;std::istreambuf_iterator&lt;<span style="color: #0000FF; ">char</span>&gt;());</div></div><img src ="http://www.cppblog.com/mythma/aggbug/211500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-08-07 13:42 <a href="http://www.cppblog.com/mythma/archive/2015/08/07/istreambuf_iterator.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么QMdiArea::activeSubWindow返回null</title><link>http://www.cppblog.com/mythma/archive/2015/06/13/QMdiArea-activeSubWindow.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Sat, 13 Jun 2015 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/06/13/QMdiArea-activeSubWindow.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/210914.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/06/13/QMdiArea-activeSubWindow.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/210914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/210914.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为什么QMdiArea::activeSubWindow返回null&nbsp;&nbsp;<a href='http://www.cppblog.com/mythma/archive/2015/06/13/QMdiArea-activeSubWindow.html'>阅读全文</a><img src ="http://www.cppblog.com/mythma/aggbug/210914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-06-13 20:06 <a href="http://www.cppblog.com/mythma/archive/2015/06/13/QMdiArea-activeSubWindow.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>临时对象引用</title><link>http://www.cppblog.com/mythma/archive/2015/01/13/209497.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Tue, 13 Jan 2015 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/01/13/209497.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/209497.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/01/13/209497.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/209497.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/209497.html</trackback:ping><description><![CDATA[VS允许引用临时对象，而gcc则禁止引用临时对象。<br />比如：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">int</span>&nbsp;a&nbsp;=&nbsp;100;<br /><span style="color: #0000FF; ">int</span>&nbsp;b&nbsp;=&nbsp;200;<br /><span style="color: #0000FF; ">int</span>&amp;&nbsp;c&nbsp;=&nbsp;a&nbsp;-&nbsp;b;&nbsp;</div><br />再如：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">int</span>&nbsp;sum(<span style="color: #0000FF; ">int</span>&amp;&nbsp;a,&nbsp;<span style="color: #0000FF; ">int</span>&amp;&nbsp;b)<br />{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a&nbsp;+&nbsp;b;<br />}<br /><br />sum(1,&nbsp;2);</div><br /><br />再比如取临时对象的地址：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br /><span style="color: #0000FF; ">void</span>&nbsp;div(MyClass*&nbsp;a)<br />{<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"  alt="" />.</span><span style="color: #008000; "><br /></span>}<br /><br />div(&amp;MyClass());</div><br /><br />以上用法VS竟然统统允许编译通过。<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"></div><img src ="http://www.cppblog.com/mythma/aggbug/209497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-01-13 14:24 <a href="http://www.cppblog.com/mythma/archive/2015/01/13/209497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>布尔变量初始值(2)</title><link>http://www.cppblog.com/mythma/archive/2015/01/06/debug-release-bool-f5-ctrl-f5.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Tue, 06 Jan 2015 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2015/01/06/debug-release-bool-f5-ctrl-f5.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/209406.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2015/01/06/debug-release-bool-f5-ctrl-f5.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/209406.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/209406.html</trackback:ping><description><![CDATA[<div>之前遇到过的问题-<a id="viewpost1_TitleUrl" href="http://www.cppblog.com/mythma/archive/2011/04/16/144365.html">布尔变量初始值</a> ，最近又遇到了。<br /><br />重新整理一下bool在VS2010中的未初始化时候的值：<br />
<table style="border-collapse: collapse" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #b8cce4; border-bottom: white 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142pt" valign="top" width="189">
<p><strong><span style="color: white">&nbsp;</span></strong></p></td>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #b8cce4; border-bottom: white 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142.05pt" valign="top" width="189">
<p><strong><span style="font-family: 'Verdana','sans-serif'; color: black">F5 </span></strong><strong><span style="font-family: 宋体; color: black">：调试</span></strong></p></td>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #b8cce4; border-bottom: white 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142.05pt" valign="top" width="189">
<p><strong><span style="font-family: 'Verdana','sans-serif'; color: black">CTRL+F5</span></strong><strong><span style="font-family: 宋体; color: black">：执行</span></strong></p></td></tr>
<tr>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #365f91; border-bottom: white 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142pt" valign="top" width="189">
<p><span style="color: white">DEBUG</span></p></td>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #a7bfde; border-bottom: white 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142.05pt" valign="top" width="189">
<p><span style="color: black">TRUE</span></p></td>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #a7bfde; border-bottom: white 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142.05pt" valign="top" width="189">
<p><span style="color: black">TRUE</span></p></td></tr>
<tr>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #365f91; border-bottom: #f0f0f0; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142pt" valign="top" width="189">
<p><span style="color: white">RELEASE</span></p></td>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #dbe5f1; border-bottom: #f0f0f0; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142.05pt" valign="top" width="189">
<p><span style="color: black">TRUE</span></p></td>
<td style="border-top: #f0f0f0; border-right: #f0f0f0;background: #dbe5f1; border-bottom: #f0f0f0; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f0f0f0; padding-right: 5.4pt; width: 142.05pt" valign="top" width="189">
<p><span style="color: black">FALSE</span></p></td></tr></tbody></table>
<p>&nbsp;<br />可以看到DEBUG下，未初始化bool变量的值是可以预知的。而RELEASE下，行为却不可确定。如果是RELEASE状态下在VS中按F5调试程序，bool变量的默认值为true；若按Ctrl+F5或者直接点EXE执行程序，bool的默认值为false。<br /><br /><u><em>假如程序在调试模式和执行模式的行为不一致，就需要考虑是否是由于未初始化的bool变量引起的。<br /></em></u><br />假如调用bool的构造函数来构造bool变量，在上面的四种情况下是否是确定的？</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;bTest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">();</span></div>
<p><br /><br /><br />&nbsp;</p></div><img src ="http://www.cppblog.com/mythma/aggbug/209406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2015-01-06 16:43 <a href="http://www.cppblog.com/mythma/archive/2015/01/06/debug-release-bool-f5-ctrl-f5.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引发glDrawElements产生GL_INVALID_OPERATION错误一例</title><link>http://www.cppblog.com/mythma/archive/2014/08/28/glDrawElements-GL_INVALID_OPERATION.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Thu, 28 Aug 2014 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2014/08/28/glDrawElements-GL_INVALID_OPERATION.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/208164.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2014/08/28/glDrawElements-GL_INVALID_OPERATION.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/208164.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/208164.html</trackback:ping><description><![CDATA[<div>GL_INVALID_OPERATION是OpenGL一个很诡异的错误代码，不知道到底是什么引起的无效操作。<br />即使在调用glDrawElements和glDrawArrays的时候有机会遇到，也不容易确定到底是哪个状态出错。<br /><br />这里有一种情况可以间接的触发这个错误，并且会产生蝴蝶效应，让程序在后续的执行中产生更诡异不容易定位的错误。<br /><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->texture&nbsp;+&nbsp;shader&nbsp;+&nbsp;glDrawElements/glDrawArrays</div><br />即在shader中使用texture绘制物体。<br /><br />如果为shader中sampler设置的location位置与glActiveTexture不一致，就会触发glDrawElements操作失败。<br /><br />另外，如果shader中定义了并使用了多个sampler，即使在某种条件下没有用到，也需要给他设置个值。</div><img src ="http://www.cppblog.com/mythma/aggbug/208164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2014-08-28 16:55 <a href="http://www.cppblog.com/mythma/archive/2014/08/28/glDrawElements-GL_INVALID_OPERATION.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么需要给函数返回类型加const</title><link>http://www.cppblog.com/mythma/archive/2014/08/24/cpp-const-return-rvalue.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Sun, 24 Aug 2014 10:50:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2014/08/24/cpp-const-return-rvalue.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/208114.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2014/08/24/cpp-const-return-rvalue.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/208114.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/208114.html</trackback:ping><description><![CDATA[相对clang，VS2010对rvalue的检查还是若了些。<br />比如如下的程序，在VS2010顺利编译通过，而在clang中则报错。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;XY<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;XY();<br />&nbsp;&nbsp;&nbsp;&nbsp;XY(<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:_x(x)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,_y(y)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_x;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_y;<br />};<br /><br />XY&nbsp;GetXY(<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;XY(x,&nbsp;y);<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;ComplexAlgo(XY&amp;&nbsp;xy)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;xy._x&nbsp;=&nbsp;100;<br />&nbsp;&nbsp;&nbsp;&nbsp;xy._y&nbsp;=&nbsp;200;<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;_tmain(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ComplexAlgo(GetXY(10,10));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><br />ComplexAlgo的输入参数是一个非const引用，即需要传入的是个非临时值。而在<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; ComplexAlgo(GetXY(10,10));</div>&nbsp;中，GetXY返回的是为临时值，从逻辑上应该为const的，即等价为：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">const</span>&nbsp;XY&nbsp;GetXY(<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;XY(x,&nbsp;y);<br />}</div><br />所以，上面的程序不应该编译通过。而VS2010顺利通过，也使有着同样用法的程序潜伏着bug。<br /><br /><img src ="http://www.cppblog.com/mythma/aggbug/208114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2014-08-24 18:50 <a href="http://www.cppblog.com/mythma/archive/2014/08/24/cpp-const-return-rvalue.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mac OSX 10.9下XCode包含X11头文件</title><link>http://www.cppblog.com/mythma/archive/2014/08/24/macosx-x11-ln.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Sun, 24 Aug 2014 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2014/08/24/macosx-x11-ln.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/208110.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2014/08/24/macosx-x11-ln.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/208110.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/208110.html</trackback:ping><description><![CDATA[默认情况下，再Mac OSX 10.9中XCode SDK中不包括X11得头文件，如果用到则需要稍微改动一下。<br /><br />X11位于目录：<br />/opt/local/include/X11<br /><br />在XCode SDK中为X11加个替身：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->sudo&nbsp;ln&nbsp;-s&nbsp;/opt/local/include/X11&nbsp;/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/&nbsp; &nbsp;</div><br />替身，在Mac OSX下是相当有用。<img src ="http://www.cppblog.com/mythma/aggbug/208110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2014-08-24 11:11 <a href="http://www.cppblog.com/mythma/archive/2014/08/24/macosx-x11-ln.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COM Interop遇到的几个问题</title><link>http://www.cppblog.com/mythma/archive/2013/12/31/COM_Interop_issues.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Tue, 31 Dec 2013 05:01:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2013/12/31/COM_Interop_issues.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/205079.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2013/12/31/COM_Interop_issues.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/205079.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/205079.html</trackback:ping><description><![CDATA[<strong>错误症状</strong><br /><pre><ul><li><span style="font-family: verdana, 'courier new';">Error: Cannot register a logger before the MuxLogger has been initialized. <br /><br /></span></li><li><span style="font-family: verdana, 'courier new';">error C4772: #import referenced a type from a missing type library; '__missing_type__' used as a placeholder </span></li></ul><pre><ul><li><span style="font-family: verdana, 'courier new';">.Net编译失败，但没有任何错误提示消息。</span></li></ul><ul><li><span style="font-family: verdana, 'courier new';">C#中添加COM引用，有两种错误症状：（1）无法添加也没有错误消息 （2）VS直接Crash</span></li></ul><br /><strong>解决办法</strong><br />检查COM IDL，接口定义有问题。</pre></pre><img src ="http://www.cppblog.com/mythma/aggbug/205079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2013-12-31 13:01 <a href="http://www.cppblog.com/mythma/archive/2013/12/31/COM_Interop_issues.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个OpenCASCADE的MFC控件</title><link>http://www.cppblog.com/mythma/archive/2013/12/19/opencascade-control-for-mfc.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Thu, 19 Dec 2013 02:04:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2013/12/19/opencascade-control-for-mfc.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/204888.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2013/12/19/opencascade-control-for-mfc.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/204888.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/204888.html</trackback:ping><description><![CDATA[有时候需要在对话框上显示OpenCASCADE的模型，现基于CStatic封装了一个简单的控件:<br />COpenCascadeCtrl<br /><br />代码如下：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><br />#pragma&nbsp;once<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;COpenCascadeCtrl</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">class</span>&nbsp;COpenCascadeCtrl&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;CStatic<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_DYNAMIC(COpenCascadeCtrl)<br /><br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;COpenCascadeCtrl(Handle_Graphic3d_WNTGraphicDevice&nbsp;theGD);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;~COpenCascadeCtrl();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Handle_AIS_InteractiveContext&nbsp;GetAIC()&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;{<span style="color: #0000FF; ">return</span>&nbsp;mAISContext;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Handle_V3d_View&nbsp;GetView()&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;mActiveView;&nbsp;}<br /><br /><span style="color: #0000FF; ">protected</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;afx_msg&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct);<br />&nbsp;&nbsp;&nbsp;&nbsp;afx_msg&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;OnPaint();<br /><br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;Handle_Graphic3d_WNTGraphicDevice&nbsp;theGraphicDevice;<br />&nbsp;&nbsp;&nbsp;&nbsp;Handle_V3d_View&nbsp;mActiveView;<br />&nbsp;&nbsp;&nbsp;&nbsp;Handle_V3d_Viewer&nbsp;mActiveViewer;<br />&nbsp;&nbsp;&nbsp;&nbsp;Handle_AIS_InteractiveContext&nbsp;mAISContext;<br /><br />};</div><br /><br />实现文件：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;OpenCascadeCtrl.cpp&nbsp;:&nbsp;implementation&nbsp;file<br /></span><span style="color: #008000; ">//<br /></span><br />#include&nbsp;"stdafx.h"<br />#include&nbsp;"OpenCascadeCtrl.h"<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;COpenCascadeCtrl</span><span style="color: #008000; "><br /></span><br />IMPLEMENT_DYNAMIC(COpenCascadeCtrl,&nbsp;CStatic)<br /><br />COpenCascadeCtrl::COpenCascadeCtrl(Handle_Graphic3d_WNTGraphicDevice&nbsp;theGD)<br />:&nbsp;theGraphicDevice(theGD)<br />{<br /><br />}<br /><br />COpenCascadeCtrl::~COpenCascadeCtrl()<br />{<br />}<br /><br /><br />BEGIN_MESSAGE_MAP(COpenCascadeCtrl,&nbsp;CStatic)<br />&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_CREATE()<br />&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_PAINT()<br />END_MESSAGE_MAP()<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;COpenCascadeCtrl&nbsp;message&nbsp;handlers</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;COpenCascadeCtrl::OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(CStatic::OnCreate(lpCreateStruct)&nbsp;==&nbsp;-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mActiveViewer&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;V3d_Viewer(theGraphicDevice,&nbsp;Standard_ExtString("OpenCascadeCtrl"));<br />&nbsp;&nbsp;&nbsp;&nbsp;mActiveViewer-&gt;SetDefaultLights();<br />&nbsp;&nbsp;&nbsp;&nbsp;mActiveViewer-&gt;SetLightOn();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mActiveView&nbsp;=&nbsp;mActiveViewer-&gt;CreateView();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Handle(WNT_Window)&nbsp;aWNTWindow&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;WNT_Window(theGraphicDevice,&nbsp;GetSafeHwnd(),&nbsp;Quantity_NOC_GRAY);<br />&nbsp;&nbsp;&nbsp;&nbsp;aWNTWindow-&gt;SetDoubleBuffer(Standard_False);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mActiveView-&gt;SetWindow(aWNTWindow);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mAISContext&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;AIS_InteractiveContext(mActiveViewer);<br />&nbsp;&nbsp;&nbsp;&nbsp;mAISContext-&gt;SetDisplayMode(AIS_Shaded,&nbsp;<span style="color: #0000FF; ">false</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><br /><br /><span style="color: #0000FF; ">void</span>&nbsp;COpenCascadeCtrl::OnPaint()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC&nbsp;dc(<span style="color: #0000FF; ">this</span>);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;device&nbsp;context&nbsp;for&nbsp;painting<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;message&nbsp;handler&nbsp;code&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Do&nbsp;not&nbsp;call&nbsp;CStatic::OnPaint()&nbsp;for&nbsp;painting&nbsp;messages</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mActiveView-&gt;Redraw();<br />}</div><br /><br />用的时候，在对话框上加一个Picture控件（IDC_STATIC_LOC），初始化对话框的时候创建<span style="font-size: 13px; background-color: #eeeeee;">COpenCascadeCtrl</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rect;<br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetDlgItem(IDC_STATIC_LOC)-&gt;GetWindowRect(&amp;rect);<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScreenToClient(&amp;rect);<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_OpenCascadeCtr-&gt;Create(_T(""),&nbsp;WS_CHILD|WS_VISIBLE,&nbsp;rect,&nbsp;<span style="color: #0000FF; ">this</span>,&nbsp;IDC_STATIC_LOC);</div><br /><br /><a href="http://www.opencascade.net/ask/?/question/26"><span style="font-size: 24pt; color: red;"><strong>代码下载</strong></span></a><img src ="http://www.cppblog.com/mythma/aggbug/204888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2013-12-19 10:04 <a href="http://www.cppblog.com/mythma/archive/2013/12/19/opencascade-control-for-mfc.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CMake再Mac下设置命令行</title><link>http://www.cppblog.com/mythma/archive/2013/12/18/204874.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Wed, 18 Dec 2013 08:57:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2013/12/18/204874.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/204874.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2013/12/18/204874.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/204874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/204874.html</trackback:ping><description><![CDATA[<br />CMake的一个Bug：http://public.kitware.com/Bug/view.php?id=10056<br /><a name="bugnotes" id="bugnotes" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: normal; "><div id="bugnotes_open" style="padding: 3px; "><br />建立symbolic link，以在命令行下调用：<br /><table cellspacing="1" style="width: 1264px; border-style: solid; border-color: #000000; "><tbody><tr id="c25065"><td style="font-size: 10pt; padding: 4px; background-color: #e8e8e8; width: 937px; vertical-align: top; ">osascript -e 'do shell script "ln -sf \"/Applications/CMake 2.8-12.app/Contents/bin/cmake\" /usr/bin/cmake" with administrator privileges'</td></tr></tbody></table></div></a><img src ="http://www.cppblog.com/mythma/aggbug/204874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2013-12-18 16:57 <a href="http://www.cppblog.com/mythma/archive/2013/12/18/204874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Shadow Mapping via OpenGL （固定管线篇）</title><link>http://www.cppblog.com/mythma/archive/2013/12/13/Shadow-Mapping-via-OpenGL.html</link><dc:creator>力为</dc:creator><author>力为</author><pubDate>Fri, 13 Dec 2013 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/mythma/archive/2013/12/13/Shadow-Mapping-via-OpenGL.html</guid><wfw:comment>http://www.cppblog.com/mythma/comments/204781.html</wfw:comment><comments>http://www.cppblog.com/mythma/archive/2013/12/13/Shadow-Mapping-via-OpenGL.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mythma/comments/commentRss/204781.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mythma/services/trackbacks/204781.html</trackback:ping><description><![CDATA[基本原理：<a href="http://en.wikipedia.org/wiki/Shadow_mapping">http://en.wikipedia.org/wiki/Shadow_mapping</a><br /><br />在大家都在用shader实现的时候，我竟然还在用固定管线。<br /><br />使用OpenGL固定管线实现，主要用到 GL_ARB_depth_texture和GL_ARB_shadow，GL_ARB_shadow_ambient扩展。整个过程分三步:<br />1. 计算shadow mapping<br />2. 绘制阴暗的部分<br />3. 绘制光亮的部分<br /><br />每一步都可能是坑。<br />以下是可能出现的&#8220;效果&#8221;：<br /><br /><ul><li>斑点</li></ul><img src="http://www.cppblog.com/images/cppblog_com/mythma/20131128113604.jpg" border="0" alt="" width="453" height="511" /><br /><ul><li>Peter Pan</li></ul><br /><img src="http://www.cppblog.com/images/cppblog_com/mythma/20131213165344.png" border="0" alt="" width="330" height="453" /><br /><ul><li>锯齿</li></ul><br /><img src="http://www.cppblog.com/images/cppblog_com/mythma/20131213170037.png" border="0" alt="" width="549" height="465" /><br /><br /><ul><li>大块阴影</li></ul><br /><img src="http://www.cppblog.com/images/cppblog_com/mythma/20131227095709.png" border="0" alt="" width="548" height="295" /><br /><br /><ul><li>模糊的阴影</li></ul><img src="http://www.cppblog.com/images/cppblog_com/mythma/sss.png" border="0" alt="" width="319" height="260" /><br /><br /><img src ="http://www.cppblog.com/mythma/aggbug/204781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mythma/" target="_blank">力为</a> 2013-12-13 17:34 <a href="http://www.cppblog.com/mythma/archive/2013/12/13/Shadow-Mapping-via-OpenGL.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>