我一直想将自己的简历和源代码等资料嵌入exe文件并可在菜单栏点击查看。
很明显单纯依靠那种简单的about对话框是达不到理想效果的。调查思索一番后大致发现三条路线:
1,利用richedit2.0控件。
2,利用CHtmlView类制作CHtmlCtrl控件,在对话框中使用来显示html文档。
3,利用chm文件。
第一种方案纯属最初看到富文本控件这个名词后的一种幻想和臆测,实际情况是《windows程序设计》及《MFC windows程序设计》中,均未对这个richedit2.0控件作详细介绍,而我也没有自己翻msdn作深入探索,因为很快发现了更好更容易实现的方案。
第二种方案vckbase上有几篇相关的专题介绍文章,看了之后还是很头大的,逼着我去想更省事的方法。
第三种其实是最自然的实现办法,chm文档我们是再熟悉不过了,平常用过的无数软件都是使用这种格式的帮助文档。既然大家都用,那我看一定行。
然后我去百度chm,发现百度百科罕见的没给这个词作出解释。不过这不妨碍我们很快了解到它就是一种整合过的html文档。
我思考过chm文件为什么不像其他文件那样需要某种专门软件打开,也许只要是装了浏览器的windows系统就都支持打开它吧。
微软提供了一个叫HTML Help Workshop的软件,专门制作chm。挺简单的,集成几个html再设置下目录的事。
而word转html也是完全无障碍,不过要注意转换后因为编码的问题可能某些文件夹名会出现乱码导致图片找不到之类的状况,另外版面格式也会有瑕疵,手工修正就可以了。没想到去年弄弄html做做网页的经验,往后还有用得着的一天,哈哈。
接下来是如何调用chm的问题。
找到一个函数ShellExecute,可以很方便的打开各种格式的外部文件,没查有没有其他更合适的函数,反正这个用着就ok啦。
把所有东西打包进一个exe是我一贯的想法,这样显得办事风格简练明快,假如给人一个装着exe和chm的rar文件还要解压缩,明显很麻烦,那就有些丢人了。
所以重新研究windows自定义资源。
vs2008想自动添加自定义资源貌似有点问题,会变成bin格式,脚本也不太对,所以只能手动修改资源脚本,手工添加资源路径。这里注意一个问题,自定义资源类型假如不define以后直接引用的话,会提示未定义类型。我一度纠结于查找自定义资源的define值的范围,后来终于想起来可以直接引用资源的字符串名作类型,所以看书还是要认真啊。
编译下rc文件之后发现exe变大了,这就表明嵌入成功了。
但是如何使用呢?
findresource、loadresource那些函数只能将资源放进内存,但是ShellExecute可不买你账,它只打开外部文件,对内存里的东西是无效的。
所以还需要用到creatfile函数将内存里的chm写入外部,当然程序结束后还可以用deletefile来删除。
在网上搜可以找到现成的释放资源到硬盘的函数,节省不少时间。
注意文件名字符串参数里表示路径时,要用两个斜杠,只用一个会被编译器认为是无法识别的单斜杠。
这样总算是搞定了。
总觉得自己的代码风格有问题,有些写得很傻,大部分因为出自面向过程思维,显得很松散难懂。
经过这段时间的实战演练,对需要处理的问题有了些认识,另外也看了很多windows代码。
接下来我想是时候全面的看一遍C++,尽量掌握oop思想了。
然后便对这个项目的所有代码重整一番。
因为越往后代码越多,到时候整改的工作量只会更大。