输入上下文

“输入上下文”是由 IMM 维护的内部结构。 它包含有关 IME 状态的信息,供 IME 窗口使用。 默认情况下,操作系统创建并为每个线程分配输入上下文。 在线程中,此默认输入上下文是一个共享资源,并与每个新创建的窗口相关联。

若要检索或设置 IME 中的信息,IME 感知应用程序必须首先检索与指定窗口关联的输入上下文的句柄。 应用程序使用 ImmGetContext 函数检索句柄。 它可以在对 IMM 函数的后续调用中使用检索到的句柄来检索和设置 IME 值,例如合成窗口样式、合成样式和状态窗口位置。 应用程序使用完上下文后,必须使用 ImmReleaseContext 函数释放上下文。

由于默认输入上下文是共享资源,因此应用程序对其所做的任何更改都应用于线程中的所有窗口。 但是,应用程序可以通过创建自己的输入上下文并将其与线程的一个或多个窗口相关联来替代此默认行为。 对特定于应用程序的输入上下文所做的更改仅适用于与上下文关联的窗口。

应用程序可以使用 ImmCreateContext 函数创建输入上下文。 为了将上下文分配给窗口,应用程序调用 ImmAssociateContext 函数。 此函数返回以前关联的输入上下文的句柄。 如果应用程序尚未将输入上下文与窗口关联,则返回的句柄适用于默认输入上下文。 通常,应用程序会保存此句柄,并在不再需要自定义输入上下文时将其与窗口重新关联。

输入上下文与窗口关联后,操作系统会在激活窗口并接收输入焦点时自动选择该上下文。 输入上下文中的样式和其他信息会影响该窗口的后续键盘输入,从而确定 IME 的工作方式。

应用程序必须在终止之前销毁任何自定义输入上下文。 首先,应用程序使用 ImmAssociateContext 函数从与线程中的窗口建立的任何关联中删除输入上下文。 然后,它调用 ImmDestroyContext 函数。

关于输入法管理器