2008年9月21日 星期日

Ogre輸入中文的辦法

如果還沒什麼人創新辦法的話,目前總共有三種
一種是直接修改源碼,讓已經被封裝的WindwosEvent可以被使用。
一種也是修改源碼,過去有個所謂i18n的patch版本(1.0.x到1.2.x左右的事吧)
這是利用SLD的Input來做,理論上是跨平台的最好做法。
最後一種,也是最麻煩的一種,改在建立Ogre視窗時動手腳
不破壞Ogre原始碼,可以直接使用PreBuilt SDK的辦法,雖然只能用在Windows。

這是從Ogre的中國非官方站看來的
應該也是修改源碼讓其可以支援中文輸入的"免費打工仔"寫的
就是利用Ogre最初就有的特性,可以內嵌成為子視窗的辦法
讓我們直接利用父視窗的一切來取得IME的文字

喔...這樣講起來很容易,可是實作起來...
如果不是對Windows的訊息運作有一定的了解
還有對如何取得IME的文字有相當的認知
同時對於如何手動建立Ogre而不使用ExampleApplication的繼承的話,
還真的是不知從何開始著手。

就這樣,斷斷續續搞了我半個多月才起來....
正式說起來是三天左右
而且還是個不完全的缺陷範列
第一天從一開始我著手方向就錯誤了,所以一直做不出來,就此中斷
第二天是前天,工作到一半忽然靈光一動發現錯誤的地方
然後成功地補捉了WM_IME_COMPOSITION訊息,顯示了個MessageBOX出來
第三天是昨天,花了一個下午的時間,把中文成功地在QuickGUI裡輸入
是用injectChar輸入喔,不是用setText喔。
之所以不完全,是我只有處理IME轉換的部分訊息,所以新注音不能正常使用
沒辦法做還沒轉換前的暫存編輯(就是選字看不到)
也沒做UNICODE轉換,所以萬一輸入法不支援Unicode也不能用。
但總算是實現長久以來的夢想

不過話說回來,這與我真正寫遊戲,好像沒多大關係喔
如果不是非常執著於在Ogre裡面輸入,搞個DialogBox也可以辦到啊
我也不用處理什麼IME訊息,頂多要做BIG5轉UTF8而已
所以我在幹什麼啊!

沒有留言: