随笔-90  评论-449  文章-0  trackbacks-0
08 2008 档案
Syngram Helper开始设计:一个能用来写编译器的工具      摘要: 大概一年前曾经用C++开发了一个可以在C++中直接写上下文无关文法的上下文无关文法分析器。这玩意儿叫Syngram。Syngram曾经做了两次,第一次做成了用一个类去读文法文件,后来不爽就改成了直接在C++里面写的。我弄了一个叫Term的类,重载了一些操作符,于是你可以搞分支、可选、错误处理等复杂的文法推导式。现在打算做一个周边工具。  阅读全文
posted @ 2008-08-27 21:11 陈梓瀚(vczh) 阅读(1189) | 评论 (5)  编辑
GUI Preview Demo完成!      摘要: GUI Preview Demo完成!代码结构、下载以及注意事项内详。  阅读全文
posted @ 2008-08-25 20:17 陈梓瀚(vczh) 阅读(1881) | 评论 (7)  编辑
Vczh GUI Framework Preview完成!Preview Demo开始制作!      摘要: 为了展示Vczh Library++2.0中GUI Framework的强大威力,我制作了一个Regular Expression Debugger。这个软件可以用来调试正则表达式,主要用于检查正则表达式语法、观察表达式的语法树以及各种状态机、还有匹配测试等。这个Demo已经接近完成。GUI Framework和Demo的代码将在Demo彻底完成的时候放上来。下面贴图和创建界面的代码:  阅读全文
posted @ 2008-08-24 15:18 陈梓瀚(vczh) 阅读(1196) | 评论 (6)  编辑
关于VL++辅助C++程序设计的设想      摘要: 眼下新的GUI Framework的第一版也就只剩下3个控件了。虽然之前说过要开发一个理论上是P2P上的远程对象交互协议、要开发一个窗口设计器、还要开发一个LALR Parser GUI作为GUI Framework的demo。我想这也是一个大的工程,对于我一个人来说。但是今天的一个想法终于把这三个东西串了起来。  阅读全文
posted @ 2008-08-20 01:51 陈梓瀚(vczh) 阅读(1254) | 评论 (5)  编辑
Status Bar完成      摘要: Status Bar所提供的消息相当的诡异。Status Bar里面的Items的数量以及宽度要一次性设置好,每次修改的时候都要推翻重建一次,只不过里面的Text倒是可以单独改掉。在XP底下有效的raise border似乎在Vista就没有了。看来Vista已经从伪3D彻底转向了2D了。

Status Bar在CreateWindowEx的时候会自动将自己放在窗口的最底下,每一次修改Status Bar的尺寸的时候,它又会自动把自己放在窗口的最底下。当然,你可以让他出现在最上面。虽然如此,但是我封装的时候还是想自由地修改尺寸和位置,当且仅当我想让他出现在窗口最下面的时候他才出现在窗口最下面,于是我只好截获Status Bar的WM_SIZE消息并扔掉了。

当初为每一个控件都自动Subclass掉的想法还真是正确啊……  阅读全文
posted @ 2008-08-16 15:34 陈梓瀚(vczh) 阅读(1135) | 评论 (1)  编辑
TrackBar迅速做完      摘要: Track Bar很是人性化,不会跟自己之前的经验冲突。Track Bar下面那些杠杠原来是自己插入的,还能改,还真是想干啥就能干啥……  阅读全文
posted @ 2008-08-16 00:28 陈梓瀚(vczh) 阅读(1114) | 评论 (1)  编辑
Scroll Bar完成      摘要: Win32 API为了让控件更为有用真是煞费苦心,不仅Tab没有提供控件可见控制,连Scroll Bar点击的时候竟然是不修改Position的,要我在每一个消息里用SBM_SETSCROLLINFO来设置当前的位置。而且当前的位置的获得还不是一致的,根据消息的不同而不同。真是故意为难人啊。  阅读全文
posted @ 2008-08-15 22:26 陈梓瀚(vczh) 阅读(1012) | 评论 (1)  编辑
Vczh GUI Framework取材决定      摘要: 今天不小心看到了http://www.antlr.org/works/index.html,我一直认为ANTLR是LR(k)分析器,后来我错了,原来只是LL(k)。我以前写的一个Vczh Syngram是LR(k)的畸形,今天看了居然连LL(k)都能有GUI,我不做一个岂不是对不起自己?  阅读全文
posted @ 2008-08-14 21:21 陈梓瀚(vczh) 阅读(1063) | 评论 (2)  编辑
TabControl封装完成      摘要: 原来API提供的TabControl只是改改样式而已,客户区连TabPage标签也算在了里面,点击不同的TabPage也不会自动切换子控件的可见属性。这些都要封装啊囧……

在这个设计里,虽然TabPage是一个普通的类,但是每一个TabPage都会自动附带一个Static Control,并在适当的时机修改大小以及修改可见属性。子控件实际上需要放在TabPage的Static Control里,不然的话其实可以连TabPage标签都挡掉。  阅读全文
posted @ 2008-08-13 22:33 陈梓瀚(vczh) 阅读(1067) | 评论 (2)  编辑
TreeView完成      摘要: 囧,实在是囧啊。比起ListView,TreeView还真是简单了无穷多倍,一个晚上就搞定了。贴贴代码和图。  阅读全文
posted @ 2008-08-11 21:05 陈梓瀚(vczh) 阅读(1416) | 评论 (6)  编辑
ListView封装完了,放代码      摘要: ListView实在是超级无敌复杂地难封装啊,Vista下的ListView简直是万能的,以至于我萌生了将grid和tree-grid都用ListView来实现的想法。当然这只是想一想,暂时不想做。这个ListView花了1700行代码封装完成,共有4个类,分别是item、column、group和listview,listview自己的事件16个。

代码和图片内详  阅读全文
posted @ 2008-08-09 18:36 陈梓瀚(vczh) 阅读(1772) | 评论 (16)  编辑
使用ComboBox在输入路径的时候自动显示文件名      摘要: 今天封装好了ComboBox,于是做了个Demo。这个Demo只有一个窗口,上面放着一个ComboBox。如果往里面打文件名的话,会把当前路径下的被筛选过的文件名填充到ComboBox,并自动打开下拉列表。  阅读全文
posted @ 2008-08-04 23:20 陈梓瀚(vczh) 阅读(1299) | 评论 (3)  编辑
新增ListBox      摘要: 封装Common Control Library 6.0的API越来越顺手了。虽说要消灭BEGIN_MESSAGE_MAP之类的代码,不过写起来也不容易。BEGIN_MESSAGE_MAP不能动态替换,所以我换成了类似C#的Event和Delegate那样子的东西。如果不需要动态替换的话,实际上并没有什么区别,唯一的区别就在于你可以利用VC++的Intellisense去查看自己想要的事件,而不是将什么WM_LBUTTONDOWN之类的消息记住了。  阅读全文
posted @ 2008-08-04 00:48 陈梓瀚(vczh) 阅读(1278) | 评论 (8)  编辑
UI库添加Edit、Static和Placement      摘要: 为了缓解疲劳,我网络和UI同时做。封装UI真是麻烦啊,一大堆习惯的东西原来是没有的,什么tab转移焦点,什么控件对齐,都要自己做。后来就囧了,干脆实现一个Placement来自动调整控件的位置。  阅读全文
posted @ 2008-08-03 20:54 陈梓瀚(vczh) 阅读(1338) | 评论 (8)  编辑
Vczh Messenger
posted @ 2008-08-02 22:47 陈梓瀚(vczh) 阅读(1310) | 评论 (4)  编辑
手把手教你写脚本引擎(四)——简单的高级语言(2,处理语法)      摘要: 有了全盘的计划之后,我们必须先处理输入的脚本,才能够进行下一步的工作。字符串处理方面可以参照一下三篇文章:《构造可配置语法分析器》、《构造正则表达式引擎》以及《如何手写语法分析器》。作为补充,这里再说一说其他的办法。  阅读全文
posted @ 2008-08-02 15:19 陈梓瀚(vczh) 阅读(1365) | 评论 (4)  编辑
封装了Socket      摘要: 为了建立一个remote object access system我不得不封装了socket、pipe以及synchronize objects。不过我还不知道如何实现穿透,这个就暂时算了。今晚用了两个小时封装了socket的一些必要操作,并写了人生中第一个socket程序。

这个程序同时作为server和client。第一次启动的为server。接下来server进行监听,client则往server发信息并接受返回的信息。server会将接受到的信息进行反转发回去,除非收到了exit结束线程,last结束线程并结束监听。  阅读全文
posted @ 2008-08-01 22:23 陈梓瀚(vczh) 阅读(1152) | 评论 (3)  编辑
Windows中的Pipe      摘要: 此管道非彼管道,不是unix用来做命令行的那个。
Windows的管道可以访问本机或已知机器名的机器上的命名管道,自己也可以建立命名管道。一个命名管道就跟一个server socket一样,可以进行listen,并产生很多实例来跟很多个client交谈。主要函数有:  阅读全文
posted @ 2008-08-01 01:07 陈梓瀚(vczh) 阅读(1436) | 评论 (1)  编辑