使用过 Access 的人都知道当焦点处在某一列时输入法被自动切换成表设计时所选输入法,这给用户操作带来了方便的同时也显示了程序的专业性;目前绝大多数手机都具备了如 Access 那样的功能(如在 iPhone 手机上当要求用户输入数时系统自动调出数字输入法,而当要求用户输入英文时则系统自动调出英文输入法等)。
在 VC6 中通过修改注册表的相关项来实现输入法的控制(如有兴趣请参见 VC6 输入法控制);然而我们发现用同样的方法在 WinCE 下并不起用作,但 WinCE 为我们提供了一套更方便的输入法控制 API ;这些 API 简要功能说明如下:
SipEnumIM :枚举系统中已安装输入法
SipGetCurrentIM :获取当前输入法
SipSetCurrentIM :设置当前输入法
SipShowIM :显示或隐藏软键盘
下面是本人写的一个用于 WinCE 输入法操作类,基头文件内容如下:
//InputCtrl.h
#ifndef INPUTCTRL_H
#define INPUTCTRL_H
typedef struct tag_InputNode
{
TCHAR pName[MAX_PATH];
CLSID rCLSID;
}INPUTNODE,*PINPUTNODE;
class CInputCtrl
{
public :
CInputCtrl( );
virtual ~CInputCtrl( );
public :
int GetCurrentIM( PINPUTNODE pOut );
int SetCurrentIM( PINPUTNODE pIn );
int ShowIM( bool bShow = true );
int GetInstallIMCount( void );
int GetIMAtIndex( int nIndex, PINPUTNODE pOut );
int FindIMByName( const TCHAR* pName, PINPUTNODE pOut );
};
#endif
注: CinputCtrl 类适应与 EVC 、 VS2005 、 VS2008 等,同时也在 EVC 、 VS2005 、 VS2008 上测试通过;对于本类的使用方法请参见本文对应例子代码。