今回は、Wintabを利用し、ペンの位置や筆圧を取得する方法を紹介します。取得した情報を利用し、アプリケーション側では画面上に線を描画するプログラムを組みます。前回は、WTInfoAという関数をWintabFunctionsに追加しましたが、ペンの位置を取得するために必要な関数を追加します。pktBuf);}2.定数・構造体の追加コード量が多くなってしまうため、WTOpenA/WTPacketに必要な構造体のみ載せておきます。詳細なコードを確認したい方は、サンプルコードを参照してください。WTOpenAで利用するWintabLogContextという構造体です。この構造体に指定する内容によって、取得できる情報を変更することが可能です。詳細な内容については、WDNを参照してください。lcSysSensY;}次に、WTPacketに指定するWintabPakcet構造体です。本来は、WTOpenに設定した内容によってパケットのパラメータは増減します。C#では手間になってしまうので、取得するパラメータを固定にし、構造体でパケットを読み込むようにしています。ROTATION}3.デフォルトのコンテキスト情報取得WTOpenAのコンテキスト情報は、WTInfoAから取得できるデフォルトのコンテキスト情報をカスタマイズして設定します。WintabManagerに、デフォルトコンテキストを取得するメソッドを追加します。パケットのサイズは、指定したビットによって可変となる。全てのビットを指定し、パケットのサイズを固定にする。context;}4.タブレットのXYZ座標の範囲取得コンテキスト情報には、タブレット側の入力領域を指定する必要があります。WTInfoAを利用することで、XYZ座標の範囲を取得することができるので、WintabManagerにメソッドを追加します。axis;}5.タブレットのオープン・クローズ処理の追加パケットの受信を開始するためのオープン処理と、停止するためのクローズ処理をWintabManagerに追加します。}}6.パケット取得処理の追加Wintabからパケットを受信すると、ウインドウメッセージにWT_PACKETというメッセージが送信されます。メッセージを受信した際に、パケット情報を読み出すことで、ペンの位置や筆圧を取得することができます。WintabManagerには、WTPacketを利用してパケットを取得するメソッドを追加します。packet;}7.描画処理の実装ここからはWPFのプログラムとなります。XAML上に線を描画するCanvasを設置します。</Grid></Window>次に、追加したメソッドを利用し、タブレットの情報の取得を開始する処理をLoadedイベント内に追加します。HwndSourceHook(WndProc));}上記の処理の最後で、ウインドウプロシージャをフックしています。WndProcというメソッドに、ウインドウメッセージが送信されるようになるので、処理を追加します。この処理では、WT_PACKETを受信した際に、筆圧が0以外だった場合にaddPathというメソッドで、画面上に線を追加しています。線の太さは、事前の取得した筆圧の最大値と、現在の筆圧を比較して設定しています。.NETでは、基本的にウインドウメッセージやウインドウプロシージャを処理することはほとんどありませんが、詳しく知りたい方は、MSDNを参照してください。screenCanvas.Children.Add(l);}以上で、アプリケーション上に線を描画するための実装が完了しました。実際にアプリケーションを実行し、タブレットで線を書いてみましょう。スクリーンショットのように、線が描画され、筆圧によって線の太さが変わるかと思います。サンプルソースはこちらにアップしてありますので、興味のある方は実際に試して頂ければと思います。次回は、Wintabで位置や筆圧以外に取得できる情報いつて説明したいと思います。坂本智このブログを通じて、ワコム製品に関する技術情報をソースコードなどを交えて提供していきます。ワコム製品に関してのイベントやセミナーなどの情報も時々お伝えしていきます。ワコムTOP※本サイトは、株式会社ワコムと株式会社バサラが共同で運営しています。アイコンのあるリンクは、外部サイトへリンクしています。