輸入內容
「輸入內容」是由 IMM 維護的內部結構。 它包含 IME 狀態的相關信息,並由 IME 視窗使用。 根據預設,作系統會建立並指派輸入內容給每個線程。 在線程中,此預設輸入內容是共用資源,且與每個新建立的視窗相關聯。
若要擷取或設定 IME 中的資訊,IME 感知應用程式必須先擷取與指定視窗相關聯之輸入內容的句柄。 應用程式會使用 ImmGetContext 函式來擷取句柄。 它可以在 IMM 函式的後續呼叫中使用擷取的句柄來擷取和設定輸入法值,例如組合窗口樣式、組合樣式和狀態視窗位置。 一旦應用程式使用完內容,它就必須使用 ImmReleaseContext函式釋放內容。
因為預設輸入內容是共享資源,所以應用程式所做的任何變更都會套用至線程中的所有視窗。 不過,應用程式可以藉由建立自己的輸入內容並將它與線程的一或多個窗口產生關聯,來覆寫此預設行為。 對應用程式特定輸入內容所做的變更僅適用於與內容相關聯的視窗。
您的應用程式可以使用 ImmCreateContext 函式來建立輸入內容。 若要將內容指派給視窗,應用程式會呼叫 ImmAssociateContext 函式。 此函式會傳回先前相關聯輸入內容的句柄。 如果應用程式尚未將輸入內容與視窗產生關聯,則傳回的句柄適用於預設輸入內容。 一般而言,當不再需要自定義輸入內容時,應用程式會儲存此句柄,稍後再將其與視窗產生關聯。
一旦輸入內容與視窗相關聯,作系統就會在啟動視窗並接收輸入焦點時自動選取該內容。 輸入內容中的樣式和其他資訊會影響該視窗的後續鍵盤輸入,並判斷 IME 的運作方式。
您的應用程式必須在終止之前終結任何自定義的輸入內容。 首先,應用程式會使用 ImmAssociateContext 函式,從線程中與視窗建立的任何關聯中移除輸入內容。 然後,它會呼叫 ImmDestroyContext 函式。
相關主題