Wyłącz RealTimeStylus dla aplikacji WPF

Windows Presentation Foundation (WPF) ma wbudowaną obsługę przetwarzania danych wejściowych dotykowych systemu Windows 7. Obsługa jest obsługiwana przez wprowadzanie stylu w czasie rzeczywistym przez platformę tabletów jako OnStylusDownzdarzenia , OnStylusUpi OnStylusMove . System Windows 7 udostępnia również wielodotykowe dane wejściowe jako komunikaty okien WM_TOUCH Win32. Te dwa interfejsy API wykluczają się wzajemnie na tym samym HWND. Włączenie wprowadzania dotykowego za pośrednictwem platformy tabletu (ustawienie domyślne dla aplikacji WPF) wyłącza WM_TOUCH komunikatów. W związku z tym, aby używać WM_TOUCH do odbierania komunikatów dotykowych z okna WPF, należy wyłączyć wbudowaną obsługę rysików w WPF. Ma to zastosowanie w scenariuszu, takim jak okno WPF hostujące składnik korzystający z WM_TOUCH.

Aby wyłączyć nasłuchiwanie WPF na danych wejściowych rysika, usuń wszelkie obsługę tabletu dodane przez okno WPF.

Przykład

Poniższy przykładowy kod pokazuje, jak usunąć domyślną obsługę platformy tabletu przy użyciu odbicia.

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.  
                stylusLogicType.InvokeMember("OnTabletRemoved",  
                        BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,  
                        null, stylusLogic, new object[] { (uint)0 });  
            }
        }  
  
    }  
}  

Zobacz też