首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 95 輸入法編程指南:IME 架構、UI 介面與訊息機制深度解析

     編輯:關於C++

Windows 95 引入全新輸入法架構 (IME),作為動態連結庫 (DLL) 運行,深度整合於多語言鍵盤配置中。相較 Win 3.1,提供多輸入上下文、執行緒級活動 IME、應用程式訊息迴路整合等增強功能。本文系統解析 IME 核心架構、使用者介面、輸入上下文、訊息生成與軟鍵盤機制,為 IME 開發者提供完整技術參考。

IME 雙重介面架構

  • 轉換介面 (Conversion Interface):由 IME 模組匯出函數組成,供輸入法管理器 (IMM) 呼叫,處理核心轉換邏輯。
  • 使用者介面 (UI Interface):由視窗類別實作,接收訊息並呈現候選視窗、撰寫視窗、狀態視窗等 UI 元素。

應用程式 IME 支援層級

層級特徵
無支援不控制 IME,僅被動接收 DBCS 字元
部分支援控制 IME 開關、撰寫視窗,不重繪 UI,使用預定義 "IME" 類建立視窗
完整支援自行管理輸入上下文,直接顯示所有 IME 資訊,不使用 IME 視窗

IME 視窗類別體系

  • 系統預定義 "IME" 類:實作完整 UI 介面,處理 IMM/IME 訊息,不可被取代。
  • 預設 IME 視窗:執行緒初始化時自動建立,服務無支援應用程式,由 DefWindowProc 處理訊息。
  • 應用程式 IME 視窗:部分/完整支援應用程式自行建立,擁有專屬 UI 實體,支援多任務無縫切換。

UI 視窗與輸入上下文

  • 每個 UI 視窗關聯一個當前輸入上下文 (HIMC),透過 GetWindowLong(hWnd, IMMGWL_IMC) 取得。
  • UI 視窗程序 不可 將 IME 訊息 (WM_IME_*) 傳遞給 DefWindowProc,即使未處理也必須自行消費。
  • 輸入上下文元件:hCompStr (撰寫字串)、hCandInfo (候選資訊)、hGuideLine (引導行)、hPrivate (私有資料)、hMsgBuf (訊息緩衝)。
  • 存取需鎖定:ImmLockIMC/ImmUnlockIMC、ImmLockIMCC/ImmUnlockIMCC,支援參考計數。

訊息生成機制

IME 透過兩種管道生成 WM_IME_STARTCOMPOSITION、WM_IME_COMPOSITION 等訊息:

  1. ImeToAsciiEx 回傳緩衝區:系統提供 lpdwTransBuf,IME 填入訊息結構 (訊息碼、wParam、lParam),回傳訊息數量。
  2. 輸入上下文訊息緩衝區:hMsgBuf 存儲額外訊息,配合 ImmGenerateMessage 發送至目標視窗。

軟鍵盤支援

  • 於 ImeInquire 中設定 fdwUICaps = UI_CAP_SOFTKBD 宣告支援。
  • ImmCreateSoftKeyboard 建立視窗,ImmShowSoftKeyboard 顯示/隱藏。
  • 子類型切換:IMC_SETSOFKBDSUBTYPE、IMC_SETSOFKBDDATA。
  • 視窗屬於 UI 視窗附屬,不可取得焦點,需妥善管理資源釋放時機。

核心 IMM 函數 (UI 視窗可呼叫)


ImmGet/SetCompositionWindow    // 撰寫視窗位置/樣式
ImmGet/SetCandidateWindow      // 候選視窗位置/樣式
ImmGet/SetCompositionString    // 撰寫字串/屬性/子句存取
ImmGet/SetCompositionFont      // 撰寫字型
ImmGetNumCandidateList         // 候選列表數量
ImmGetCandidateList            // 取得候選列表
ImmGetGuideLine                // 取得引導行
ImmGet/SetConversionStatus     // 轉換模式 (輸入/拼音/注音等)
ImmGet/SetOpenStatus           // IME 開關狀態
ImmNotifyIME                   // 通知 IME 內部事件
ImmCreate/Destroy/ShowSoftKeyboard // 軟鍵盤生命週期

掌握 Windows 95 IME 架構精髓,能開發出與系統深度整合、支援多執行緒/多上下文、提供豐富使用者體驗的專業輸入法產品。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved