Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/05/15 12:00

 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コンポーネントの配置
図1 GcImeコンポーネントの配置

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

  • AutoShowSoftKeyboard
  • CausesImeEvent
  • ImeSentenceMode
  • InputScope
  • KanaMode
  • ReadingStringOutput

などのプロパティが追加されます。

図2 追加されるプロパティ
図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 グローバルインプットモードか従来のモードへの切り替え
図3 グローバルインプットモードか従来のモードへの切り替え

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

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

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

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

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


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 初音玲(ハツネアキラ)

     国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。  個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。  Microsoft MVP for Windows Development...

バックナンバー

連載: 現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(InputMan)
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5