<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              當前通訊!美國英語布局的變體——MicrosoftNetwork

              來源:CSDN 時間:2023-03-02 09:50:57

              IME中包括一個引擎(它可以把按鍵轉換為語音和象形字符),還包括一個由常用象形文字組成的詞典。當用戶敲擊按鍵時,IME 引擎會嘗試判斷應將其轉換為哪個或哪些象形字符。由于許多象形字符具有相同的發音,因此 IME 引擎的第一次判斷可能不是完全正確的。如果建議的字符不正確,用戶可以從同音列表中進行選擇;在一些更先進的 IME 中,用戶選中的同音字會變為 IME 引擎下一輪判斷時的首選字符。


              (資料圖)

              MicrosoftDeveloper Network (MSDN) 文檔(位于 http://msdn.microsoft.com)和編程 API 用一種名為“輸入法區域設置標識符”的變量類型代表輸入語言,它在先前的文檔中被稱為“鍵盤布局處理”(HKL) 并且現在仍被用作類型標識符。HKL 是一種古老的名稱,當時只能從鍵盤進行輸入。輸入法區域設置標識符名稱是一個 32 位的值,它由語言標識符(低 WORD)和設備標識符(高 WORD)的十六進制值組成。(參見下方的圖 7。)例如,美國英語的語言標識符為 0x0409,因此美國英語主布局被命名為 "00000409"。美國英語布局的變體(例如 Dvorak 布局)被命名為 "00010409"、"00020409" 等。設備標識符并不僅限于鍵盤和 IME;現在可通過一些較復雜的機制(例如語音和文字識別引擎)來輸入數據。例如,在 Windows XP 中作為一種系統服務提供的 Microsoft Windows Text Services Framework (TSF),它可以實現與來源無關的高級文字輸入。

              處理輸入語言最簡單的方式是在需要用戶輸入的所有場合都使用操作系統提供的標準控件。例如,通過使用 Unicode 編輯控件或 Rich edit 控件,可以使應用程序能夠處理多種語言的文字輸入。操作系統會以一種對應用程序透明的方式自動處理輸入語言。文字 API 使用的是一種標準的多行編輯控件,它可以避免處理輸入語言時的麻煩。

              對于一些需要完全控制輸入語言處理方式的高級應用程序(例如文本編輯器),它們應該監視(并能夠響應)用戶的改動。當用戶通過單擊任務欄上的語言指示符或按下“左邊 Alt+Shift”鍵來選擇某種輸入語言時,輸入語言不會自動改變– 兩個操作都會生成一個活動的應用程序必須接受或拒絕的請求。為了響應熱鍵組合或鼠標單擊任務欄上的語言指示符后產生的事件,系統會向焦點窗口發送一個 WM_INPUTLANGCHANGEREQUEST 消息,如下圖所示。如果應用程序接受該消息并將其傳遞給 DefWindowProc,系統將啟動切換輸入語言的操作并發送一個 WM_INPUTLANGCHANGE 消息。如果輸入法是 Text Services Framework (TSF) 的一部分,則此過程會略有不同,這時只發送 WM_INPUTLANGCHANGE。當系統成功完成改變后,會生成一個 WM_INPUTLANGCHANGE 消息。WM_INPUTLANGCHANGE 消息的 lParam 變量包含新輸入語言的輸入法區域設置標識符(即 HKL)。

              不支持多語言的應用程序會拒絕 WM_INPUTLANGCHANGEREQUEST 消息。它可能會拒絕任何或全部WM_INPUTLANGCHANGEREQUEST 消息,也可能會先執行一些測試。例如,此消息的 wParam 變量是一個 Boolean 值 bLangInSystemCharset,它將指出請求的輸入語言是否能夠在當前的系統區域設置中呈現出來。在處理 Unicode 應用程序時呈現輸入語言并不麻煩,但是,非 Unicode 應用程序應該監視此值(實際上也是如此),否則它們會顯示錯誤的字符。

              與生成 WM_INPUTLANGCHANGEREQUEST 消息來響應用戶請求的系統類似,應用程序也會通過調用 ActivateKeyboardLayout API 來啟動改變輸入語言的操作。

              (注:win7系統似乎已經拋棄HKL,所有HKL有關的API在win7系統下似乎全部失效)

              Windows 2000 和 Windows XP 中的 IME 模塊適合于向應用程序傳遞用戶輸入信息的大型機制,而且像其他輸入法一樣,最簡單、最安全的輸入內容處理方式是使用標準系統控件,例如編輯字段和 Rich edit 控件等。如果您不是要編寫 IME 軟件包或自定義自己的 IME 用戶界面 (UI),您可以使用標準輸入 API,它可以為您處理 IME 的所有復雜情況。

              對某種輸入語言來說,是使用 IME 還是使用鍵盤來輸入對用戶而言都完全透明。無論用戶是切換 IME 還是西方鍵盤布局,過程都完全相同。這兩種操作都是通過單擊任務欄上的語言指示符或輸入某個快捷鍵組合來完成。而且,應用程序不關心使用的輸入法,因為切換 IME 與切換鍵盤布局會生成同樣的消息:WM_INPUTLANGCHANGEREQUEST(如果 IME 不是 TSF 的一部分)和WM_INPUTLANGCHANGE。應用程序可通過調用 ActivateKeyboardLayout 來激活特定的 IME。IMM 可以作為中介來管理 IME與應用程序之間的通信。當用戶使用 IME 鍵入信息時,每個按鍵都發出一條帶有 GCS_COMPSTR 標記的 WM_IME_COMPOSITION 消息,指出合成字符串有更新。消息的 WPARAM 值將返回字符串的第一個字符,其余字符可以通過帶有相同 GCS_COMPSTR 標記的 ImmGetCompositionString API 進行檢索。然后當用戶按下 Enter 鍵或單擊某個字符在文檔中放置它時,默認情況下,IME 會發出一條帶有 GCS_RESULTSTR 標記的 WM_IME_COMPOSITION 消息。(您可以使用相同的 API 和 GCS_RESULTSTR 標記來檢索提交的字符串。)如果后面的 WM_IME_COMPOSITION 消息被發送到 DefWindowProc,則對于所提交字符串中的每個字符,它都會發出一條包含實際字符的 WM_IME_CHAR 消息。對于非 Unicode 窗口,如果 WM_IME_CHAR 消息包括一個雙字節字符并且應用程序將此消息傳遞給 DefWindowProc,則 IME 會將此消息轉換為兩條 WM_CHAR 消息,每條包含雙字節字符中的一個字節。如果應用程序略過任何一條消息,則它將由應用程序的 DefWindowProc 函數進行處理,此函數會通知 IMM 該消息被忽略。IME 然后會通過多個 WM_CHAR 消息逐字節重新發送字符或字符串。對于 Unicode 窗口,WM_IME_CHAR 和 WM_CHAR 是相同的。

              以下各節將討論對于 Windows 中所運行應用程序的三個離散的 IME 支持級別:不支持、部分支持和完全自定義的支持。應用程序可以小規模自定義 IME 支持(例如通過重新定位窗口),也可以徹底改變 IME UI 的外觀。

              無 IME 支持:不識別 IME 的應用程序通常會忽略所有特定于 IME 的 Windows 消息。大多數針對單字節語言的應用程序不能識別 IME。

              不識別 IME 的應用程序會通過預定義的全局類(對應被稱為 "IME")來繼承活動 IME 的默認 UI。這一全局類具有與基于 Windows 的任何其他常用控件相同的特性。對于每個線程而言,Windows 2000 和 Windows XP 都會根據 IME 全局類自動創建一個窗口,所有不識別 IME 的線程窗口都會共用此默認的 IME 窗口。不識別 IME 的應用程序將關于 IME 的消息傳遞給 DefWindowProc 函數時,DefWindowProc 會將其發送到默認 IME 窗口。

              部分 IME 支持:識別 IME 的應用程序可以創建其自己的 IME 窗口。部分支持 IME 的應用程序可以使用此應用程序 IME 窗口來控制特定的 IME 行為。例如,通過調用函數 ImmIsUIMessage,應用程序可以將與 IME 的 UI 相關的消息傳遞給應用程序的 IME 窗口,應用程序可以在這里處理這些消息。允許應用程序變更窗口位置或屬性的其他 API 函數包括 ImmSetCandidateWindow、ImmSetCompositionFont、ImmSet-CompositionString、ImmSetCompositionWindow以及 ImmSetStatusWindowPos。包含部分 IME 支持的應用程序可使用這些函數來設置 IME UI 窗口的樣式和位置,但是 IME 動態鏈接庫 (DLL) 仍負責繪制這些窗口– IME UI 的常規外觀將保持不變。

              完全 IME 支持則截然不同,完全識別 IME 的應用程序將接管通過 IME DLL 繪制 IME 窗口(狀態、復合以及候選窗口)的工作。此類應用程序可以完全自定義這些窗口的外觀,包括確定其屏幕位置以及選擇使用哪些字體和字體樣式來顯示窗口中的字符。對于文字處理程序以及主要功能是文字處理的類似程序,這會使它們從流暢的 IME 交互以及創建“自然的”用戶交互界面中受益,因此顯得特別方便和有效。IME DLL 仍將決定在 IME 復合窗口和候選窗口中顯示的字符,并且它還會運用算法來猜測字符并在 IME 字典中查找它們。

              名詞解釋

              HIMC : handle to inputcontext           輸入上下文句柄

              HKL:          handleto keyboard layout       Input localeidentifier       鍵盤布局句柄

              HWND:handle to window     窗口句柄

              消息

              WM_IME_NOTIFY:發送應用程序的變化通知到IME窗口。

              wParam

              命令,這個參數可以有如下的值

              IMN_CHANGECANDIDATE      //候選字列表變化

              IMN_CLOSECANDIDATE         //候選字列表

              IMN_CLOSESTATUSWINDOW

              IMN_GUIDELINE

              IMN_OPENCANDIDATE   //打開候選字列表

              IMN_OPENSTATUSWINDOW

              IMN_SETCANDIDATEPOS

              IMN_SETCOMPOSITIONFONT

              IMN_SETCOMPOSITIONWINDOW

              IMN_SETCONVERSIONMODE   //轉換模式的變化

              IMN_SETOPENSTATUS

              IMN_SETSENTENCEMODE

              IMN_SETSTATUSWINDOWPOS

              WM_IME_COMPOSITION:IME把修改組成狀態(composition status)作為按鍵的結果發送給應用程序。

              GCS_COMPATTR

              GCS_COMPCLAUSE

              GCS_COMPREADSTR

              GCS_COMPREADATTR

              GCS_COMPREADCLAUSE

              GCS_COMPSTR                           組合字符串

              GCS_CURSORPOS

              GCS_DELTASTART

              GCS_RESULTCLAUSE

              GCS_RESULTREADCLAUSE

              GCS_RESULTREADSTR

              GCS_RESULTSTR                          結果字符串

              Lib支持:

              Imm32.lib

              責任編輯:

              標簽: 應用程序

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩