﻿<?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/wlwlxj/category/611.html</link><description>&lt;div&gt;一个吃软饭的男人!!!!!我只想写程序####&lt;br&gt;师夷之技以制夷   吾尝终日而思矣,不如须臾之所学也&lt;br&gt;喝碗孟婆汤,踏过奈何桥,涅槃&lt;/div&gt;
I've been programming since I was 21. Started with C++, looked at Java, keen on Visual Basic and Visual C++, thinking about .NET and C#.^_^,very ridiculous.</description><language>zh-cn</language><lastBuildDate>Mon, 29 Jun 2009 21:53:10 GMT</lastBuildDate><pubDate>Mon, 29 Jun 2009 21:53:10 GMT</pubDate><ttl>60</ttl><item><title>Xindows第一版本快整理完了</title><link>http://www.cppblog.com/wlwlxj/archive/2009/06/28/88695.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sun, 28 Jun 2009 07:26:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2009/06/28/88695.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/88695.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2009/06/28/88695.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/88695.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/88695.html</trackback:ping><description><![CDATA[<br><img height=670 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_Xindows_V1.PNG" width=902 border=0><br><br><img height=499 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_activex.PNG" width=640 border=0><br>&nbsp;&nbsp;&nbsp; 实现了很多东西，还有很多东西未实现，总体来说应该算成功了一小步了。 支持类似网页的大部分css，界面布局，DOM模型、事件。 想支持滤镜、以及activex，之后还需要做一些扩展。 对象接口以及事件现在还没有暴露出去，不知道还需要多久，自己一个人搞得很慢。不过我想慢慢改善慢慢丰富，还是可以做的不错，当然慢慢就成了自己的东西了。<br><br>&nbsp;&nbsp;&nbsp; 可以<a href="http://www.cppblog.com/files/wlwlxj/Xindows2.rar">下载</a>欣赏一下，由于demo写死了一些东西，所以需要放在E盘根目录下面执行。 E:\Xindows2 这样子。 
<img src ="http://www.cppblog.com/wlwlxj/aggbug/88695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2009-06-28 15:26 <a href="http://www.cppblog.com/wlwlxj/archive/2009/06/28/88695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PerfectPM 版本1.2.2内容</title><link>http://www.cppblog.com/wlwlxj/archive/2008/12/19/69785.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 18 Dec 2008 17:18:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/12/19/69785.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/69785.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/12/19/69785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/69785.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/69785.html</trackback:ping><description><![CDATA[<br>1、修改逻辑关系显示在顶部时候出现绘制错误bug<br>2、为Gantt视图增加了一个自定义绘制的好友视图，时间轴与Gantt视图保持一致且视图同步，用来完成额外的资源视图自绘制<br>3、PMGrid增加了excel导出功能<br>4、PMGrid、PMGantt增加图形导出功能（bmp jpeg gif tiff png）<br><br><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_excel.PNG"><br><br><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_P3EC-Grid1.png"><br><br><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_P3EC-Gantt28-4.png"><br><br> <img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_P3EC-Grid26.png"><br><br>  <img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_P3EC-Grid2-7.png"><br><br>  <img src ="http://www.cppblog.com/wlwlxj/aggbug/69785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-12-19 01:18 <a href="http://www.cppblog.com/wlwlxj/archive/2008/12/19/69785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PerfectPM 1.2.0即将发布</title><link>http://www.cppblog.com/wlwlxj/archive/2008/10/19/64406.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sun, 19 Oct 2008 05:11:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/10/19/64406.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/64406.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/10/19/64406.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/64406.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/64406.html</trackback:ping><description><![CDATA[<br>新的版本即将发布。 <br><br>新版本功能：<br>CPMGantt<br>1、背景自定义绘制<br>2、逻辑关系线的自定义绘制<br>3、甘特图的托拽<br>4、界面的假绘制（实现临时效果）<br><br>CPMGraphicsPath：<br>1、路径中开始一个新的图形对象<br><br>CPMDisplay<br>1、修改FillRectLinearGradientBrush和FillPathLinearGradientBrush中渐变色方向内部错误处理<br>2、添加了VertFillRectExLinearGradientBrush实现A-B-A色垂直填充效果<br><br>CPMGrid<br>1、表头点击事件为排序做支持<br><br>CPMGridColInfo<br>1、为每个列对象添加了一组属性值ColProperty<br><br>CPMDocument<br>1、修改VB .NET开发环境启动情况下加载授权文件失败的问题<br>2、实现了排序功能<br><br>目前开发文档初步完成，做起来很麻烦，慢慢完善改进。<br><a href="http://www.cppblog.com/files/wlwlxj/PerfectPMLib.rar">1.1.0开发文档下载</a><br><br>网站托朋友正在做，打算自己也弄一个技术网站推广。<br><br>下面是一个自绘制实现的XGantt效果图：<br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_PerfectPM-1.1.1.PNG" border="0" width="1034" height="589"><br><br>生产排程应用：<br><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_Scheduling.PNG"><br><img src ="http://www.cppblog.com/wlwlxj/aggbug/64406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-10-19 13:11 <a href="http://www.cppblog.com/wlwlxj/archive/2008/10/19/64406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>甘特图第一版本发布</title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/26/62823.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Fri, 26 Sep 2008 08:25:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/26/62823.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/62823.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/26/62823.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/62823.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/62823.html</trackback:ping><description><![CDATA[<p><br>一款甘特图中间件。<br><br>PerfectPM是一套甘特图控件开发包，控件采用ATL+API开发，支持Windows平台所有编程语言(包括脚本语言)，运行在Win2000(包括)以上操作系统上。基于该控件，程序员可以很容易的开发出类似MSProject、P3EC的管理软件。适合于项目管理、生产管理、大修项目。</p>
<p>开发包目前包括：<br>1、PMDocument:文档控件，运行时不可见，主要负责存储数据，是所有控件的基础。<br>2、PMGrid:表格控件，通过表格方式展示文本信息。<br>3、PMGantt:甘特图控件，通过各种图形丰富的展现时间信息。<br>4、PMADOAdapter:ADO数据库适配器，通过ADO方式桥接数据库和PMDocument，缓存关键信息，加速数据加载和信息查询。</p>
<p>目前版本:1.1.0</p>
<p>示例分为VB6,Delphi7,VS2005 C#,VBS版本,由于时间原因,JS以及C++版本没有做.考虑到开发言语的等价性,VB.net示例将不开发.</p>
<p>运行示例前请执行bin目录的reg.bat注册控件(其中SplitterATLControl.dll不属于本产品，VB6 demo中用到)，执行unreg.bat可以注销控件。</p>
<p>如果由于找不到数据库发生错误，请将其他目录下的数据库文件拷贝到本目录。</p>
<p><br>history:</p>
<p>2008-9-15, 1.0.1&#946;<br>1.PMGTLT_CUSTOM类型的时间轴更改为用户自绘制<br>2.PMDisplay接口增加绘制字符串、矩形、路径等功能<br>3.颜色、字体等对象的暴露实现高级绘制<br>4.Gantt增加OnPostDrawNodeSprite,提供精灵绘制完毕后的附加图形信息绘制事件<br>5.C#示例</p>
<p><br>2008-9-21, 1.1.0 release<br>1.增加控件授权机制<br>2.VBS Delphi7示例完成<br>3.第一版本正式发布</p>
<p><br>目前正在编写帮助手册<br>网站将会在10月建设完毕<br><br><br>// 授权:<br>//&nbsp;&nbsp;&nbsp;&nbsp; 企业版:绑定exe,不限制分发数量 (免费技术支持1年)<br>//&nbsp;&nbsp;&nbsp;&nbsp; 价格:<br>//&nbsp;&nbsp;&nbsp;基础控件(PMDocument,PMGrid,PMGantt)&nbsp;2w RMB<br>//&nbsp;&nbsp;&nbsp;扩展控件PMADOAdapter&nbsp;&nbsp;&nbsp;&nbsp;1w RMB</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp; 个人版:绑定exe,控件底部会显示授权信息 (无技术支持)<br>//&nbsp;&nbsp;&nbsp;&nbsp; 价格:<br>//&nbsp;&nbsp;&nbsp;1k<br><br><br><a href="http://www.cppblog.com/files/wlwlxj/PerfectPM Release 1.10.rar">下载示例以及截图</a></p><img src ="http://www.cppblog.com/wlwlxj/aggbug/62823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-26 16:25 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/26/62823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web示例开始</title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/16/61991.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Tue, 16 Sep 2008 09:25:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/16/61991.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/61991.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/16/61991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/61991.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/61991.html</trackback:ping><description><![CDATA[<br>VBS第一例，因为vb6到vbs的例子转换最简单。<br><img height=708 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_WebVBS-001.PNG" width=1075 border=0><br>&nbsp;<br><br>继续转换一些典型示例：<br><img height=708 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_WebVBS-002.PNG" width=1070 border=0><br><br><img height=685 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_WebVBS-003.PNG" width=562 border=0><br><br><img height=486 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_WebVBS-004.PNG" width=549 border=0> 
<img src ="http://www.cppblog.com/wlwlxj/aggbug/61991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-16 17:25 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/16/61991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>甘特图1.0.1β发布 </title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/15/61834.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sun, 14 Sep 2008 19:52:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/15/61834.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/61834.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/15/61834.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/61834.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/61834.html</trackback:ping><description><![CDATA[<br>很久没有搞到这么晚了，终于把C#示例做完，后面的工作将是不熟悉的Delphi示例以及javascript示例。<br><br>history:<br>2008-9-15, 1.0.1&#946;<br>1.PMGTLT_CUSTOM类型的时间轴更改为用户自绘制<br>2.PMDisplay接口增加绘制字符串、矩形、路径等功能<br>3.颜色、字体等对象的暴露实现高级绘制<br>4.Gantt增加OnPostDrawNodeSprite,提供精灵绘制完毕后的附加图形信息绘制事件<br>5.C#示例<br><br><a href="http://www.cppblog.com/files/wlwlxj/1.01%CE%B2-demo.rar">下载</a> <br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_CSharp001.PNG" border="0" height="504" width="729"><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_CSharp002.PNG" border="0">&nbsp;<br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_CSharp003.PNG" border="0" height="405" width="556"><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_CSharp004.PNG" border="0" height="405" width="556"><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_CSharp005.PNG" border="0" height="405" width="556"><img src ="http://www.cppblog.com/wlwlxj/aggbug/61834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-15 03:52 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/15/61834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#示例开始</title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/13/61737.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sat, 13 Sep 2008 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/13/61737.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/61737.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/13/61737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/61737.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/61737.html</trackback:ping><description><![CDATA[<br>开始制作C#示例，一切都还顺利，只是接口转换的地方不太熟悉，老是碰到小问题。<br><br><img height=504 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_CSharp001.PNG" width=729 border=0>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/61737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-13 11:22 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/13/61737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gantt效果图示例</title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/11/61637.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 11 Sep 2008 15:54:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/11/61637.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/61637.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/11/61637.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/61637.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/61637.html</trackback:ping><description><![CDATA[<br>由于显示组件的暴露，使得控件的图形扩展能力大大加强，用户可以在控件的事件里面很容易的绘制自己的业务逻辑。下面是3副简单的效果图：<br><br><img height=565 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_011.PNG" width=703 border=0><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_012.PNG" border=0><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_013.PNG" border=0>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/61637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-11 23:54 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/11/61637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新功能</title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/08/61345.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Mon, 08 Sep 2008 15:21:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/08/61345.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/61345.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/08/61345.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/61345.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/61345.html</trackback:ping><description><![CDATA[<br>添加了一些新功能，主要依靠绘制接口方法的提供（对Gdiplus封装）<br><br>1、甘特图时间轴完全自绘制（刻度线等）<br><img height=565 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_006.PNG" width=703 border=0><br><br>2、甘特图视图自定义层绘制（数据线等）<br><img height=602 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_007.PNG" width=867 border=0><br><br>3、视图控件垂直滚动条的隐藏（与常用软件风格差异的一种弥补）<br><img height=602 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_008.PNG" width=867 border=0><br><br>4、多Bar示例以及Bar完全自绘制（生产排程）&nbsp;<br><img height=565 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_009.PNG" width=703 border=0>&nbsp;<br><br>5、精灵绘制完毕事件，可以实现一些辅助信息绘制：<br><img height=565 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_010.PNG" width=703 border=0>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/61345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-08 23:21 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/08/61345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>甘特图1.0.0β发布</title><link>http://www.cppblog.com/wlwlxj/archive/2008/09/07/61230.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sun, 07 Sep 2008 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/09/07/61230.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/61230.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/09/07/61230.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/61230.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/61230.html</trackback:ping><description><![CDATA[<p>Perfect是一套甘特图控件开发包，控件采用ATL+API开发，支持Windows平台所有编程语言(包括脚本语言)，运行在Win2000(包括)以上操作系统上。基于该控件，程序员可以很容易的开发出类似MSProject、P3EC的管理软件。适合于项目管理、生产管理、大修项目。</p>
<p>开发包目前包括：<br>1、PMDocument:文档控件，运行时不可见，主要负责存储数据，是所有控件的基础。<br>2、PMGrid:表格控件，通过表格方式展示文本信息。<br>3、PMGantt:甘特图控件，通过各种图形丰富的展现时间信息。<br>4、PMADOAdapter:ADO数据库适配器，通过ADO方式桥接数据库和PMDocument，缓存关键信息，加速数据加载和信息查询。</p>
<p>目前版本:1.0.0-&#946;，有一部分高级绘制接口暂时没有暴露。</p>
<p>示例采用VB6开发，更多语言的demo将会陆续开发出来。</p>
<p>运行示例前请执行bin目录的reg.bat注册控件(其中SplitterATLControl.dll不属于本产品，demo中用到)，执行unreg.bat可以注销控件。<br><br><a href="http://www.cppblog.com/files/wlwlxj/1.0.0&#946;-demo.rar">下载</a><br><br><img height=563 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_001.PNG" width=692 border=0><br><br><img height=667 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_002.PNG" width=901 border=0><br><br><img height=573 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_003.PNG" width=703 border=0><br><br><img height=610 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_004.PNG" width=867 border=0><br><br><img height=610 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_005.PNG" width=867 border=0><br><br>自定义甘特图表头绘制(全部自定制)：<br><img height=565 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/8028/o_006.PNG" width=703 border=0></p>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/61230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-09-07 17:15 <a href="http://www.cppblog.com/wlwlxj/archive/2008/09/07/61230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win32常规窗口Bridge</title><link>http://www.cppblog.com/wlwlxj/archive/2008/01/20/41544.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sun, 20 Jan 2008 15:09:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/01/20/41544.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/41544.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/01/20/41544.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/41544.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/41544.html</trackback:ping><description><![CDATA[<br>通过窗口过程替换，把win32窗口纳入到布局管理当中，对于Listview，Treeview、edit之类的界面元素使用系统的是非常经济实惠也是有效的方法。对于按钮，fade效果已经实现。效果：<br><img height=500 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_vista.PNG" width=623 border=0><br><br><img height=500 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_skinned.PNG" width=623 border=0><br><br>计划：<br>引入MDI<br>MFC文档结构支持<br>activex控件的host进一步完善<br>.net控件的host以及通信机制进一步完善<br>web控件（由于使用较多）的定制行处理<br>flash控件的通讯机制<br>控件的丰富<br>windows平台窗口skin的彻底解决<br>类似Json结构的Databind<br>脚本引擎的支持<br>窗口特效支持<br>线程支持<br>soap支持<br>设计器（？？？？）<br><br>先想到这么多，有时间就做做，不知道何年何月，唉，忙，最近研究libjingle头都大，线程＋信号，绕来绕去。 
<img src ="http://www.cppblog.com/wlwlxj/aggbug/41544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-01-20 23:09 <a href="http://www.cppblog.com/wlwlxj/archive/2008/01/20/41544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hook模块加入</title><link>http://www.cppblog.com/wlwlxj/archive/2008/01/05/40433.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Fri, 04 Jan 2008 16:43:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/01/05/40433.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/40433.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/01/05/40433.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/40433.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/40433.html</trackback:ping><description><![CDATA[<br>化了一天时间，把Hook功能集成进来。但是标准对话框尤其是新版本的OpenFile，还有一点问题，有时间再慢慢解决。.NET示例没做出了，一调试IDE就死，郁闷死了。<br><br>图片：<br><img height=377 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_hook_mfc.PNG" width=576 border=0><br><br><img height=377 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_hook_mfc2.PNG" width=576 border=0>&nbsp;<br><br><br><br>Hook VB<br><img height=381 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_UIHook01.PNG" width=464 border=0> <br><br>Hook OpenDialog<br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_UIHook02.PNG"> <br><br>Hook .NET<br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_UIHook03.PNG">&nbsp;<br><br><br>通过集成Win32窗口，使得控件可以大大的丰富：下面是Tree，描述主要如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Win32CtlBridge&nbsp;</span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="SysTreeView32"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;name</span><span style="COLOR: #0000ff">="nettree"</span><span style="COLOR: #0000ff">/&gt;</span></div>
<br><img height=500 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_Win32Bridge.PNG" width=623 border=0>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/40433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-01-05 00:43 <a href="http://www.cppblog.com/wlwlxj/archive/2008/01/05/40433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>界面库纳入新的窗口风格(Vista)</title><link>http://www.cppblog.com/wlwlxj/archive/2008/01/04/40376.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 03 Jan 2008 16:43:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2008/01/04/40376.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/40376.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2008/01/04/40376.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/40376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/40376.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Vista效果窗口&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2008/01/04/40376.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/40376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2008-01-04 00:43 <a href="http://www.cppblog.com/wlwlxj/archive/2008/01/04/40376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GUI作品 欣赏</title><link>http://www.cppblog.com/wlwlxj/archive/2007/08/28/31014.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Tue, 28 Aug 2007 05:13:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2007/08/28/31014.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/31014.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2007/08/28/31014.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/31014.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/31014.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: GUI&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2007/08/28/31014.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/31014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2007-08-28 13:13 <a href="http://www.cppblog.com/wlwlxj/archive/2007/08/28/31014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Go On</title><link>http://www.cppblog.com/wlwlxj/archive/2007/08/10/29690.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Fri, 10 Aug 2007 06:35:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2007/08/10/29690.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/29690.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2007/08/10/29690.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/29690.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/29690.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OutlookBar：&nbsp;StackBar &amp;&amp; ImageCanvas：&nbsp;&nbsp;基于OPENGL的实现尝试：&nbsp;3维里面中文字体的处理比较麻烦，dx10开始支持界面控件，不知道是否已经支持中文。dx9以及ogl本身不支持中文，所以需要借助其他辅助库。freetype是不错的字体管理库，用它来处理3维中的中英文会很轻松。&nbsp;&nbsp;OGL...&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2007/08/10/29690.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/29690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2007-08-10 14:35 <a href="http://www.cppblog.com/wlwlxj/archive/2007/08/10/29690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可以供把玩的demo</title><link>http://www.cppblog.com/wlwlxj/archive/2007/08/03/29306.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Fri, 03 Aug 2007 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2007/08/03/29306.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/29306.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2007/08/03/29306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/29306.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/29306.html</trackback:ping><description><![CDATA[<br>提供一个可以供初步把玩的小例子，skin目录是皮肤文件以及描述、res是程序需要的各种资源、gui是界面描述文件(有兴趣可以尝试一下，属性列表是比较稳定的部分ui元素，控件类由于尚不完善没有列出)。程序启动main.xml，你可以修改此文件。 <br><br><a href="http://www.cppblog.com/files/wlwlxj/xui_bin1.rar">下载</a><br><br>截图：<br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_10_1.PNG"><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_10_2.PNG"><br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_10_3.PNG"><br>&nbsp;<br>只要有控件资源，一个丰富得系统可以很快搭建起来：<br><img height=554 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_10_9.PNG" width=750 border=0><br><br><img height=564 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_10_10.PNG" width=741 border=0><br>&nbsp;<br><img height=554 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_11_1.PNG" width=750 border=0><br><br><img height=554 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_11_2.PNG" width=750 border=0><br><br><img height=554 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_11_3.PNG" width=750 border=0><br><br><img height=554 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_11_4.PNG" width=750 border=0>&nbsp;<br><br>工具栏：<br><img height=500 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_12_1.PNG" width=750 border=0>&nbsp;<br><br>HeaderPanel：<br><img height=500 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_12_2.PNG" width=750 border=0><br>&nbsp;<br>Host DotNet控件：<br><img height=499 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_12_4.PNG" width=745 border=0><br><br><img height=499 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_12_5.PNG" width=745 border=0><br><br><img height=500 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_xui_12_8.PNG" width=750 border=0>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/29306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2007-08-03 16:52 <a href="http://www.cppblog.com/wlwlxj/archive/2007/08/03/29306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>activex控件容器实现</title><link>http://www.cppblog.com/wlwlxj/archive/2007/05/11/23912.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Fri, 11 May 2007 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2007/05/11/23912.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/23912.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2007/05/11/23912.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/23912.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/23912.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 容纳activex成为宿主&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2007/05/11/23912.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/23912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2007-05-11 17:27 <a href="http://www.cppblog.com/wlwlxj/archive/2007/05/11/23912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何实现UI</title><link>http://www.cppblog.com/wlwlxj/archive/2007/05/08/23618.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Tue, 08 May 2007 03:52:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2007/05/08/23618.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/23618.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2007/05/08/23618.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/23618.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/23618.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从一副图片到一个界面&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2007/05/08/23618.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/23618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2007-05-08 11:52 <a href="http://www.cppblog.com/wlwlxj/archive/2007/05/08/23618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几个demo来说明WLWUI如何描述界面</title><link>http://www.cppblog.com/wlwlxj/archive/2007/04/05/21329.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 05 Apr 2007 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2007/04/05/21329.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/21329.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2007/04/05/21329.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/21329.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/21329.html</trackback:ping><description><![CDATA[<br>默认界面：<br><img height=307 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_demo_1.PNG" width=381 border=0><br>用RGB描述菜单条：<br><img height=307 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_demo_2.PNG" width=381 border=0><br>用Image描述菜单条：<br><img height=307 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_demo_3.PNG" width=381 border=0><br>用Image描述主窗口：<br><img height=307 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_demo_4.PNG" width=381 border=0><br><img height=307 alt="" src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_demo_5.PNG" width=381 border=0><br><br>demo <a href="http://www.cppblog.com/files/wlwlxj/bin.rar">下载</a> <br>注：VC71编译非Static链接Release版本，需要gdiplus支持。
<img src ="http://www.cppblog.com/wlwlxj/aggbug/21329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2007-04-05 16:35 <a href="http://www.cppblog.com/wlwlxj/archive/2007/04/05/21329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一篇要发表的“论文”</title><link>http://www.cppblog.com/wlwlxj/archive/2006/12/09/16170.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Sat, 09 Dec 2006 08:30:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2006/12/09/16170.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/16170.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2006/12/09/16170.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/16170.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/16170.html</trackback:ping><description><![CDATA[电信到期了，上不了这里拉。刚开始用校园网，不熟悉使用，代理都找不到，唉。。。<br />要发表论文了，不发表不能毕业，所以草草写了一篇，花500大洋，现在的世道啊。。。<br />我的论文是关于gdi+，对于gdi+的学习比我预算的早，由于某种原因。由于对gdi比较熟悉，只花了2天左右时间看了msdn上面关于gdi+的部分，不是很明白但是还算清楚。<br />gdi+应该是.net控件库开发的副产品，支持很多图形渲染特效，可以运用在本地c++代码，也可以运行在.net托管代码里面，有点类似于cli的意味。<br />gdi+运用领域：简单图像处理、控件制作、Web图表、图形渲染、文字特效。有人问为什么不是Gdi.net而是gdi+，一方面可能是它有本地调用版本（C++调用），另一方面让我想起了Asp.net，当初叫Asp+，难道是过渡产品？？？不得而知，罢了还是学习一下，既然可以制作漂亮控件嘛！<br /><br />记得去年这个时候（好像早一些时候），我为了帮别人做课程设计写了一个使用GDI的绘图小程序，没想到下载量居然有2000多，估计大多都是学校学生下载的。年年花相似，年年花不同。时代变化，人成长了，学到的东西多了，做的还是老事情，总的有点创新。拟打算结合gdi和gdi+技术写一个图形绘制程序，使用gdi交互，使用gdi+渲染。正好赶上有论文发表，先写了点思想，东西刚做个雏形，不好拿出来。<br /><br /><a href="/files/wlwlxj/GDI+在图形系统中的应用.rar">论文下载</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/16170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2006-12-09 16:30 <a href="http://www.cppblog.com/wlwlxj/archive/2006/12/09/16170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Window Shell 进度条使用挖掘</title><link>http://www.cppblog.com/wlwlxj/archive/2006/11/09/14920.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 09 Nov 2006 13:00:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2006/11/09/14920.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/14920.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2006/11/09/14920.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/14920.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/14920.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 长操作进度条解决方案，可以满足一般需求&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2006/11/09/14920.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/14920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2006-11-09 21:00 <a href="http://www.cppblog.com/wlwlxj/archive/2006/11/09/14920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC实现多风格真彩色大图标工具栏按钮</title><link>http://www.cppblog.com/wlwlxj/archive/2006/11/09/14897.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 09 Nov 2006 05:00:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2006/11/09/14897.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/14897.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2006/11/09/14897.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/14897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/14897.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 类似winrar界面的工具栏&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2006/11/09/14897.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/14897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2006-11-09 13:00 <a href="http://www.cppblog.com/wlwlxj/archive/2006/11/09/14897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工具栏插件设计</title><link>http://www.cppblog.com/wlwlxj/archive/2006/10/13/13642.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Fri, 13 Oct 2006 06:30:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2006/10/13/13642.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/13642.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2006/10/13/13642.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/13642.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/13642.html</trackback:ping><description><![CDATA[
		<p>
				<font size="6">
						<strong>影子</strong>
				</font>
				<br />刚回到学校，一时半会没有安定下来，呆在学校无事。走在武汉街道上，处处飘着桂花香，想起“八月桂花遍地开”歌声。前人总结的规律总是那么准确，自然忆起父辈经常在耳边的唠叨：不听老人言，吃亏在眼前。思想在钢枪铁炮的西方思潮和大刀长矛的中国传统的熏染下，人不免变得浮躁、善变，左右摇摆，骑墙观望。<br />前一段时间一个朋友一直叨念着让我给他做一个插件系统，他抱怨插件的消息传递不畅通，无法下手构建属于自己plugin system。我告诉他应该怎么去研究，他非要我动手给他demo一个，并且指明要“Eclipse”那样的。我没有那么好设计思想，也没有很强的技术，对Eclipse更是知之甚少，一直走在Microsoft大道上，深受billgate庇护，省去了Java开发的一堆环境配置问题。<br />第一次走进公司到现在有两年零几天了，作为一个学生我清楚在公司应该如何。一直没有偏离自己理想，在痛苦中成长，体会到痛并快乐着的滋味。在做系统的时候，由于对mfc知识掌握不足，dll封装UI的时候经常出现资源切换问题，Debug和Release下也会出现不同行为，就连非dll里面模态对话框的支持都是麻烦(还是资源问题)。有一个同事采用CLocalResource解决资源切换麻烦，当然大部分情况下是没有好用的，然而在两个dll互相调用有UI参与的时候还是一样回出现句柄非法。这一切让我明白，好的框架设计和软件职能分解是最只要的。于是我不遗余力的追逐plugin技术，思考软件行为，加强编程技巧。其间受到一位对我影响很大的人的帮助，我感慨万千，人生际遇很重要。</p>
		<p>
				<font size="6">
						<strong>设计技术</strong>
				</font>
				<br />UI技巧和算法技巧同等重要。追求过跨平台的UI库(QT、wxWidget)，爱慕过小巧的UI库(WTL、fox)，甚至冲动的想用Win32写框架、用ATL编写控件库。在项目里，我用ATL写对话框的时候，我尝尽了苦头，没有DDX机制，API麻烦的调用、字符串处理困难等。要解决这些问题，不得不引入其他库，考虑一下：你用的库别人熟悉吗？你用的库别人容易用吗？每个人都要引入库会不会冗余？当加入所有这些支持，恐怕比MFC不会小到那里(这里意思不是反对使用其他库而鼓吹MFC)。实际的项目很少是一人所为，所以应该选择大家都熟悉的库(是什么?)。也曾经嫌弃过MFC，现在不了，而是想如何充分利用他所有机制。<br />涉及到的技术有：idl、ATL、MFC。用idl文件定义系统接口，形成system的脉络。ATL制作插件，实现system的必须接口。MFC提供system的UI基础设施(Toolbar Frame Doc/View ......)。</p>
		<p>
				<font size="6">
						<strong>目标</strong>
				</font>
				<br />实现一般界面元素的plugin扩展支持，依次实现Toolbar plugin、menu plugin、statusbar plugin、dockbar plugin、Doc/View plugin，通过XML配置描述插件实现UI。</p>
		<p>
				<strong>
						<font size="6">技术思路</font>
				</strong>
				<br />一个灵活的系统必须有清晰的结构，为扩展提供必要的内建支持设施。结构的清晰保证插件可以合理操纵系统的编程点，内建支持保证插件扩展的简单性、UI统一性、UI多样性(只需系统内部修改UI样式即可实现不同风格UI)。<br />看几个结构模型：DOM模型、VBA、.NET的CodeDOM。<br /><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_frame_1.jpg" /><br />(DOM)<br /><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_frame_2.jpg" /><br />(.NET CodeDOM)<br /><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_frame_3.jpg" /><br />(VBA)<br />通过上面的图形，我们可以清楚看到他们都有一个顶级对象，通过该顶级对象可以获取模型中的一切可编程对象。而作为一个外界插件，需要了解系统只需获取该顶级对象即可，该顶级对象在插件加载的时候传递给插件。</p>
		<p>
				<font size="6">
						<strong>框架设计</strong>
				</font>
				<br />
				<img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_frame_4.jpg" />
				<br />系统通过一个顶级对象IApplication可以获取所有内部对象。加载插件的时候传递该对象，插件通过该对象了解系统模型，创建UI、设置命令接口。系统拥有插件的命令接口驱动插件，插件拥有系统模型调用系统功能，彼此间互相了解，正常通信。<br /><font size="6"><strong><br />接口设计<br /></strong></font></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">[<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">object</span>
				<span style="COLOR: #000000">,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    uuid(D6424B18</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">886A</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">47c8</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">8D10</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">A8A977C1DBF4),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    helpstring(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">IApplication Interface</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    pointer_default(unique)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> IApplication : IUnknown<br /><img id="Codehighlighter1_156_271_Open_Image" onclick="this.style.display='none'; Codehighlighter1_156_271_Open_Text.style.display='none'; Codehighlighter1_156_271_Closed_Image.style.display='inline'; Codehighlighter1_156_271_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_156_271_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_156_271_Closed_Text.style.display='none'; Codehighlighter1_156_271_Open_Image.style.display='inline'; Codehighlighter1_156_271_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_156_271_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_156_271_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method GetMainFrame</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT GetMainFrame([</span>
						<span style="COLOR: #0000ff">out</span>
						<span style="COLOR: #000000">, retval]IMainFrame</span>
						<span style="COLOR: #000000">**</span>
						<span style="COLOR: #000000"> ppMainFrame);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">object</span>
				<span style="COLOR: #000000">,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    uuid(D59C6E9F</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">70F6</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">44b0</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">8358</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">5AA0BB6DB1D1),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    helpstring(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">IMainFrame Interface</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    pointer_default(unique)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> IMainFrame : IUnknown<br /><img id="Codehighlighter1_427_664_Open_Image" onclick="this.style.display='none'; Codehighlighter1_427_664_Open_Text.style.display='none'; Codehighlighter1_427_664_Closed_Image.style.display='inline'; Codehighlighter1_427_664_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_427_664_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_427_664_Closed_Text.style.display='none'; Codehighlighter1_427_664_Open_Image.style.display='inline'; Codehighlighter1_427_664_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_427_664_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_427_664_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method CreateToolBar</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT CreateToolBar([</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]BSTR bstrCaption, [</span>
						<span style="COLOR: #0000ff">out</span>
						<span style="COLOR: #000000">, retval]IWLWToolBar</span>
						<span style="COLOR: #000000">**</span>
						<span style="COLOR: #000000"> ppToolBar);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method GetMainWnd</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT GetMainWnd([</span>
						<span style="COLOR: #0000ff">out</span>
						<span style="COLOR: #000000">, retval]LONG</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> pMainWnd);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">object</span>
				<span style="COLOR: #000000">,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    uuid(687ACF1C</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1EC0</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">4808</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">B04C</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">9455B97D3D6D),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    helpstring(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">IAddin Interface</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    pointer_default(unique)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> IWLWAddin : IUnknown<br /><img id="Codehighlighter1_815_985_Open_Image" onclick="this.style.display='none'; Codehighlighter1_815_985_Open_Text.style.display='none'; Codehighlighter1_815_985_Closed_Image.style.display='inline'; Codehighlighter1_815_985_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_815_985_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_815_985_Closed_Text.style.display='none'; Codehighlighter1_815_985_Open_Image.style.display='inline'; Codehighlighter1_815_985_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_815_985_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_815_985_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method OnConnect</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT OnConnect([</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]IApplication</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> pApp);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method OnDisconnect</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT OnDisconnect();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">object</span>
				<span style="COLOR: #000000">,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    uuid(1ED92132</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">09BF</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">409b</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">951D</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">EEE68706C67C),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    helpstring(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">IToolBar Interface</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    pointer_default(unique)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> IWLWToolBar : IUnknown<br /><img id="Codehighlighter1_1140_1536_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1140_1536_Open_Text.style.display='none'; Codehighlighter1_1140_1536_Closed_Image.style.display='inline'; Codehighlighter1_1140_1536_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1140_1536_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1140_1536_Closed_Text.style.display='none'; Codehighlighter1_1140_1536_Open_Image.style.display='inline'; Codehighlighter1_1140_1536_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_1140_1536_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1140_1536_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method SetToolbarInfo</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT SetToolbarInfo(<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG lInstance,            [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]IWLWCommand</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> pICommand,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG lBitmapResource);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method AddCommand</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT AddCommand(<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]BSTR bstrCommand, [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]BSTR bstrTooltip,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]BSTR bstrMessage, [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG lBitmapOffset);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">3</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method FinishAdd</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT FinishAdd();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">object</span>
				<span style="COLOR: #000000">,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    uuid(</span>
				<span style="COLOR: #000000">05393789</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">A95B</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">4172</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">941A</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">E532DF38F4E4),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    helpstring(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">ICommand Interface</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">),<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    pointer_default(unique)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> IWLWCommand : IUnknown<br /><img id="Codehighlighter1_1691_1972_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1691_1972_Open_Text.style.display='none'; Codehighlighter1_1691_1972_Closed_Image.style.display='inline'; Codehighlighter1_1691_1972_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1691_1972_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1691_1972_Closed_Text.style.display='none'; Codehighlighter1_1691_1972_Open_Image.style.display='inline'; Codehighlighter1_1691_1972_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_1691_1972_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1691_1972_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method OnCommand</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT OnCommand([</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]BSTR bstrCommand, [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG wParam, [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG lParam);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    [id(</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">), helpstring(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">method Enable</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), hidden] HRESULT Enable([</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]BSTR bstrCommand, [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG wParam, [</span>
						<span style="COLOR: #0000ff">in</span>
						<span style="COLOR: #000000">]LONG lParam, [</span>
						<span style="COLOR: #0000ff">out</span>
						<span style="COLOR: #000000">, retval]VARIANT_BOOL</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> pbEnable);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;</span>
		</div>
		<p>
				<br />
				<font size="6">目前实现</font>
				<br />工具栏插件基本实现，通过文本文件加载插件。处理工具栏按钮tooltip、状态栏提示、消息响应、UI状态处理。<br />修改意见：添加下拉式按钮、添加控件到工具栏、添加Rebar风格工具栏、定制工具栏。<br />插件文本：<br /><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_frame_5.jpg" /><br />界图：<br /><img src="http://www.cppblog.com/images/cppblog_com/wlwlxj/730/o_frame_6.jpg" /><br /><br /><a href="/files/wlwlxj/SmallPlatform.rar">代码下载</a> 内含说明<br /><br />学习同时谢谢提出意见</p>
<img src ="http://www.cppblog.com/wlwlxj/aggbug/13642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2006-10-13 14:30 <a href="http://www.cppblog.com/wlwlxj/archive/2006/10/13/13642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Skin实现Java SWING Like GUI </title><link>http://www.cppblog.com/wlwlxj/archive/2006/09/28/13125.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Thu, 28 Sep 2006 13:22:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2006/09/28/13125.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/13125.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2006/09/28/13125.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/13125.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/13125.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 俺花了几天研究并加上一天实践的Skin技术，希望大家感兴趣......&nbsp;&nbsp;<a href='http://www.cppblog.com/wlwlxj/archive/2006/09/28/13125.html'>阅读全文</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/13125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2006-09-28 21:22 <a href="http://www.cppblog.com/wlwlxj/archive/2006/09/28/13125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>扑克牌控件(MFC AxtiveX)</title><link>http://www.cppblog.com/wlwlxj/archive/2006/03/20/4386.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Mon, 20 Mar 2006 10:42:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2006/03/20/4386.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/4386.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2006/03/20/4386.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/4386.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/4386.html</trackback:ping><description><![CDATA[很久没有写随笔，发现自己变懒很多。最近没有做什么事情，每天昏昏沉沉过去咯。在一个多干少干的环境里面，把我学习技术的热诚也折磨的没有了。<br />翻翻以前的代码，发现还做过这样一个控件，或许对别人有用(昨天发给一个csdn上想学习的兄弟)，拿出来。<br />基于MFC AxtiveX，用VC6写的，实现牌面设置(正反面)、牌面值设置、出牌设置等。<br />下面是截图：
<br /><a href="/wlwlxj/gallery/image/405.html">设计时：</a><br /><a href="/wlwlxj/gallery/image/408.html">运行初始：</a><br /><a href="/wlwlxj/gallery/image/407.html">设置牌面：</a><br /><a href="/wlwlxj/gallery/image/406.html">设置出牌：</a><br />&gt;<a href="/files/wlwlxj/MyMakeCtrl.rar">代码下载:</a><img src ="http://www.cppblog.com/wlwlxj/aggbug/4386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2006-03-20 18:42 <a href="http://www.cppblog.com/wlwlxj/archive/2006/03/20/4386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个小型绘图程序</title><link>http://www.cppblog.com/wlwlxj/archive/2005/12/20/1914.html</link><dc:creator>万连文</dc:creator><author>万连文</author><pubDate>Tue, 20 Dec 2005 10:08:00 GMT</pubDate><guid>http://www.cppblog.com/wlwlxj/archive/2005/12/20/1914.html</guid><wfw:comment>http://www.cppblog.com/wlwlxj/comments/1914.html</wfw:comment><comments>http://www.cppblog.com/wlwlxj/archive/2005/12/20/1914.html#Feedback</comments><slash:comments>43</slash:comments><wfw:commentRss>http://www.cppblog.com/wlwlxj/comments/commentRss/1914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wlwlxj/services/trackbacks/1914.html</trackback:ping><description><![CDATA[<DIV>前两天，由于一个老同学学习VC，老师要求做一个绘图程序，而他不是计算机专业，所以找我帮忙。在导师公司做了一年，主要做GDI那块，比较熟悉，于是欣然答应。</DIV>
<DIV>花了一个晚上加上一个早上，终于按照他老师要求实现了全部功能，包括矩形、圆、椭圆、填充椭圆、填充矩形和直线的绘制交互，显示，存储，树列表、闪烁选择图形、视图滚动等。下面是界面截图（VC6实现）：</DIV>
<DIV>&nbsp;</DIV>
<P><A href="/wlwlxj/gallery/image/339.html">程序截图</P>
<P><A HREF="/files/wlwlxj/DrawSys0.1.rar"><FONT color=#004377>点我下载源码</FONT></A></P>
<P><FONT color=#004377></FONT>&nbsp;</P>
<P>感想如下：</P>
<P>1、C++面向对象，继承、多态尤为突出，封装到达可以任意添加功能而改动不大。</P>
<P>2、有时间我会继续添加功能，我想如果花点心思，可以成为一个小型二维平面设计软件（^_^，吹牛！）。</P>
<P>3、由于时间问题，当前版本有很多不如意的地方，比如闪烁时滚动的问题，我做了变态点的办法避免，方法很不好，但是由于考试忙呀，没办法，有时间一定研究研究。不过我相信死机bug很少，嘿嘿。</P>
<P>4、希望其他朋友有兴趣，下载并扩展，有心得与我交流！！！</P><img src ="http://www.cppblog.com/wlwlxj/aggbug/1914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wlwlxj/" target="_blank">万连文</a> 2005-12-20 18:08 <a href="http://www.cppblog.com/wlwlxj/archive/2005/12/20/1914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>