APIをWPFで利用する方法を紹介します。前回は、タッチデバイスの情報を取得するところまで行いましたが、実際にタッチイベントを取得する方法を紹介します。タッチイベントを受信する方法は、以下の二種類が存在します。・コールバック・ウィンドウメッセージまた、OSへのタッチイベント通知を有効・無効にするためのモード設定もあります。今回は、タッチイベントを受信する方法とモードをコンボボックスで切り替えられるような機能を実装します。API用の関数定義用の「MTAPI.cs」へタッチイベントを受信するために必要な関数を追加します。タッチイベントの受信設定を解除するための関数も追加しておきます。userData);上記以外にも「FeelMultiTouchAPIConst.cs」へ必要な構造体やdelegateを追加しています。「MainWindow.xaml」へイベント・モードを切り替えるComboBoxを設置します。選択変更のイベントは全てメソッドを指定します。</Grid></Window>ComboBox_SelectionChangedは、「MainWindow.cs」へ以下のように追加します。RegisterEventはComboBoxの選択状態を見てタッチイベントを登録するメソッドです。次の項目でメソッドを追加します。}3.タッチイベントの登録・解除処理の追加タッチイベントの登録・解除処理を「MainWindow.cs」に追加します。}RegisterEvent内でComboBoxで選択しているモードやイベントで対象のタッチデバイスからタッチイベントを取得するよう設定しています。モードはWacomMTProcessingModeで指定しており、二種類を設定することが可能です。・WMTProcessingModeNoneアプリのみにタッチイベントを通知し、OS側にはタッチイベントを通知しません。・WMTProcessingModeObserverアプリ・OS側両方にタッチイベントを通知します。タッチイベントの受信方法は冒頭に記載したとおり、コールバックとウィンドウメッセージの二種類が存在します。コールバックは「WacomMTRegisterFingerReadCallback」、ウィンドウメッセージは「WacomMTRegisterFingerReadHWND」で設定を行っています。4.タッチの描画処理の実装タッチの描画処理を「MainWindow.xaml」へ追加します。}フィンガーデータの座標やサイズが1.0以下かどうかチェックを行い、円の座標やサイズを設定していますが、これはタッチデバイスによってデータのフォーマットが違うためです。24HDでは座標が渡されます。座標は指の中央の座標ですので描画時にずらして表示しています。実際にタッチデータを受信するウィンドウプロシージャとコールバックを「MainWindow.cs」へ実装します。}ウィンドウプロシージャはlParam、コールバックはfingerPacketがタッチデータとなっています。データの構造としては同じWacomMTFingerCollectionなので描画処理の内容は同じDrawFingersを利用しますが、若干処理の流れが違います。ウィンドウプロシージャは特に問題はないですが、コールバックの場合に注意が必要となります。コールバック内ではコントロールを直接編集することができないので、Invokeを利用してコントロールを編集していますが、Invoke内でfingerPacketを構造体に変換しようとしてもすでにメモリが開放されているためタッチデータを取得することができません。上記のソースコードのようにfingerPacketはコールバック内で構造体に変換し、Invokeで構造体を処理すると正常にタッチイベントを処理することができるようになります。以上で実装は完了したので、実際にアプリケーションを動作させてみましょう。タッチデバイスを選択し、タッチするとアプリケーション上に黒い円が表示されるかと思います。サンプルソースはこちらにアップしてありますので、興味のある方は実際に試して頂ければと思います。次回は、フィンガーデータ以外のフォーマットのタッチイベントについて紹介します。坂本智このブログを通じて、ワコム製品に関する技術情報をソースコードなどを交えて提供していきます。ワコム製品に関してのイベントやセミナーなどの情報も時々お伝えしていきます。ワコムTOP※本サイトは、株式会社ワコムと株式会社バサラが共同で運営しています。アイコンのあるリンクは、外部サイトへリンクしています。