デスクトップでもタッチしたい 「InputMan for Windows Forms 7.0J SP1」でのタッチ対応に迫る

CodeZine / 2013年5月15日 12時0分

図9 タッチ操作によるドロップダウン表示例

 Windows 8でタッチインターフェースといえば、MicrosoftデザインスタイルのWindows 8ストアアプリの専売特許のように誤解されている方も多いと思いますが、実際はデスクトップアプリ(Windowsフォームアプリ/WPFアプリ)でもタッチを有効活用することで使いやすさが向上します。

 例えば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フォームデザイナにドラッグ&ドロップするとコンポーネントトレイに自動配置されます。

図1 GcImeコンポーネントの配置


 GcImeコンポーネントが配置されたフォーム上のコントロールには

AutoShowSoftKeyboard CausesImeEvent ImeSentenceMode InputScope KanaMode ReadingStringOutput などのプロパティが追加されます。

図2 追加されるプロパティ


 もちろん対象となるのは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でも再現します。

図3 グローバルインプットモードか従来のモードへの切り替え


 対処方法としてはコントロールパネルでの変更というのも考えられますが、GcImeコンポーネントを使用し、グローバルインプットモードに対応したInputScopeプロパティで対応できます。

 それではImeModeプロパティで「Katakana」を指定したTextBoxコントロールと、InputScopeプロパティで「KatakanaFullWidth」を指定したTextBoxコントロールでWindows 8でのIME入力モードがどうなるか確認してみましょう。

図4 InputScopeプロパティの動作確認


 ImeModeプロパティの指定では「ひらがな」だったIME入力モードが、InputScopeプロパティの指定では「全角カタカナ」に変わってくれます。これでやっと従来の方法を踏襲した、より細かなIME入力モードの制御ができるようになりました。

 いうなれば、ImeModeプロパティを使っているWindowsフォームアプリをWindows 8で動かしたり移植したりする場合は、GcImeコンポーネントの使用に切り替えることが仕様通り動作させるための大前提だといえます。



CodeZine

トピックスRSS

ランキング