Windows Vista でのタッチ入力のサポート

Windows Vista 以降、タブレット PC テクノロジでは、タッチ対応デジタイザーを使用したタブレット PC でのタッチ入力がサポートされています。 このサポートには、入力に指を使用する場合の Windows のターゲット設定とコマンド処理に役立つ強化されたユーザー インターフェイスが含まれています。

タッチ デジタイザーのサポート

ペンとタッチ入力は排他的ではありません

InkCollectorInkOverlayRealTimeStylus アプリケーションでは、ペンとタッチ入力が相互に排他的であると想定しないでください。

Windows Vista では、システムがペンを認識すると、タッチ入力は無視されます。 つまり、タッチ ストロークが終了し、ペン ストロークが開始されます。 これは将来変更される可能性があるため、コードではペンとタッチ入力が相互に排他的であると想定しないでください。

その他のマウス メッセージ ソース

ユーザーが指またはペンのみを使用して対話している場合でも、マウス メッセージの他のソースがあります。 ソースには、タッチパッドと、階層化されたウィンドウの背後にあるアプリケーションが、マウスがアプリケーションの上を移動していることを認識できるようにするための動きが含まれます。

タッチ入力ユーザー インターフェイスの有効化と無効化

アプリケーションの要件に応じて、タッチ入力ユーザー インターフェイスを有効または無効にすることができます。 これを実現するには、ウィンドウ プロシージャでオペレーティング システム ウィンドウ メッセージをインターセプトし、Windows メッセージを変更します。 アプリケーションで WndProc を オーバーライドして、これらのメッセージをインターセプトします。 次の C# 擬似コードは、タッチ入力ユーザー インターフェイスを有効または無効にする方法を示しています。 このコードでは、同じ手法を使用して、長押しジェスチャを無効にする方法も示しています。 このメソッドは、スタイラスを無効にする場合にも機能します。

const int WM_TABLET_QUERY_SYSTEM_GESTURE_STATUS = 716;

const uint SYSTEM_GESTURE_STATUS_NOHOLD           = 0x00000001;
const uint SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEON  = 0x00000100;
const uint SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEOFF = 0x00000200;

protected override void WndProc(ref Message msg)
{
    switch (msg.Msg)
    {
        case WM_TABLET_QUERY_SYSTEM_GESTURE_STATUS:
        {
            uint result = 0;
            if (...)
            {
                result |= SYSTEM_GESTURE_STATUS_NOHOLD;
            }

            if (...)
            {
                result |= SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEON;
            }

            if (...)
            {
                result |= SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEOFF;
            }

            msg.Result = (IntPtr)result;
        }
        break;

        default:
            base.WndProc(ref msg);
            break;
    }
}

Windows Touch