该软件的特点是能够通过配置选项来生成对应的代码跟配置文件。
界面使用duilib
1、树形控件的使用。该控件是参照例子的游戏大厅的树形控件进行修改。
树形控件是继承自CListUI空间,也就是说其实树形控件的每一行都是使用列表列出。这里使用的是html的方式进行显示。
在初始化的时候将所有的选项都放入listui中,然后基于“父节点”进行判断是隐藏还是显示,通过SetInternVisible来设置,起初我使用的是SetVisible的方式发现不起作用,最终使用该方式了。我起初选择setvisible的原因是我看到Getvisible是俩变量全为真才返回真。在发现不行的时候,看了下,发现setvisible初始化都是true,除非在xml中特别声明,而intervisible却是在构造函数中直接初始化为true.但是具体为什么,需要路过的大神指点迷津。
2、在设计上面,置给树形控件的数据也是额外创建了一棵树,然后在树形控件点击选择对应哪个节点,然后在额外的树上进行修改,将结果给treeview显示。这样实现逻辑跟视图的分开。 这样做也有一个好处就是在后期可能会支持命令行的方式直接配置,而不是显示界面再配置。
3、在文件的路径判断上面使用了谷歌的base库的判断方式,来判断当前路径是否是绝对路径。然后分隔符也使用base库的方式,搞成数组,再遍历数组每个分隔符。具体参考file_util文件。
4、计算数组的方式使用自己写的ArraySize,这里也借鉴了base的Arraysize,起初不理解为何这样做可以,后来发现sizeof()在编译期就已经确定了,所以不去管你声明的函数具体有没有实现。其实可以做这样一个测试。int a = 0; sizeof(++a); print(a) 会发现a 还是显示0.
template<typename T, unsigned int N>
char (&ArraySizeHelper (T (&)[N]))[N];
#define ArraySize(array) (sizeof(ArraySizeHelper(array)))
5、在点击弹出一个对话框,然后可以在里面选择文件或者文件夹这里,可以参照window程序设计里面的GetOpenFileName 和 GetSaveFileName来操作。
在这里返回的文件名时,可以使用::FindFirstFile等对应的一系列函数(可以通过msdn)进行查找。记住这里有一个地方,在查找到的文件夹的时候会返回. 或者..这样的路径。这里需要过滤掉,否则在路径递归的过程中会出现死循环的情况。
有时候创建的时候输进来的是路径不存在的文件,择需要使用CreateDirectory进行文件夹的创建。