因项目中需要使用到软键盘,因此调研了下MiniGUI的mgi模块。在使用mgi模块的软键盘时,遇到了一些问题,现总结如下。
1、在Ubuntu 10.04上安装了最新的MiniGUI 3.0.12版本和mgi后,运行mgi自带的例子skb_demo,软键盘老是出不来,终端提示找不到png图片的类型,视图无法创建等信息。根据提示信息查阅源代码后,发现是由于软键盘需要加载一些png图片,但库不支持png类型造成的。我在编译MiniGUI时,使用的是默认的配置选项,默认的配置选项应当就是支持png的。没办法,在configure时,显式加上了支持png的选项。重新编译MiniGUI和mgi后,再运行skb_demo,软键盘正常弹出。
2、软键盘弹出后,切换到中文输入法,随便输入一个拼音,却发现候选汉字全是乱码。仔细阅读MiniGUI的开发文档后,发现问题可能出在MiniGUI.cfg文件上。MiniGUI.cfg中可以配置支持的字体信息,默认只配置了一些系统字体,如果系统中没有安装这些(支持中文的)字体,则会显示乱码。在usr/local/share/minigui/res/font目录下有MiniGUI自带的一些字体,另外该目录下还有一个font.name文件,列出了所有字体的名称、类型以及文件名。在MiniGUI.cfg文件中配置了相应的中文字体后,再次运行skb_demo,发现候选汉字显示正常。添加部分rawbitmapfonts字体后的配置文件如下:
[rawbitmapfonts]
font_number=3
name0=rbf-fixed-rrncnn-16-16-GB2312-0
fontfile0=/usr/local/share/minigui/res/font/song-16-gb2312.bin
name1=rbf-fixed-rrncnn-12-12-GB2312-0
fontfile1=/usr/local/share/minigui/res/font/song-12-gb2312.bin
name2=rbf-fixed-rrncnn-24-24-GB2312-0
fontfile2=/usr/local/share/minigui/res/font/song-24-gb2312.bin
3、要使编辑框支持汉字输入,需要给编辑框设置一个中文字体。否则,编辑框中会显示乱码。设置字体的参考代码如下:
1 gb2312_font = CreateLogFontByName("rbf-fmfsong-rrncnn-12-12-GB2312-0");
2 SetWindowFont(hEdit, gb2312_font);
4、到现在为止,候选汉字和编辑框中的汉字都能正常显示了,但又发现一个奇怪的问题。当输入4个或4个以上的字符后,在候选汉字列表中任意选择一个汉字,都会导致程序崩溃退出。使用gdb调试后,发现堆栈停在ime_pinyin.c(在mgi模块的src目录下)的pinyin_predict_pord函数的sprintf中。应当是lookfor_bk字符数组的长度太小,当输入4个或4个以上字符时,堆栈溢出了。修改后,程序一切正常。
-- 本文转载于创世软件团队博客, 原文地址: http://www.cnblogs.com/hujian/archive/2012/05/18/2507268.html