合成字符串

合成字符串是合成窗口中的当前文本。 这是 IME 转换为最终字符的文本。 每个组合字符串由一个或多个“子句”组成。 子句是 IME 可以转换为最终字符的最小字符组合。 为了获取和设置组合字符串,应用程序分别调用 ImmGetCompositionStringImmSetCompositionString 函数。

当用户在合成窗口中输入文本时,IME 将跟踪合成字符串的状态。 此状态包括属性信息、子句信息、键入信息和游标位置。 应用程序可以使用 ImmGetCompositionString 函数检索组合状态。

属性信息以 8 位值数组呈现,该值指定组合字符串中字符的状态。 一个子句的所有字符必须具有相同的属性。 数组包含字符串中每个字节的一个值,包括字符串中任何双字节字符前导字节的一个字节和第二个字节。 对于数组中的每个值,位 0 到 3 可以是以下值的一个组合。

含义
ATTR_INPUT 用户正在输入的字符。 IME 尚未转换此字符。
ATTR_INPUT_ERROR IME 无法转换的错误字符。 例如,IME 不能将一些辅音组合在一起。
ATTR_TARGET_CONVERTED 字符由用户选择,然后由 IME 转换。
ATTR_CONVERTED IME 已转换的字符。
ATTR_TARGET_NOTCONVERTED 正在转换的字符。 用户已选择此字符,但 IME 尚未转换它。
ATTR_FIXEDCONVERTED IME 将不再转换的字符。

 

所有其他值都保留。 在日语中,任何具有ATTR_INPUT属性的未转换字符都是平假名、片假名或字母数字字符。 在朝鲜语中,此属性表示 IME 尚未转换的朝鲜文字符。 在繁体中文和简体中文中,每个 IME 都可以将其字符限制在一定范围内。

组合字符串状态中包含的子句信息是一个由 32 位值组成的数组,用于指定子句在组合字符串中的位置。 数组包括每个子句的一个值和一个指定完整字符串长度的最终值。 数组中的每个值指定从字符串开头到 子句的偏移量(以字节为单位)。 第一个值始终为 0,因为第一个子句始终从字符串的开头开始。 例如,如果字符串有两个子句,则子句信息有三个值:第一个值为 0,第二个值是第二个子句的偏移量,第三个值是字符串的长度。 对于 Unicode,子句的位置以 Unicode 字符计,字符串长度以 Unicode 字符为单位。

组合字符串状态中包含的键入信息是一个以 null 结尾的字符串,表示用户在键盘上输入的字符。

组合字符串状态中包含的游标位置是一个值,该值指示游标相对于组合字符串中的字符的位置。 该值是字符串开头的偏移量(以字节为单位)。 如果此值为 0,则光标紧邻字符串中的第一个字符。 如果值等于字符串的长度,则光标紧跟在最后一个字符之后。 如果值为 1,则游标不存在。 对于 Unicode,位置和长度都以 Unicode 字符度量。

应用程序可以使用 ImmSetCompositionString 函数设置组合字符串或组合状态的元素。 为了确保组合窗口根据这些更改更新其外观,函数允许应用程序向窗口发送通知消息。 设置组合状态元素组合的应用程序通常会禁用除上次调用此函数外的所有通知,以便仅为合成窗口生成一条通知消息。

最后,编辑控件支持两条消息,用于更改 IME 对组合字符串的处理。 有关详细信息,请参阅 EM_GETIMESTATUSEM_SETIMESTATUS。 有关编辑控件的详细信息,请参阅 编辑控件

关于输入法管理器