Haptische feedback van pen

Leer hoe u haptische feedback van penapparaten kunt gebruiken om natuurlijkere en tactiele interacties te bieden in uw Windows App SDK-app.

Windows 11 haptische feedback voor digitale pennen geïntroduceerd, zodat gebruikers kunnen voelen dat hun pen communiceert met de gebruikersinterface van de app. Wanneer u naar deze functie verwijst, wordt haptic gebruikt in api's en documentatie voor ontwikkelaars, terwijl tactile de gebruikersnaam is die wordt weergegeven in Windows Instellingen.

Sleutel-API's

Haptische feedbacktypen

Er zijn twee soorten haptische feedback beschikbaar:

  • Inktfeedback : simuleert het gevoel van schrijven of tekenen (pen, markering, potlood, markeerstift) door continue trillingen terwijl de pen het scherm raakt.
  • Interactiefeedback — Korte tactiele signalen voor gebruikersacties, zoals met de aanwijzer over een knop bewegen, klikken of het bevestigen van een voltooide actie.

Peninvoer detecteren

Registreer u voor de gebeurtenis en controleer of het apparaattype van de PointerEntered aanwijzer een pen is:

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    // Pen detected — check for haptic support.
}

De PenDevice ophalen in de Windows App SDK

Gebruik PenDeviceInterop in een Windows App SDK-app ( een Windows App SDK interop-klasse ) om het WinRT-object PenDevice op te halen vanaf een aanwijzerpunt. PenDevice, SimpleHapticsControlleren KnownSimpleHapticsControllerWaveforms zijn WinRT-typen uit de Windows.Devices.Input en Windows.Devices.Haptics naamruimten; alleen de interop-aanroep zelf komt uit de naamruimte van Microsoft.UI.Input.Interop de Windows App SDK:

using Microsoft.UI.Input.Interop;
using Windows.Devices.Haptics;
using Windows.Devices.Input;
using Windows.Foundation.Metadata;

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    var penDevice = PenDeviceInterop.FromPointerPoint(e.GetCurrentPoint(null));

    if (penDevice == null)
    {
        return; // Pen does not support advanced features.
    }

    // SimpleHapticsController requires Windows 11. Check for API presence
    // before accessing it so the app doesn't throw on Windows 10.
    if (!ApiInformation.IsPropertyPresent(
        "Windows.Devices.Input.PenDevice", "SimpleHapticsController"))
    {
        return; // Haptic feedback requires Windows 11.
    }

    var hapticsController = penDevice.SimpleHapticsController;
    if (hapticsController == null)
    {
        return; // Pen does not support haptic feedback.
    }

    // Configure haptic feedback (see examples below).
}

Opmerking

Gebruik in plaats daarvan in UWP-apps PenDevice.GetFromPointerId . De PenDeviceInterop klasse is specifiek voor de Windows App SDK.

Inktgolfvormen

Inktgolfvormen spelen continu af terwijl de pen het scherm bereikt. De vereiste golfvormen worden gegarandeerd ondersteund door elke haptische pen.

Golfvorm Description Verplicht
Continue-inkt Standaard balpengevoel. Reserveoptie voor niet-ondersteunde golfvormen. Yes
Doorlopende penseel Penseelgereedschap No
PotloodContinu Potloodgereedschap No
MarkerContinuous Markeringsgereedschap No
ChiselMarkerContinuous Beitelmarkering/markeerstift No
GumContinuous Gummetje No
GalaxyPenContinuous Speciale inkt (veelkleurig penseel) No

Interactiegolfvormen

Interactiegolfvormen bieden korte, directe feedback voor UI-acties.

Golfvorm Description Verplicht
Klik Standaard korte klik. Reserveoplossing voor niet-ondersteunde interacties. Yes
Fout De actie is mislukt of er is een fout opgetreden No
Zweven Begon de muisaanwijzer boven een interactief element te houden No
Druk Op een interactief element gedrukt No
Vrijgeven Een interactief element uitgebracht No
Success De actie is voltooid No
BuzzContinuous Doorlopende buzzing No
RumbleContinuous Doorlopend gerommel No

Haptische feedback verzenden

Doorloop SupportedFeedback om de gewenste golfvorm te vinden en roep SendHapticFeedbackvervolgens het volgende aan:

SimpleHapticsControllerFeedback currentWaveform = null;

// Try to use BrushContinuous, fall back to InkContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
    if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.BrushContinuous)
    {
        currentWaveform = waveform;
        break;
    }
}

if (currentWaveform == null)
{
    foreach (var waveform in hapticsController.SupportedFeedback)
    {
        if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.InkContinuous)
        {
            currentWaveform = waveform;
            break;
        }
    }
}

if (currentWaveform != null)
{
    hapticsController.SendHapticFeedback(currentWaveform);
}

Haptische feedback stoppen

Stop altijd haptische feedback wanneer de aanwijzer het element verlaat. Meld u aan voor PointerExited op hetzelfde element:

private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
    hapticsController?.StopFeedback();
}

Opmerking

Sommige pennen stoppen haptiek automatisch wanneer de pen het scherm verlaat. Niet alle pennen doen dit echter, dus roep StopFeedback altijd expliciet aan.

Haptische feedback aanpassen

Sommige pennen ondersteunen aanvullende aanpassingen. Controleer de ondersteuning voordat u ze gebruikt:

Property Controleer ondersteuning met
Intensiteit IsIntensitySupported
Aantal afspelingen IsPlayCountSupported
Duur van afspelen IsPlayDurationSupported
Onderbrekingsinterval opnieuw afspelen IsReplayPauseIntervalSupported
if (hapticsController.IsIntensitySupported)
{
    hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}