LoginSignup
1
3

More than 5 years have passed since last update.

IMEを使う(Windows.UI.Text.Core編)

Posted at

はい。
Windowsだけで3つ目のIME APIです。

Windows.UI.Text.Core

Universal Windows Platform(UWP)でIMEを扱う場合のAPIです。
C++もどきでも使えるのですが、C#を使わない理由がないのでC#で使ってます。
(Visual Studio上でC++との連携がわりと楽にできるので困らない)

TSFに比べ使いやすくなっていますが、できることが減っています。
主に縦書きが指定できなくなっているのが……。

実装

非常にわかりやすいので、Visual Studioの補完機能に従っていけばほとんどの実装が完了します。
内部には最低限、テキストと選択範囲を保持します。
テキストや選択範囲を適宜変更して、ディスプレイ上のテキストのレイアウト情報を把握できればOKです。

  1. CoreTextServicesManager.GetForCurrentView()CoreTextServicesManagerのインスタンスを取得する
    • 必要ならInputLanguageChangedに登録する
  2. textServicesManager.CreateEditContext()CoreTextEditContextのインスタンスを作成する
    • イベントに登録してIMEからの要求に応える
      • テキストの取得・変更
      • 選択範囲の取得・変更
      • レイアウトの取得
      • 未確定文字列の開始・終了
      • 未確定文字列の装飾情報
    • メソッドを呼んでアプリケーション側での変更を伝える
      • フォーカス情報
      • テキストの変更
      • 選択範囲の変更
      • レイアウトの変更

おわりに

特筆することがない。
縦書きに対応されてないとはこういうことですね。

Windows.UI.Text.CoreはUWP版のTATEditorを作るときに使います。
(IME APIの挙動とオンメモリビットマップの描画までは確認済み)

明日はmacOSの闇のIME APIについてです。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3