所以還是要硬來才能搞清楚一些東西
反正就是…看了一長串程式碼,自以為功力夠了可以看完,結過怠惰六天多。
語言列按鈕
怎麼說呢?這支範例其實提供三個按鈕,剩下那個不曉得跑哪去的就是常見的「中文/英數切換」。 至於它為什麼不見,我也不曉得,明明程式中有設定的,而且也沒有各別隱藏的函式的樣子。(find reference沒有找到分別處理的跡象) 反正,為什麼看不到目前是一個很神祕的事情,寶傑,你怎麼說?
誰在輸出文字
第一步是找實作 ITfEditSession.DoEditSession 的地方,為什麼會知道?因為網路上有個人想辦法寫了一個範例,不管你按了什麼都只會講hello world,我去找那一段字就找到了。 不過這樣的範例還是被Win10辨認成舊的api(後面加註一個僅桌面的鳥字),我也搞不懂為什麼。
首先是輸出一般文字的部份由CSampleIME._SetInputString處理,很有趣的是這函式是寫在Composition.cpp,看起來這是種功能分組而不是只單看名子而已,可以考慮以後這樣寫。
pRange->SetText(ec, 0, pstrAddString->Get(), (LONG)pstrAddString->GetLength());
另一個是同一個檔案內的CSampleIME._AddCharAndFinalize,它處理的是結尾標點。
tfSelection.range->SetText(ec, 0, pstrAddString->Get(), (LONG)pstrAddString->GetLength());
第一個參數是editcookie,嗯?實際上是32bit無號整數,我認為會是流水編號之類的。
第二個是dword,不過我比較喜歡叫「32bit無號整數」,變數的名子也會取作flag32。對,這是旗子。
剩下兩個很明顯了,字串本身和字串長度。
不過觸發條件仍要研究一下,雖然多數輸入法都只吃三排按鈕,不過像「大易」就吃四排,怎樣讓程式也把數字當作要轉換的輸入是重點之一。 另外,結尾這部份只吃全形符號(還有全形的英數),這對我來說不太合口味,也是要找一下。