ようやくText Services Framework (TSF) の使い方を理解するために、Windows SDK付属のサンプルプログラムからあれこれ削ったものを基に、最小限のプログラムを作ってみました。どれくらい削ったかというと、TSF以外の入力は受け付けないほど——WM_CHARなどのハンドラを書いていないため、MS-IMEの直接入力モードでは何も入力されないくらい——徹底しています。では、TSFInputTest.zipをダウンロード。Visual C++ 2008 SP1 + Windows SDK 6.0でビルドしています。

仮に参考にするなら、このプログラムだけでなく、基となったWindows SDKのサンプルtsfappも必ず見ておくべきです。これはこれでまだ実用的でない部分もありますが。例えば、どちらも確定前の文字列に下線が付いたり色が付いたりせず区別が付きません。どっちもそんなもの描画していないからです。TSFでは、未確定の文字列の描画もアプリケーションの責務です。従来のIMMでは任意でしたが。

TSFの入力を受け付けるために大事なのは、ITextStoreACPインタフェースを実装することです。中の人のブログ、TSF Awareのエントリでもこれだけが必須と書かれています。この中にInsertTextAtSelection(向こうからテキストを入れたいとき、未確定文字列の入力・変換候補の選択も含む)や、GetText(こっちから向こうへテキストを渡す、例えば再変換のときに呼ばれる)などといった、いかにもな感じのメソッドが存在します。これによって、選択範囲・ロックの概念を実装しなければなりません。このプログラムでは切り捨てましたが、属性というものの取り扱いもほとんどの場合において欠かせないだろうという感じました。ここでごちゃごちゃ言うより、ソースコード見たほうが早いと思います。


スポンサード リンク

この記事のカテゴリ