例えばExcel 2013の場合、今まで右下の表示スケールやマウスのセンターホイールで実現していた拡大縮小をピンチやストレッチでできるようになっていたり、また表示範囲の移動も指をスライドすることで可能になっており、これが予想以上に快適であったりします。
一方、Windows 8対応と称したアプリの中には、単にWindows 8での動作確認が完了したという意味合いのものも多数存在します。単なる動作確認済ではなく、タッチを有効活用するデスクトップアプリを作成するにはどうしたらよいでしょうか。
その答えの一つが、今回ご紹介する「InputMan for Windows Forms 7.0J SP1」を利用してアプリを構築することです。「InputMan for Windows Forms 7.0J SP1」に実装されたタッチを視野に入れた新機能を使って、本当のWindows 8対応デスクトップアプリを構築してみましょう。
(編注:本稿のサンプルファイルは記事冒頭のリンクからダウンロードしてください。以降、各見出しのカッコ内の文字が対応するプロジェクト名です)
Windows 8のIMEを制御(CZ1304InputScope)
「InputMan for Windows Forms 7.0J SP1」では、GcImeコンポーネントを使うことでWindows 8でのIMEの入力モード制御が可能になっています。
GcImeコンポーネントは非表示コンポーネントなので、ツールボックスからWindowsフォームデザイナにドラッグ&ドロップするとコンポーネントトレイに自動配置されます。
GcImeコンポーネントが配置されたフォーム上のコントロールには
- AutoShowSoftKeyboard
- CausesImeEvent
- ImeSentenceMode
- InputScope
- KanaMode
- ReadingStringOutput
などのプロパティが追加されます。
もちろん対象となるのはInputManで提供されるコントロールだけではなく、Windowsフォームに配置できる標準コントロールも対象です。
InputManのコントロール
- GcCharMask
- GcComboBox
- GcDateTime
- GcDate
- GcTime
- GcTextBox
- GcMask
- GcPostal
- GcAddressBox
標準コントロール
- ComboBox
- ContextMenuStrip
- DataGridView
- ListView
- MaskedTextBox
- MenuStrip
- PropertyGrid
- RichTextBox
- TextBox
- ToolStrip
- TreeView
入力モード制御は、この拡張されるプロパティの「InputScope」プロパティを使用します。しかし、ここで1つ疑問が生じます。Windowsフォームのコントロールには標準でImeModeプロパティがあります。このプロパティの説明には「選択されたときのオブジェクトのIMEの状態を決定します」とあります。ImeModeプロパティがあるのにInputScopeプロパティが必要な理由は何でしょうか。
Windows 8のデフォルト設定(グローバルインプットモード)では、IMEの切り替えがスレッド単位ではなくユーザ単位に変わった影響から、Windows 8のデスクトップアプリではImeModeプロパティが無視されてしまうのです。この状況はタッチ対応ディスプレイかどうかは影響しません。非タッチ対応ディスプレイのノートPCでも再現します。
対処方法としてはコントロールパネルでの変更というのも考えられますが、GcImeコンポーネントを使用し、グローバルインプットモードに対応したInputScopeプロパティで対応できます。
それではImeModeプロパティで「Katakana」を指定したTextBoxコントロールと、InputScopeプロパティで「KatakanaFullWidth」を指定したTextBoxコントロールでWindows 8でのIME入力モードがどうなるか確認してみましょう。
ImeModeプロパティの指定では「ひらがな」だったIME入力モードが、InputScopeプロパティの指定では「全角カタカナ」に変わってくれます。これでやっと従来の方法を踏襲した、より細かなIME入力モードの制御ができるようになりました。
いうなれば、ImeModeプロパティを使っているWindowsフォームアプリをWindows 8で動かしたり移植したりする場合は、GcImeコンポーネントの使用に切り替えることが仕様通り動作させるための大前提だといえます。