MinGUI输入法增加虚拟键盘

原文见小荷尖尖 的“改进minigui1.3.3的输入法窗口,增加虚拟键盘”,非常感谢小荷尖尖提供的代码,如果是触摸板作为输入设备的,可以直接使用了。下面记录下我做的修改,使其支持用电管理终端的6个按键(上光标,下光标,左光标,右光标,确认,返回)式的输入设备。

先介绍下原虚拟键盘的思路:采用位图显示虚拟键盘,然后将每个按键的矩形框坐标和对应的键值记录下来。当用户在触摸板上按键时产生MSG_LBUTTONDOWN事件,LPARAM带有输入法窗口坐标,在预先定义的矩形坐标-键值对应表中查表获取按键信息。根据键值向输入法窗口发送MSG_KEYDOWN、MSG_KEYUP、MSG_CHAR消息,模拟了标准键盘的输入。

理解了触摸板的虚拟键盘输入,设计基于光标按键和确认键、返回键的虚拟键盘输入法就不难了。首先将原矩形坐标-键值对应表修改成2维数组的方式定义行列:static struct _key_rect key_rect[KEY_ROW][KEY_COW],排列方式同位图键位。在MSG_KEYDOWN、MSG_KEYUP事件中截获光标按键和确认键、返回键进行处理,利用光标键实现虚拟键盘选中区域的移动,利用确认键实现选中键值的提交,为区别真实的按键信息,需定义虚拟键盘信息:#define MSG_KEYDOWN_VK MSG_USER+1 #define MSG_KEYUP_VK   MSG_USER+2。在这2个新增的消息处理中实现原触摸板的MSG_KEYDOWN、MSG_KEYUP功能。另外选中区域移动的重绘:keydown时重绘新选中区域,keyup时重绘老的选中区域。

基于上述思路就可基本实现光标键的输入法了,后面我进行了小的改进:

1.ps了虚拟键盘位图,使用“DEL”功能键替换了原“Ctrl”功能键(这个ctrl键也没用到)。

2.ps了左下角“中/英文”切换图

3.实现了DEL功能键、重定义了返回键的作用为关闭输入法。

4.在输入法激活时会调用MSG_PAINT消息,在增加了“中/英文”切换后位图的需使用位图的组合更多了,实际上激活输入法时得进行3个重绘,顺序如下:重绘底图->重绘“中/英”切换键->重绘最后的选中键,我使用了一个计数器结合虚拟键盘区域依次失效方法完成了上诉功能。

5.汉字输入时涉及汉字的翻页,使用“-”“=”来翻页,我在返回键的处理中将光标左键转化成了“-”,光标右键转化成了“=”。

6.对按键输入引擎IAL进行了优化,当同时按光标上键和光标下键时产生“TAB”键输入,以实现MINIGUI各控件间的切换。

7.最后你可能需要改进键盘的驱动或MINIGUI的输入引擎,使其2个KEYDOWN事件必须保证一定的间隔,否则MSG_PAINT会混乱,这是由于MINIGUI对MSG_PAINT的处理方式决定的。(为保证MSG_PAINT的优先级,系统采用了某个标识位来定义窗口是否需要重绘,而且当其重绘完成后,将直接清除改标识。如果在极短的时间里使2个矩形区域失效,实际上只会产生一此MSG_PAINT消息)

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

/style/images/nopic.gif
我要收藏
赞一个
踩一下
分享到
分享
评论
首页