組合字元串
組合字元串是撰寫視窗中目前的文字。 這是輸入法轉換成最終字元的文字。 每個組合字元串都包含一或多個 「clauses」。 子句是 IME 可以轉換成最終字元的最小字元組合。 若要取得和設定組合字元串,應用程式會分別呼叫 ImmGetCompositionString 和 ImmSetCompositionString 函式。
當使用者在組合視窗中輸入文字時,IME 會追蹤組合字元串的狀態。 此狀態包括屬性資訊、子句資訊、輸入資訊,以及資料指標位置。 應用程式可以使用 ImmGetCompositionString 函式來擷取組合狀態。
屬性資訊會在 8 位值的陣列中轉譯,指定組合字元串中字元的狀態。 一個子句的所有字元都必須具有相同的屬性。 陣列會針對字串中的每個位元組包含一個值,每個位元組分別包含字串中任何雙位元組字元的前置位元組和第二個位元組。 針對陣列中的每個值,位 0 到 3 可以是下列值的其中一個組合。
值 | 意義 |
---|---|
ATTR_INPUT | 使用者輸入的字元。 輸入法尚未轉換此字元。 |
ATTR_INPUT_ERROR | IME 無法轉換的錯誤字元。 例如,IME 無法組合一些同音。 |
ATTR_TARGET_CONVERTED | 使用者選取的字元,然後由輸入法轉換。 |
ATTR_CONVERTED | IME 已轉換的字元。 |
ATTR_TARGET_NOTCONVERTED | 正在轉換的字元。 使用者已選取此字元,但 IME 尚未轉換。 |
ATTR_FIXEDCONVERTED | IME 將不再轉換的字元。 |
所有其他值都會保留。 在日文中,任何具有 ATTR_INPUT 屬性的未轉換字元都是平假名、片假名或英數位元。 在韓文中,此屬性代表 IME 尚未轉換的韓文字元。 在繁體中文和簡體中文中,每個輸入法可以在某些範圍內限制其字元。
組合字元串狀態中包含的子句資訊是 32 位值的陣列,指定組合字元串中子句的位置。 陣列會針對每個子句包含一個值,以及指定完整字串長度的最終值。 陣列中的每個值都會指定從字串開頭到 子句的位移,以位元組為單位。 第一個值一律為 0,因為第一個子句一律會從字串開頭開始。 例如,如果字串有兩個子句,子句資訊就會有三個值:第一個值是 0,第二個值是第二個子句的位移,而第三個值則是字串的長度。 若為 Unicode,子句的位置會以 Unicode 字元計算,而字串的長度是 Unicode 字元的大小。
組合字元串狀態中包含的輸入資訊是 Null 終止的字元字串,代表使用者在鍵盤上輸入的字元。
組合字元串狀態中包含的資料指標位置是值,指出游標相對於組合字元串中字元的位置。 值是字串開頭的位移,以位元組為單位。 如果此值為 0,資料指標會緊接在字串中的第一個字元之前。 如果值等於字串的長度,游標就會緊接在最後一個字元之後。 如果值為 1,則資料指標不存在。 針對 Unicode,位置和長度都是以 Unicode 字元來測量。
您的應用程式可以使用 ImmSetCompositionString 函式來設定組合狀態的字串或元素。 為了確保組合視窗會根據這些變更來更新其外觀,函式可讓應用程式將通知訊息傳送至視窗。 設定組合狀態專案組合的應用程式通常會停用此函式最後一次呼叫的通知,以便只針對組合視窗產生一個通知訊息。
最後,編輯控制項支援兩則訊息,以透過 IME 變更組合字元串的處理。 如需詳細資訊,請參閱 EM_GETIMESTATUS 和 EM_SETIMESTATUS。 如需編輯控制項的詳細資訊,請參閱 編輯控制項。
相關主題