Sdílet prostřednictvím


Zakázání realTimeStylus pro aplikace WPF

Windows Presentation Foundation (WPF) má integrovanou podporu pro zpracování dotykového vstupu systému Windows 7. Podpora přichází prostřednictvím vstupu pera v reálném čase platformy tablet jako OnStylusDown, OnStylusUpa OnStylusMove událostí. Systém Windows 7 také poskytuje vícedotykový vstup jako zprávy okna win32 WM_TOUCH. Tato dvě API se vzájemně vylučují na stejném HWND. Povolení dotykového vstupu prostřednictvím platformy tablet (výchozí nastavení pro aplikace WPF) zakáže WM_TOUCH zprávy. V důsledku toho je nutné zakázat integrovanou podporu pera ve WPF, abyste mohli používat WM_TOUCH k příjmu dotykových zpráv z okna WPF. To platí ve scénáři, jako je okno WPF hostující komponentu, která používá WM_TOUCH.

Pokud chcete zakázat funkci WPF naslouchání vstupu pera, odeberte veškerou podporu tabletu přidanou oknem WPF.

Příklad

Následující ukázkový kód ukazuje, jak odebrat výchozí podporu platformy tablet pomocí reflexe.

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 });
            }
        }

    }
}

Viz také