WPF アプリケーションのリアルタイムなスタイラス入力を無効にするDisable the RealTimeStylus for WPF Applications

Windows プレゼンテーションファンデーション (WPF) は、Windows 7 タッチ入力の処理のサポートを組み込まれています。Windows Presentation Foundation (WPF) has built in support for processing Windows 7 touch input. サポートは、タブレット プラットフォームのリアルタイムスタイラス入力 、 、OnStylusDownOnStylusUpおよびOnStylusMoveイベントを介して提供されます。The support comes through the tablet platform’s real-time stylus input as OnStylusDown, OnStylusUp, and OnStylusMove events. Windows 7 では、ウィンドウ メッセージの Win32 WM_TOUCHマルチタッチ入力も提供されます。Windows 7 also provides multi-touch input as Win32 WM_TOUCH window messages. これら 2 つの API は、同じ HWND 上で相互に排他的です。These two APIs are mutually exclusive on the same HWND. タブレット プラットフォーム (WPF アプリケーションの既定値) を介してタッチ入力を有効にすると、WM_TOUCHメッセージが無効になります。Enabling touch input via the tablet platform (the default for WPF applications) disables WM_TOUCH messages. その結果、WM_TOUCHを使用して WPF ウィンドウからタッチ メッセージを受信するには、WPF で組み込みのスタイラス サポートを無効にする必要があります。As a result, to use WM_TOUCH to receive touch messages from a WPF window, you must disable the built-in stylus support in WPF. これは、WM_TOUCHを使用するコンポーネントをホストする WPF ウィンドウなどのシナリオに適用されます。This is applicable in a scenario such as a WPF window hosting a component that uses WM_TOUCH.

スタイラス入力をリッスンする WPF を無効にするには、WPF ウィンドウによって追加されたタブレット サポートを削除します。To disable WPF listening to stylus input, remove any tablet support added by the WPF window.


次のサンプル コードは、リフレクションを使用して既定のタブレット プラットフォーム サポートを削除する方法を示しています。The following sample code shows how to remove the default tablet platform support by using reflection.

public static void DisableWPFTabletSupport()  
    // Get a collection of the tablet devices for this window.
    TabletDeviceCollection devices = System.Windows.Input.Tablet.TabletDevices;  
    if (devices.Count > 0)  
        // Get the Type of InputManager.  
        Type inputManagerType = typeof(System.Windows.Input.InputManager);  
        // Call the StylusLogic method on the InputManager.Current instance.  
        object stylusLogic = inputManagerType.InvokeMember("StylusLogic",  
                    BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,  
                    null, InputManager.Current, null);  
        if (stylusLogic != null)  
            //  Get the type of the stylusLogic returned from the call to StylusLogic.  
            Type stylusLogicType = stylusLogic.GetType();  
            // Loop until there are no more devices to remove.  
            while (devices.Count > 0)  
                // Remove the first tablet device in the devices collection.  
                        BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,  
                        null, stylusLogic, new object[] { (uint)0 });  

関連項目See also