初始化

本节将讨论用于确定输入方法的子例程。

可以使用 IMQueryLanguage 子例程来确定输入方法是否可用而不进行初始化。 应用程序 (工具箱) 通过调用 IMINitiize 子例程来初始化特定于语言环境的输入法,该子例程初始化特定于语言环境的输入法编辑器 (IMED)。 这个子例程使用 LOCPATH 环境变量来搜索由 LANG 环境变量命名的输入方法。 LOCPATH 环境变量指定了一组用来搜索输入方法的目录名。

如果找到了输入方法, IMInitialize 子例程使用 load 子例程来装入输入方法,并连接 imkeymap 文件。 在访问输入方法时,会返回一个 IMFep(input method front-end processor,输入方法前端处理器)类型的对象。 IMFep 应被作为不透明结构处理。

在调用 IMInitialize 子例程时,每一个 IMFep 都继承语言环境的代码集。 因此, IMFilterIMLookupString 子例程返回的字符串位于语言环境的代码集中。 在调用 IMInitialize 子例程之后更改语言环境不影响 IMFep 的代码集。

对于每个 IMFep,应用程序可使用 IMCreate 子例程创建一个或多个 IMObject 实例。 IMObject 管理其自己的状态,并可以管理多个输入方法区域 (请参阅 输入方法区域)。 每个 IMObject 如何定义输入处理取决于和语言环境相关的代码集和键盘。 最简单的情况是,如果应用程序只管理一个与用户的对话,那就只需要一个 IMObject。 输入方法也支持其他一些用户界面,其中的应用程序允许多个与用户的对话,并且每个对话都需要一个 IMObject

IMFepIMObject 之间的区别是:IMFep 是一个将应用程序绑定到输入方法代码的句柄;IMObject 也是一个句柄,但它代表的是输入设备(比如键盘)状态的一个实例。 IMFep 不代表输入方法的状态。 每个 IMObject 被初始化为某个特定的输入状态,并且根据所接收的事件序列进行更改。

创建好 IMObject 之后,应用程序即可处理键事件。 应用程序应使用 IMFilter IMLookupString 子例程将键事件传给 IMObject。 提供这些子例程是为了将 IMED 内部处理从定制的键事件映射过程中分离出来。