最近空了的时候搞hge和guichan,走了不少弯路,终于把它弄好了,记下来,免得以后又忘了,也给可以给有兴趣搞这个的朋友一点提示。
1 关于hge和guichan,网上搜索出来最多的一篇文章就是类似于下面这个链接一样的页面:
http://hi.baidu.com/ankang1986/blog/item/bff97ae72162ad22b93820b1.html
我也是从这个链接下载源代码,安装vs2008,编译目录testGuichan下面的工程,执行,发现一切尚好。结果把启动配置里面的声音enable之后,杯具了,执行时报的错误完全不知道怎么回事。
想了半天,决定自己重新来改代码试一下。
2 首先从官方网站下载hge和guichan,都是比较老的了,不更新了。
hge里面自带的有一个base.dll,我就没有重新编译了,只是把core里面的vc6的工程转换成了2008的工程。
guichan里面只有makefile,我不知道windows下面怎么用,也从来没有在命令行模式下面执行过nmake之类的,所以就把前面链接中的文件夹guichan-0.8.2/build/下面的工程文件拷贝过来了,不错,还可以用。
然后自己建了一个工程,是自己的游戏工程。
现在3个工程就建立好了,接下来就是改代码调试了。
3 hge的改动:testGuichan中实现中文输入使用的方法是获取hge中的消息处理函数,然后自己先处理,处理完了再交给原来的处理函数处理。这个方法有一个问题,在链接 http://adarkfall.blogbus.com/logs/73402921.html 已经解决了,而且他还把输入过快时没有效果的问题也解决了。我不是很喜欢这种方法,就按照上面链接中的另一个链接 http://blog.csdn.net/ShowLong/archive/2007/07/02/1675197.aspx 改hge来实现中文输入,稍微做了点改动。
主要改动是没有使用3个char来保存中文字符,而是直接用了一个wchar_t来保存。另外一个就是注释掉了对WM_CHAR的处理,因为我觉得char应该是原来hge就有处理的,现在注释掉了也没有发现问题,就没有打开了。
4 guichan的改动:首先是将字体相关的改成testGuichan里面的方式,输入没有改,也就是key,hgeinput和textbox,textfield没有改,其他的照着testGuichan里面的改。这样改动下来之后,效果是可以显示中文了,但是不支持中文。
接着,就改key,hgeinput,但是改动的方式是配合改动之后的hge来做的,让guichan能够接收hge发送过来的imechar的消息,而不是像testGuichan里面那样自己从windows俘获imechar的消息。
然后就是改textfield和textbox,将string改为wstring,然后可以编译,如果不通,可以参照testGuichan的改动方式改其他的地方。
5 改动完成之后应该就可以运行了。困扰我的问题有两个:
A 在最初我获取imechar消息的参数wparam的时候,直接把它加入到textfield的字符串中,结果显示乱码,我调试了一下,发现传送过来的wparam是按照ascii的编码传送的,我又在程序中调用判断unicode窗口的函数IsWindowUnicode ,结果返回true,我就郁闷了,至今还没有搞懂。any way,我只好在textfield里面自己重新调用MultiByteToWideChar来讲编码转换成unicode方式。然后重新编译,正常了。
B 当我把textfield保存字符串从string改到wstring时,果然如同网上传言,对delete的处理代码编译出错。我只好把它注释掉了。两个风马牛不相及的东西…… 不过确实不喜欢c++的模板,虽然功能比较强大,却一直觉得能不用尽量不用。
6 至于为什么不用testGuichan里面的方法,一个原因是直接使用那个工程有问题,不能enable sound,而且它的源代码里面有一些我看不懂的,改起来觉得别扭;另一个是觉得软件架构被那个截取窗口处理函数的方式打乱了,工程才刚刚开始就有一个很差的结构,感觉很不爽。
7 如果有朋友要代码就留言,其实改起来没有那么麻烦,而且看看代码知道hge和guichan的工作方式对自己有好处,估计应该没有人要代码吧。如果有朋友也同样在用hge做东西,可以一起交流交流。