一个【输入上下文】是由IME维护的内部结构,其中包含有关IME状态的信息,由IME窗口使用。默认情况下,系统会为每个线程创建一个输入上下文。在线程内,此默认输入上下文是一个共享资源,并与每个新创建的窗口相关联。
要在IME中检索或设置信息,应用程序必须首先检索与给定窗口相关联的输入上下文的句柄。您可以使用ImmGetContext功能检索句柄。您可以在后续调用输入法管理器函数中使用检索到的句柄来检索和设置IME值,例如合成窗口样式,合成样式和状态窗口位置。完成使用上下文后,您必须使用ImmReleaseContext功能释放它。
因为默认输入上下文是一个共享资源,所以您所做的任何更改都适用于线程中的所有窗口。但是,您可以通过创建并将自己的输入上下文与线程的一个或多个窗口相关联来覆盖此默认行为。您对自己的输入上下文所做的更改仅适用于与之关联的窗口。
您可以使用ImmCreateContext功能创建输入上下文。您可以使用ImmAssociateContext功能将上下文分配给窗口。此函数返回先前关联的输入上下文的句柄。如果您之前没有将输入上下文与窗口相关联,则返回的句柄用于默认输入上下文。如果您不再需要使用自己的输入上下文,则应保存此句柄并稍后重新关联该窗口。
一旦输入上下文与窗口相关联,当窗口被激活并且接收到输入焦点时,系统自动选择该上下文。输入上下文中的样式和其他信息影响该窗口的后续键盘输入,确定IME是否以及如何操作。
在终止应用程序之前,您必须销毁您创建的任何输入上下文。您使用ImmDestroyContext功能销毁输入上下文。在销毁它之前,您必须使用ImmAssociateContext函数将输入上下文从线程中与Windows的任何关联中删除。