wintab开发例程

本文介绍了如何使用WinTab API进行程序开发,包括获取WinTab SDK、设置Visual C++项目、创建WinTab兼容的MFC应用程序,以及挑战ActiveX Control。通过WinTab,开发者可以方便地处理平板电脑的数据,实现笔压和倾斜输入等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。

 私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズのものに移行しました。いずれもシリアルポートに接続するようになっていました。当時はWACOMコマンドという簡単な制御用コマンドを直接シリアルポートに書き込み、タブレットからの応答をシリアルポートから読み取って解析するというプログラムを書いていました。OSはMS-DOSでWACOMから出ているパケットの資料に基づきデータを取得してました。Windows 3.1/95に移行してからも、Windows APIでシリアルポートを読み書きしてました。

 余談ですが、その後、お子様向けのタブレットであるWACOMプレピオを入手しました。ArtPadと比べて1万円ほど安く、PS2ポートから電源を取るのでACアダプタ不要というのが魅力でした(その分、データの分解能は低く抑えられています)。KidPicsというお絵かきソフトまでバンドルされてました。最近のFAVOなどはもちろんUSB接続で、AC電源も不要です。

 現在ではシリアルポート、USBの接続方式の違いはドライバが吸収してくれて、WinTabというAPIセットを利用してペンデータを取得できます。WinTab APIを利用するためのSDKが、WinTabの開発元であるLCS/Telegraphicsから提供されていますので、タブレット対応アプリケーションを作成することができます。

SDKの入手

 LCS/TelegraphicsのサイトからWinTabのSDKを入手します。ダウンロードページは、

http://www.pointing.com/FTP.HTM

です。WTKIT126.ZIP が、SDKのバイナリです。ヘッダファイルやLIBファイル、サンプルファイルがアーカイブされています。サンプルをビルドするのが面倒な場合は、コンパイル済みのファイルが WT32X126.ZIP で用意されています。他にWord形式のドキュメント(英文)もあります。WinTab APIを提供するWinTab.dllはタブレットドライバをインストールすると自動的にインストールされます。
WinTabを利用するVisual C++ プロジェクトの設定方法

 WTK126.ZIPを適当なディレクトリに展開します。サンプルプログラム、ヘッダファイル、ライブラリファイルのディレクトリができます。Visual Studio のオプション設定でincludeパスとlibパスを指定します。図は E:/wacom というディレクトリにWTK126.ZIPを展開した場合の例です。
 サンプルプログラムのディレクトリに必ず含まれている Pktdef.h もincludeディレクトリにコピーしておくと便利です

includeパス設定 libパス設定
また、プロジェクトの設定で、libディレクトリ内のWintab32.lib と Wntab32x.lib を指定します。


リンクファイル指定

WinTab対応MFCアプリケーションを作ってみる

 SDKに含まれるサンプルプログラムはすべてC言語でWindowsのメッセージを処理するコールバックルーチンで書かれています。サンプルのPrsTestあたりを参考にWinTab対応MFCアプリケーションを作ってみます。まず、AppWizardでDocument-Viewサポート付のMFCアプリケーションを生成します(別にDocument-Viewでなくてもいいのですが、Documentにペンデータを格納するようにすればお絵かきソフトなどが作れそうです)。CView派生クラスのヘッダファイルの先頭に以下のようにmsgpack.h wintab.h pktdef.hをインクルードし、3つのdefine文を記述します。

#include <msgpack.h>
#include <wintab.h>
#define PACKETDATA	(PK_CURSOR | PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_ORIENTATION)
#define PACKETMODE	PK_BUTTONS
#define NPACKETQSIZE 32
#include <pktdef.h>

○WTメッセージによるデータ取得

 タブレットドライバからのデータは独自のWindowメッセージであるWT_PACKETメッセージとして受け取ることができます。WT_PACKETを受け取るには、メッセージを受信したいWindowのハンドルをWTOpen というWinTab API関数に渡す必要があります。CView派生クラスで処理したい場合は、CViewのパブリックメンバ変数 m_hWndを使用すればOKです。WTOpenではLOGCONTEXT構造体に値を設定してモードや解像度の設定を行います。WTInfo API 関数を用いてLOGCONTEXTのデフォルト値を取得し、必要な項目だけを設定するようなコーディングをします。次のような初期化用ヘルパー関数を用意し、タブレット受信の開始イベントハンドラで呼ぶようにします。WTOpenはHTCX構造体を返します。このヘルパー関数ではWTOpenの返り値をそのままreturnしています。

HCTX TestView::TabletInit()
{
  LOGCONTEXT lcMine;
  
  /* WTInfoを使用してデフォルト設定値を取得 */
  WTInfo(WTI_DEFCONTEXT, 0, &lcMine);
  
  /* 必要な項目を設定 */
  wsprintf(lcMine.lcName, "WinTab test %x", AfxGetApp()->m_hInstance);
  lcMine.lcOptions |= CXO_MESSAGES;  // WTメッセージが渡されるようにする
  lcMine.lcPktData = PACKETDATA;
  lcMine.lcPktMode = PACKETM
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值