﻿<?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++博客-λ-calculus（长门流的程序员们，5月21日23:40，此刻我们胜利啦！）-随笔分类-C++</title><link>http://www.cppblog.com/vczh/category/6885.html</link><description>【QQ：343056143（已满），504254078】【MSN：vczh@hotmail.com】【Email：vczh@163.com】</description><language>zh-cn</language><lastBuildDate>Sat, 18 Jul 2009 03:14:12 GMT</lastBuildDate><pubDate>Sat, 18 Jul 2009 03:14:12 GMT</pubDate><ttl>60</ttl><item><title>C++远程调用类操作支持Callback Interface</title><link>http://www.cppblog.com/vczh/archive/2009/07/18/90409.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 18 Jul 2009 02:20:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/07/18/90409.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/90409.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/07/18/90409.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/90409.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/90409.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天展示一下如何使用这里描写的库实现一个简单的聊天工具。Callback Interface是昨晚才加的，但是还有一些features没实现，等做完了再做一个Demo，然后提供源代码。<br><br>使用这个东西可以开发一些C/S模式的程序，然后只需要将服务器和客户端看成同一个程序，将客户端认为是很多个线程就行了。服务器端提供一些类给客户端创建并使用，当这些服务类要求回调的时候，客户端只需要按照回调的接口实现回调，然后将指针提供给服务类就行了。剩下来的链接啊调度啊网络传输的问题就全部不用管了，非常方便。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/07/18/90409.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/90409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-07-18 10:20 <a href="http://www.cppblog.com/vczh/archive/2009/07/18/90409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现C++远程调用类的操作。</title><link>http://www.cppblog.com/vczh/archive/2009/07/04/89211.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 04 Jul 2009 02:07:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/07/04/89211.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/89211.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/07/04/89211.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/89211.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/89211.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这次展示如何将一个服务器端的C++类让客户端调用。使用早上刚刚开发完的工具，用户可以不用处理任何传输过程中的连接和编码解码等操作。这次实现一个四则运算的语法分析器，客户端发送表达式，服务器端传回语法树（继承树那个模型），客户端将语法树传回去，服务器端传回运算结果。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/07/04/89211.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/89211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-07-04 10:07 <a href="http://www.cppblog.com/vczh/archive/2009/07/04/89211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++基于类似反射机制的函数调用完成</title><link>http://www.cppblog.com/vczh/archive/2009/06/30/88880.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 30 Jun 2009 04:47:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/06/30/88880.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/88880.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/06/30/88880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/88880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/88880.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 现在不仅可以阅读类的成员，也可以用函数名的字符串去调用函数并取得结果了。代码与这篇文章的实例类似，因此只贴出更改的部分以及程序截图。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/06/30/88880.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/88880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-06-30 12:47 <a href="http://www.cppblog.com/vczh/archive/2009/06/30/88880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>残废版HTTP Server之小试牛刀</title><link>http://www.cppblog.com/vczh/archive/2009/06/29/88834.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 29 Jun 2009 13:19:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/06/29/88834.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/88834.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/06/29/88834.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/88834.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/88834.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了给C++的反射做Demo，不得不研究一下HTTP的协议。后来发现Windows自带了API可以用，于是就写了个小东西。程序打开之后，如果检测到【http://localhost:8080/vczh/FILENAME】这样子的请求，就将一个目录下面的东西读出来，然后返回。于是就可以用IE来运行某个地方的网页了。代码如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/06/29/88834.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/88834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-06-29 21:19 <a href="http://www.cppblog.com/vczh/archive/2009/06/29/88834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++基于类似反射机制的XML序列化和反序列化完成</title><link>http://www.cppblog.com/vczh/archive/2009/06/29/88758.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 29 Jun 2009 04:12:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/06/29/88758.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/88758.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/06/29/88758.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/88758.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/88758.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 跟上一篇文章一样，一样的数据结构，但是添加了对数组、列表和映射的更多的支持。首先是代码，然后是序列化后的XML文件。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/06/29/88758.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/88758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-06-29 12:12 <a href="http://www.cppblog.com/vczh/archive/2009/06/29/88758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重写了C++的类似反射的工具</title><link>http://www.cppblog.com/vczh/archive/2009/06/25/88533.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 25 Jun 2009 14:48:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/06/25/88533.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/88533.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/06/25/88533.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/88533.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/88533.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 所谓的反射当然不是自动化的，而是需要自己打标记的。下面会展示两份文件，告诉大家我这个做了一半的反射是怎么工作的。写这个东西的主要目的是，将来可以实现序列化，譬如说序列化到流，或者序列化到XML文件，或者做其他的事情等等（譬如说使用类名创建对象并进行修改）。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/06/25/88533.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/88533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-06-25 22:48 <a href="http://www.cppblog.com/vczh/archive/2009/06/25/88533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用COM实现控件内容的Drag and Drop</title><link>http://www.cppblog.com/vczh/archive/2009/05/30/86163.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 30 May 2009 05:17:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/30/86163.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/86163.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/30/86163.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/86163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/86163.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     查了MSDN，发现Windows支持Drag and Drop的方法是四个COM：IEnumFORMATETC、IDataObject、IDropSource和IDropTarget。为了让自己做的一个代码编辑文本框里面的代码可以被拖出去拖进来，无奈之下只好实现了这四个东西。<br><br>    实现了之后，程序刚开始需要调用OldInitialize(NULL);，结束的时候调用OnUninitialize();，控件创建的时候调用RegisterDragDrop，控件结束的时候调用RevokeDragDrop。然后就可以通过这些COM来做Drag and Drop了。下面是接口的实现：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/30/86163.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/86163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-30 13:17 <a href="http://www.cppblog.com/vczh/archive/2009/05/30/86163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Combinator Parser修改错误处理方法</title><link>http://www.cppblog.com/vczh/archive/2009/05/04/81860.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 04 May 2009 10:35:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/04/81860.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/81860.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/04/81860.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/81860.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/81860.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在实验了CMinus语法分析器的错误处理之后发现一个问题，Combinator Parser返回的错误是最上级的错误，而不是最底层的错误。因此修改了语法分析器的一部分代码：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/04/81860.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/81860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-04 18:35 <a href="http://www.cppblog.com/vczh/archive/2009/05/04/81860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搞定模板元编程（meta programming）</title><link>http://www.cppblog.com/vczh/archive/2009/04/08/79291.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 08 Apr 2009 13:17:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/08/79291.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/79291.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/08/79291.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/79291.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/79291.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     今天闲得无聊，早上起来习惯性瞟一瞟boost，突然看中了它的MPL库，所以自己实现了一个子集消磨时间。<br><br>    已经实现的功能有：整数运算、闭包、列表处理等。我用了自己的unit test框架，通过写一个函数输出一个属于自己的MPL类型的字符串（譬如List<Int<0>,List<Int<1>,Empty>>产生"[0 , 1]"），然后用自己写的字符串比较，可以发现库里面是否有错。<br><br>    一下有两份代码，第一份是使用，第二份是自己的MPL的源代码：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/08/79291.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/79291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-08 21:17 <a href="http://www.cppblog.com/vczh/archive/2009/04/08/79291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现了Huffman压缩解压算法</title><link>http://www.cppblog.com/vczh/archive/2009/01/11/71693.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 10 Jan 2009 17:16:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/01/11/71693.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/71693.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/01/11/71693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/71693.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/71693.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天终于在流系统里面添加了Huffman的压缩解压算法，现在只需要将一个LZ77流加到Huffman流上面，就能同时使用两种压缩算法进行压缩了。我的Huffman算法使用了Canonical Huffman编码方法进行Huffman树的生成。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/01/11/71693.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/71693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-01-11 01:16 <a href="http://www.cppblog.com/vczh/archive/2009/01/11/71693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改后的LZ77压缩解压源码</title><link>http://www.cppblog.com/vczh/archive/2009/01/07/71418.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 07 Jan 2009 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/01/07/71418.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/71418.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/01/07/71418.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/71418.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/71418.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这份代码跟上一次相比，修正了以下部分：<br><br>1、可修改的Window Size。压缩流会把Window Size写进去，解压流能够自动获取。<br>2、发现冗余的地方，每一个标记的压缩块节省了一位。<br>3、如果用户一次性写入的字节不够多则会缓存起来，上一版本则是直接压缩完。这样会丢失某些原本可以压缩的数据，因此修正。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/01/07/71418.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/71418.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-01-07 15:35 <a href="http://www.cppblog.com/vczh/archive/2009/01/07/71418.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LZ77压缩效果测试</title><link>http://www.cppblog.com/vczh/archive/2009/01/07/71390.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 06 Jan 2009 16:36:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/01/07/71390.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/71390.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/01/07/71390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/71390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/71390.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天将我的VL_LZ77Stream修改成了可以设置窗口大小的压缩流。我用了一些文件进行压缩和对比。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/01/07/71390.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/71390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-01-07 00:36 <a href="http://www.cppblog.com/vczh/archive/2009/01/07/71390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现了一个128长度窗口大小的LZ77压缩解压算法</title><link>http://www.cppblog.com/vczh/archive/2009/01/06/71275.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 05 Jan 2009 17:47:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/01/06/71275.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/71275.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/01/06/71275.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/71275.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/71275.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这个压缩流是Vczh Library++ 2.0庞大的流与控制器系统的其中一个部分。我准备将其改造成可调大小的，并且打算添加LZW与Huffman压缩解压算法。以下是用C++实现的代码。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/01/06/71275.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/71275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-01-06 01:47 <a href="http://www.cppblog.com/vczh/archive/2009/01/06/71275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分解复杂的命令行参数</title><link>http://www.cppblog.com/vczh/archive/2008/12/24/70253.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 24 Dec 2008 09:13:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/24/70253.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/70253.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/24/70253.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/70253.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/70253.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 当我们的程序需要运行在命令行环境下的时候，分解复杂的命令行参数往往成为一件不难但又麻烦的事情。我们经常发现.net的开发工具的命令行格式都是"/parameterA:valueA /parameterB:valueB"。如果我们希望使用这种格式的命令行参数的话，如何分析就成为我们需要解决的一个问题。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/24/70253.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/70253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-24 17:13 <a href="http://www.cppblog.com/vczh/archive/2008/12/24/70253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vczh Serialization Demo ：在网络上传递复杂对象</title><link>http://www.cppblog.com/vczh/archive/2008/11/22/67612.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 22 Nov 2008 10:26:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/11/22/67612.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/67612.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/11/22/67612.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/67612.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/67612.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天将Serialization进行了重构，让其支持容器。于是使用以前的基础设施就能完成这个Demo了。代码如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/11/22/67612.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/67612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-11-22 18:26 <a href="http://www.cppblog.com/vczh/archive/2008/11/22/67612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我做的一个C++用的Serialization库（含部分源码）</title><link>http://www.cppblog.com/vczh/archive/2008/11/22/67552.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 21 Nov 2008 17:09:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/11/22/67552.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/67552.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/11/22/67552.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/67552.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/67552.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 众所周知，boost里面有一个Serialization。不过我这个跟boost的有本质上的差别。boost的Serialization是通过重载操作符将一个对象与一个流进行读写，而我则通过记录类的成员变量来自动产生相应的读写动作。使用方便。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/11/22/67552.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/67552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-11-22 01:09 <a href="http://www.cppblog.com/vczh/archive/2008/11/22/67552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vczh GUI Framework Preview完成！Preview Demo开始制作！</title><link>http://www.cppblog.com/vczh/archive/2008/08/24/59785.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 24 Aug 2008 07:18:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/24/59785.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/59785.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/24/59785.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/59785.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/59785.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了展示Vczh Library++2.0中GUI Framework的强大威力，我制作了一个Regular Expression Debugger。这个软件可以用来调试正则表达式，主要用于检查正则表达式语法、观察表达式的语法树以及各种状态机、还有匹配测试等。这个Demo已经接近完成。GUI Framework和Demo的代码将在Demo彻底完成的时候放上来。下面贴图和创建界面的代码：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/24/59785.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/59785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-24 15:18 <a href="http://www.cppblog.com/vczh/archive/2008/08/24/59785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Status Bar完成</title><link>http://www.cppblog.com/vczh/archive/2008/08/16/59061.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 16 Aug 2008 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/16/59061.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/59061.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/16/59061.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/59061.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/59061.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     Status Bar所提供的消息相当的诡异。Status Bar里面的Items的数量以及宽度要一次性设置好，每次修改的时候都要推翻重建一次，只不过里面的Text倒是可以单独改掉。在XP底下有效的raise border似乎在Vista就没有了。看来Vista已经从伪3D彻底转向了2D了。<br><br>    Status Bar在CreateWindowEx的时候会自动将自己放在窗口的最底下，每一次修改Status Bar的尺寸的时候，它又会自动把自己放在窗口的最底下。当然，你可以让他出现在最上面。虽然如此，但是我封装的时候还是想自由地修改尺寸和位置，当且仅当我想让他出现在窗口最下面的时候他才出现在窗口最下面，于是我只好截获Status Bar的WM_SIZE消息并扔掉了。<br><br>    当初为每一个控件都自动Subclass掉的想法还真是正确啊……&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/16/59061.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/59061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-16 15:34 <a href="http://www.cppblog.com/vczh/archive/2008/08/16/59061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TrackBar迅速做完</title><link>http://www.cppblog.com/vczh/archive/2008/08/16/58992.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 15 Aug 2008 16:28:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/16/58992.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58992.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/16/58992.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58992.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58992.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Track Bar很是人性化，不会跟自己之前的经验冲突。Track Bar下面那些杠杠原来是自己插入的，还能改，还真是想干啥就能干啥……&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/16/58992.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-16 00:28 <a href="http://www.cppblog.com/vczh/archive/2008/08/16/58992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Scroll Bar完成</title><link>http://www.cppblog.com/vczh/archive/2008/08/15/58980.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 15 Aug 2008 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/15/58980.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58980.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/15/58980.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58980.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Win32 API为了让控件更为有用真是煞费苦心，不仅Tab没有提供控件可见控制，连Scroll Bar点击的时候竟然是不修改Position的，要我在每一个消息里用SBM_SETSCROLLINFO来设置当前的位置。而且当前的位置的获得还不是一致的，根据消息的不同而不同。真是故意为难人啊。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/15/58980.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-15 22:26 <a href="http://www.cppblog.com/vczh/archive/2008/08/15/58980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Vczh GUI Framework取材决定</title><link>http://www.cppblog.com/vczh/archive/2008/08/14/58876.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 14 Aug 2008 13:21:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/14/58876.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58876.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/14/58876.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58876.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58876.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天不小心看到了http://www.antlr.org/works/index.html，我一直认为ANTLR是LR(k)分析器，后来我错了，原来只是LL(k)。我以前写的一个Vczh Syngram是LR(k)的畸形，今天看了居然连LL(k)都能有GUI，我不做一个岂不是对不起自己？&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/14/58876.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-14 21:21 <a href="http://www.cppblog.com/vczh/archive/2008/08/14/58876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TabControl封装完成</title><link>http://www.cppblog.com/vczh/archive/2008/08/13/58770.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 13 Aug 2008 14:33:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/13/58770.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58770.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/13/58770.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58770.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58770.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     原来API提供的TabControl只是改改样式而已，客户区连TabPage标签也算在了里面，点击不同的TabPage也不会自动切换子控件的可见属性。这些都要封装啊囧……<br><br>    在这个设计里，虽然TabPage是一个普通的类，但是每一个TabPage都会自动附带一个Static Control，并在适当的时机修改大小以及修改可见属性。子控件实际上需要放在TabPage的Static Control里，不然的话其实可以连TabPage标签都挡掉。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/13/58770.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-13 22:33 <a href="http://www.cppblog.com/vczh/archive/2008/08/13/58770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TreeView完成</title><link>http://www.cppblog.com/vczh/archive/2008/08/11/58556.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 11 Aug 2008 13:05:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/11/58556.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58556.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/11/58556.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58556.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58556.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 囧，实在是囧啊。比起ListView，TreeView还真是简单了无穷多倍，一个晚上就搞定了。贴贴代码和图。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/11/58556.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-11 21:05 <a href="http://www.cppblog.com/vczh/archive/2008/08/11/58556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListView封装完了，放代码</title><link>http://www.cppblog.com/vczh/archive/2008/08/09/58393.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 09 Aug 2008 10:36:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/09/58393.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58393.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/09/58393.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58393.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58393.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ListView实在是超级无敌复杂地难封装啊，Vista下的ListView简直是万能的，以至于我萌生了将grid和tree-grid都用ListView来实现的想法。当然这只是想一想，暂时不想做。这个ListView花了1700行代码封装完成，共有4个类，分别是item、column、group和listview，listview自己的事件16个。<br><br>代码和图片内详&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/09/58393.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-09 18:36 <a href="http://www.cppblog.com/vczh/archive/2008/08/09/58393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ComboBox在输入路径的时候自动显示文件名</title><link>http://www.cppblog.com/vczh/archive/2008/08/04/58018.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 04 Aug 2008 15:20:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/04/58018.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/58018.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/04/58018.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/58018.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/58018.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天封装好了ComboBox，于是做了个Demo。这个Demo只有一个窗口，上面放着一个ComboBox。如果往里面打文件名的话，会把当前路径下的被筛选过的文件名填充到ComboBox，并自动打开下拉列表。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/04/58018.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/58018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-04 23:20 <a href="http://www.cppblog.com/vczh/archive/2008/08/04/58018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新增ListBox</title><link>http://www.cppblog.com/vczh/archive/2008/08/04/57920.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 03 Aug 2008 16:48:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/04/57920.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/57920.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/04/57920.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/57920.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/57920.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 封装Common Control Library 6.0的API越来越顺手了。虽说要消灭BEGIN_MESSAGE_MAP之类的代码，不过写起来也不容易。BEGIN_MESSAGE_MAP不能动态替换，所以我换成了类似C#的Event和Delegate那样子的东西。如果不需要动态替换的话，实际上并没有什么区别，唯一的区别就在于你可以利用VC++的Intellisense去查看自己想要的事件，而不是将什么WM_LBUTTONDOWN之类的消息记住了。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/04/57920.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/57920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-04 00:48 <a href="http://www.cppblog.com/vczh/archive/2008/08/04/57920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UI库添加Edit、Static和Placement</title><link>http://www.cppblog.com/vczh/archive/2008/08/03/57906.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 03 Aug 2008 12:54:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/03/57906.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/57906.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/03/57906.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/57906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/57906.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了缓解疲劳，我网络和UI同时做。封装UI真是麻烦啊，一大堆习惯的东西原来是没有的，什么tab转移焦点，什么控件对齐，都要自己做。后来就囧了，干脆实现一个Placement来自动调整控件的位置。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/08/03/57906.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/57906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-03 20:54 <a href="http://www.cppblog.com/vczh/archive/2008/08/03/57906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vczh Messenger</title><link>http://www.cppblog.com/vczh/archive/2008/08/02/57863.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 02 Aug 2008 14:47:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/08/02/57863.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/57863.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/08/02/57863.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/57863.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/57863.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 开始设计一个对称的通讯框架了。这个框架要求所有client的电脑上有一组host threads。host threads可以在另一个程序里面。有了host之后，client就可以跟远程或者本机的程序通讯了。client可以做的事情有：与host连接与断开，指定一个远程的client并发送信息，通知host可以不必继续维护到某client的连接，查询某个ip和端口下面的所有client。每一次通讯的时候，client都必须给出ip\port\name来，而不是获取一个连接然后使用。鉴于client和host未必在同一个程序上，获得连接然后使用不是很好。<br><br>&nbsp;&nbsp;&nbsp; 因此就有了如下的设计。host通过socket与其他地方的host通讯，client与host通过named pipe联系。client与client的信息通过两个或更多的host传递。到了这里，就有必要指定一下协议了。<br><br>&nbsp;&nbsp;&nbsp; 首先是client-host。client-host发的消息的格式是：Type:BYTE , NameLen:BYTE , Name:CHAR[ ] , MsgLen:INT , Msg:CHAR[ ]。这5部分串在一起成为一个完整的消息通过named pipe传递。Type定义如下：<br><br>&nbsp;&nbsp;&nbsp; client发给host：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:CONNECT_TO_HOST , Name=ignore , Message=client name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:DISCONNECT_TO_HOST , Name=ignore , Message=ignore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:COMMUNICATE , Name="ip\port\client name" , Message=?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:REQUEST_LIST , Name="ip\port\*" , Message=ignore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4:COMMUNICATE_FINISH , Name="ip\port\client name" , Message=ignore<br>&nbsp;&nbsp;&nbsp; host发给client：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:ERROR , Name=ignore , Message=?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:DISCONNECT_TO_CLIENT , Name=ignore , Message=ignore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:COMMUNICATE , Name="ip\port\client name" , Message=?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:RECEIVE_LIST , Name="ip\host\*" , Message="name1\name2\...."<br><br>&nbsp;&nbsp;&nbsp; 其次是host与host之间的消息。消息的格式是Type:BYTE , SourceLen:BYTE , SourceName:CHAR[ ] , DestLen:BYTE , DestName:CHAR[ ] , MsgLen:INT , Msg=CHAR[ ]。跟client-host一样，也是串在一起成为一个完整的消息的。Type定义如下：<br><br>&nbsp;&nbsp;&nbsp; 消息：(HELLO在不同的状态下有不同的意义)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:ERROR , Source=ignore , Dest=ignore , Message=?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:HELLO , Source=ignore , Dest=ignore , Message=?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:HELLO_RESPONSE , Source=ignore , Dest=ignore , Message=HELLO的消息内容反转<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:DISCONNECT , Source=ignore , Dest=ignore , Message=ignore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4:COMMUNICATE , Source="client name" , Dest="client name" , Message=?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5:REQUEST_LIST , Source=ignore , Dest=ignore , Message=ignore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6:RECEIVE_LIST , Source=ignore , Dest=ignore , Message="name1\name2\...."<br><br>&nbsp;&nbsp;&nbsp; 因为client每一次发消息都要填上地址，因此host可以自行决定要不要将某些socket断开。同理，COMMUNICATE_FINISH也是可以不发的，这只是为了资源管理的灵活性而设置的。这个东西就暂时命名为Vczh Messenger吧。Vczh Messenger将提供两套类库。第一套用于建立host，第二套用于建立client。这样的话，一个程序可以决定跟其他程序共享host或者是自己给自己建立host。client将使用事件驱动模型。配合vl::system::synchronize命名空间下的一些组件可以很容易将事件驱动模型修改为其他各种各样的模型。<br><br>&nbsp;&nbsp;&nbsp; Vczh Messenger在逻辑上是无连接无顺序的通讯框架，用于为进一步的remote object access服务。
<img src ="http://www.cppblog.com/vczh/aggbug/57863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-08-02 22:47 <a href="http://www.cppblog.com/vczh/archive/2008/08/02/57863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vista的新控件</title><link>http://www.cppblog.com/vczh/archive/2008/07/22/56894.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 22 Jul 2008 14:41:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/07/22/56894.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/56894.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/07/22/56894.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/56894.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/56894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Vista提供的Common Control Library 6.0的BUTTON类中提供了两种新的按钮：Command Link和Split Button。只需要在CreateWindow里面指定BS_COMMANDLINK与BS_SPLITBUTTON就可以获得这两种新的控件了。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/07/22/56894.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/56894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-07-22 22:41 <a href="http://www.cppblog.com/vczh/archive/2008/07/22/56894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用XPath轻松获得VC9.0工程文件包含的所有代码文件</title><link>http://www.cppblog.com/vczh/archive/2008/06/28/54871.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 28 Jun 2008 04:55:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/28/54871.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/54871.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/06/28/54871.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/54871.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/54871.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     玩了几天空之轨迹 FC，终于快结束了。距离最后一门考试还有3天，于是把整个XPath的代码写完了。于是试用一下。<br><br>    现在展示一下我那个XPath的使用方法：<br>1     VL_List<VL_XMLNode* , true> Result;<br>2     VL_XPath XPath(L"//Files//File[contains(@RelativePath,\".cpp\") or contains(@RelativePath,\".h\")]");<br>3     XPath.Query(Doc.GetRootElement(),Result);    第一行声明一个XML节点列表，第二行构造一个XPath，第三行将XPath作用在一个XML文档的根节点上。这个XPath用于把VC++9.0的工程文件中包含的所有.h文件和.cpp文件提取出来。虽然Files里面包含若干Filter，每一个Filter包含一些Filter和File，不过输出结果Output.xml把所有的满足要求的File节点都找了出来。<br><br>   &nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/28/54871.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/54871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-28 12:55 <a href="http://www.cppblog.com/vczh/archive/2008/06/28/54871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>