維尼的蜂巢

RealTime??!! It’s amazing!!!!

IME(input method editor)的製作 八月 3, 2006

Filed under: VC++/C++/C — kevinlin @ 12:21 上午

之前研究了一下IME該怎麼整合到程式裡,很多全螢幕的3D遊戲都是自己用自己方式表現中文輸入的,怎麼做呢??本來覺得很難後來覺得還好,其實就是攔截本來windows幫我們處理的一些訊息,由我們自己去實作就好了。

其實輸入文字主要就分幾個部份(下面這張是我自己做出來的圖),左邊綠色的字是自己擷取的,中間常常看到的輸入框是windows處理的,我把兩個一起顯示出來,通常自己有處理就不給windows處理了

(下面這張是新注音,MSDN上的圖)(其實注音跟新注音不太一樣),這張說明了我們要處理的東西有四個,一個是所謂字根(字根在這裡指的是注音符號,當然還有日文跟簡體中文的字根都不同)(A),一個是輸入的字串(這時候會送給視窗WM_CHAR把字送出去)(B),一個是選字的內容(C),一個是目前的輸入法(D),其實呢,注音輸入法沒有下圖的A部分,所以新注音的處理上怪怪的,但是技術上來說,只把他當作三種就好,就是我們只處理這三個東西
D.狀態(Status Windows)-顯示目前的輸入法
B.字根輸入(Composition Windows)-顯示目前鍵盤按的情況
C.選字視窗(Candidates Windows)-列出目前字根對應的全部文字

以下稍微列出幾個需要處理的訊息

WM_INPUTLANGCHANGE: //用來處理輸入法改變

WM_IME_STARTCOMPOSITION: //開始打字根的時候會送出的訊息

WM_IME_ENDCOMPOSITION: //處理結束打字的時候,就是選好字後,要作的動作

WM_IME_COMPOSITION: //輸入改變時會送的訊息,這裡面根據lParam還有很多參數,常用的是GCS_RESULTSTR(得到選好的字時),GCS_COMPSTR(得到轉換後的字),GCS_COMPREADSTR(得到從鍵盤輸入的字根)

WM_IME_NOTIFY: //這就根據wParam控制很多了,IMN_SETCONVERSIONMODE(全形/半形,中/英這些的改變),IMN_OPENCANDIDATE(進入選字狀態),IMN_CHANGECANDIDATE(選字表翻頁),IMN_CLOSECANDIDATE(關閉選字表)

這只是簡單的紀錄一下,以免忘記每個訊息的意義

詳細還是要看規格或DX9SDK裡面的DXUT範例

MSDN例子

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s