2011年,也就是去年3,4月份写的东西了
当时是帮一个朋友做的,现在这个东西已经没什么用了
在博客这里甩出来吧
其实,这个程序到底拿来干什么用的,
身为作者的我也不是十分清楚,而只是按照朋友口述的需求把程序做了出来。
这个程序的大概功能是:
有一种路由器叫:ROS,它的各种设置可以用脚本来描述
我的程序的功能就是提供一个可视化的界面来更新、解析、编辑、输出ROS路由器的脚本
程序分为2端:客户端,服务器端
客户端功能:载入,解析,编辑,输出本地ROS脚本,并可以连接服务器程序更新最新的脚本文件。
服务端功能:就是供客户端程序同步脚本文件之用。
开发环境:VS2008,C++,MFC
可执行下载:http://download.csdn.net/detail/stevenkylelee/4447126
源代码下载:http://download.csdn.net/detail/stevenkylelee/4447149
那种ROS脚本的“样貌”大概如下:
看起来挺乱的是吧,其实这种脚本的格式是很有规律的。
(至于什么规律,这里就不多说了,下载我的程序自己用记事本开打*.rsc文件仔细观察,不难就会发现)
值得一提的是,这种脚本对于中文有它自己的一套编码方式,
例如:字符串"\BD\A3\CF\C0\B7\A1\CD\E2\B4\AB"实际代表的是"剑侠贰外传"。
关于ROS脚本的中文问题,我在客户端写有相应的类和工具来进行编码和解码。
下图,是把一个ROS脚本文件拖曳到客户端界面后的样子
这个就是ROS脚本的可视化界面了。
ROS的一个脚本文件中,可以包含N个页面。
在菜单栏下,有一个Tab控件,用于动态地显示解析到的ROS脚本的所有页面。
上图查看的是queue tree设置页面。
ROS的大多数页面都是表示线性结构内容的,但queue tree页面表示的是一种树形结构。
因为MFC没有 树形+列表视图 组合起来的控件
我就只有使用ListView的第一列的内容的缩进来表示树形关系了。- -
随便说下,ListView上的”最大“,”最小“列名也是根据脚本内容动态解析出来然后创建的。
下图是显示 ip firewall mangle 页面内容的样子:
其实ListView控件最初是没有列和行的。
上图看到的内容,包括ListView的列头(一堆列名),
都是根据ROS脚本解析出来的结果动态创建的。
呵呵。观察ROS脚本找寻它的规则和格式,写解析算法,耗费了我好多精力和时间。
(当时其实也是想练手下刚学会的FSM思想)
用C#写会比C++简单,因为STL的string类并不很好用,而MFC的CString也好不到哪里去
它俩连最起码的Split都没有,害哥还得自己实现这个非常基础的字符串操作算法,日了。
MFC做界面是很蛋疼的,C#的Winform控件都有个Anchor属性,
这个属性的作用是当窗口大小发生改变时,动态地改变相应控件的位置和大小。
MFC中没有现成的东西实现这个功能,要实现这个功能的话,就只有自己写!
(随便说下,去年国庆节前,面试上海巨人集团,当时面试题就出了类似这样需求的一题,
我直接把这个项目,实现这个功能的那个类发给他们!
呵呵。当然,最后是拿到了offer,而我最终没有过去)
下图是服务器端界面,和客户端程序一样。
它也可以根据改变窗口的大小适当地调整其控件的位置和大小
前面也说了,服务器程序它的作用就是提供更新服务器。
所以,其实它没窗口界面也是可以的。
最后说明一下我的源代码吧
源代码有一个叫“SCL”的目录,SCL是Steven Class Library的缩写,哈哈。
这个目录放的是当时我自己写一个C++类库,以源代码的形式。
我自己的这个类库模仿了C#.net类库的设计
封装了Tcp通信类,文件映射类,字符串操作类(自己扩展了一些诸如Split等操作),
Ini文件读写类,网卡信息获取类,防Winform的Anchor属性的类 等。
当然,所有的类的实现,都是用STL或者Win32 Api的。
如果,你对我做的这个程序不太感兴趣,
也不妨看看我写的那些“自认为有可复用性的基础类”吧
说不定,对你会有一些帮助或启示。:)