Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
输入法软键盘
2017-09-03
IME
输入法软键盘是输入法的一种辅助输入工具。用于输入一些不能用该输入法编码正常输入的特殊字符或符号。 IMM32.DLL为输入法开发者提供了一套默认的软键盘接口,包括两种界面(支持Shift键和不支持Shift键)、三个函数和一个数据结构类型。由于其使用较为方便,因而在很多输入法中得到了应用。 输入法软键盘上,有56个键位,分为输入键和控制键。其中输入键48个,包括10个数字键、26个字母键、11个标点键和空格键。控制键8个,包括Tab键、Caps键、Shift键、Ins键、Del键、Back键、Enter键和Esc键。输入键的内容可以转换为相应的特殊字符或符号,控制键则不能转换,其由Imm控制。 # 软键盘的创建 IMM提供了ImmCreateSoftKeyboard函数,用于创建软键盘。 ## 原型定义: function ImmCreateSoftKeyboard(uType: UINT; hOwner: HWND; x, y: Integer): HWND; stdcall; 其参数定义为: uType:软键盘类型。取值为 SOFTKEYBOARD_TYPE_T1或 SOFTKEYBOARD_TYPE _C1。其中SOFTKEYBOARD_TYPE_T1支持Shift,SOFTKEYBOARD_TYPE_C1不支持Shift。 hOwner:软键盘窗口的物主窗口。 x, y:软键盘位置。 其返回值为软键盘窗口句柄。 ## 说明: Imm内部定义了两类软键盘的窗口类(类名分别为SoftKBDClsT1和SoftKBDClsC1),并分别有其窗口过程。该函数只是一个创建软键盘窗口及其界面的一个接口。需要说明的是,用该函数创建的软键盘只是一个软键盘的框架,除控制键可用外,输入键没有具体的内容,不可用。 # 软键盘的显示 IMM提供了ImmShowSoftKeyboard函数,用于显示软键盘。 ## 原型定义: function ImmShowSoftKeyboard(hSoftKbdWnd: HWND; nCmdShow: Integer): BOOL; stdcall; 其参数定义为: hSoftKbdWnd:软键盘窗口句柄。 nCmdShow: 显示命令。与ShowWindow函数中的显示命令相同。一般使用SW_HIDE和SW_SHOWNOACTIVATE。其中SW_HIDE为隐藏,SW_SHOWNOACTIVATE为显示但不激活。 其返回值反映函数是否操作成功。成功返回True,否则返回False。 ## 说明: 以ImmCreateSoftKeyboard函数创建的软键盘,应使用ImmShowSoftKeyboard函数隐显,实现打开或关闭。 # 软键盘的撤销 IMM提供了ImmDestroySoftKeyboard函数,用于撤销软键盘。 ## 原型定义: function ImmDestroySoftKeyboard(hSoftKbdWnd: HWND): BOOL; stdcall; 其参数只定义了hSoftKbdWnd一个参数,为软键盘窗口的句柄。其返回值反映函数是否操作成功。成功为True,失败为False。 ## 说明: 该函数在撤销过程中,将用户设置的软键盘数据和软键盘窗口一起撤销。 # 软键盘数据设置 以ImmCreateSoftKeyboard创建的软键盘是空的,需要用户根据自己的需要为其提供相应的数据。 ## TSoftKeyboardData结构: TSoftKeyboardData是IMM提供的用于为软键盘设置数据的结构。其定义如下: ```c TSoftKeyboardData = record uCount: UINT; wCode: array[0..1, 0..255] of Word; end; ``` 其成员定义为: uCount为数据组数。通常要为软键盘设置两组数据,一组是非Shift数据,一组是Shift数据。 wCode为数据数组。其中存放着两组数据,第一组,即0组存放非Shift数据,第二组,即1组存放Shift数据。每一组为一个大小为256的Word数组,数组序号为256个虚拟键码,每一个数组元素保存该虚拟键码对应的特殊符号的编码。 ## IMC_SETSOFTKBDDATA消息: IMC_SETSOFTKBDDATA是IMM提供的用于为软键盘设置数据的消息。其为WM_IME_CONTROL消息的子消息,定义如下: WM_IME_CONTROL wParam = IMC_SETSOFTKBDDATA lParam = Integer(lpSoftKeyboardData) 在软键盘数据设置过程中,TSoftKeyboardData结构填充完成之后,必须调用SendMessage函数,将该结构指针发送到软键盘窗口,这样才能够真正实现对软键盘数据的设置。 ## 说明 (1)在软键盘设置中,TSoftKeyboardData是一个很重要的数据结构。其中的wCode成员建立了虚拟键与特殊字符的对应关系。在使用过程中,其数组以虚拟键为序号,对应的数组元素内保存着该虚拟键所要对应的特殊符号值。 (2)在软键盘中,只有48个按键,对应着空格、0~9十个数字,A~Z二十六个字母及十一个标点键,因此,只需要将此48个键的虚拟键所对应的数组元素赋予相应的特殊字符码即可实现相应的软键盘。 (3)软键盘数据设置,仅是对软键盘键面显示文本的设置,软键盘发送到IMM仍然是各个按键所对应的虚拟键码。 (4)软键盘数据支持Unicode,但在数据设置时,必须以SendMessageW函数发送消息WM_IME_CONTROL和IMC_SETSOFTKBDDATA到软键盘窗口。 # 参考: * http://blog.sina.com.cn/s/blog_dcbaca180101gsag.html
返回博客列表