Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Windows heeft lange tijd digitale pennen ondersteund waarmee gebruikers hun apparaten op natuurlijke, directe wijze kunnen gebruiken en hun creativiteit kunnen uitdrukken door middel van rijke schrijf- en tekenervaringen met behulp van digitale inkt.
Met Windows 11 wordt een nieuwe mogelijkheid geïntroduceerd die de digitale penervaring nog natuurlijker en aantrekkelijker maakt: Wanneer gebruikers een pen gebruiken die 'haptische feedback' ondersteunt, kunnen gebruikers hun pen op een tactile manier voelen communiceren met de gebruikersinterface (UI) van een app.
Opmerking
Wanneer u naar deze nieuwe functie verwijst, wordt 'haptisch' gebruikt in de ontwikkelaars-API's en de bijbehorende documentatie, terwijl 'tactiele' de beschrijvende naam is die aan gebruikers wordt gepresenteerd voor het instellen van voorkeuren voor feedback in de Windows-instellingen.
Haptische feedback ervaringen die worden ondersteund in Windows 11 omvatten inking feedback en interaction feedback:
- Inktfeedback simuleert het gevoel van verschillende typen schrijf- of tekenhulpmiddelen (zoals pen, markering, potlood, markeerstift, enzovoort) door doorlopende trillingen terwijl de pen in contact is met het scherm. Het Windows Ink Platform biedt standaard ondersteuning voor haptische feedback voor alle hulpmiddelen voor tekenen (in dit onderwerp wordt beschreven hoe u een aangepaste inktoplossing kunt bieden buiten de oplossing die wordt ondersteund door Windows Inkt).
- Interactiefeedback is daarentegen directe feedback op basis van belangrijke gebruikersacties, zoals het hoveren of klikken op een knop, het reageren op de voltooiing van een actie, of om de aandacht van de gebruiker te trekken.
Normaal gesproken zijn vijf stappen vereist om haptische feedback volledig te ondersteunen:
- Peninvoer detecteren.
- Bepaal of de huidige pen en het huidige apparaat haptische feedback ondersteunen en welke haptische feedbackfuncties het ondersteunt.
- Beslis over het haptische feedbacksignaal dat moet worden verzonden.
- Stuur de haptische feedback.
- De haptische feedback stoppen
Peninvoer detecteren
Als u peninvoer wilt detecteren en isoleren, moet u zich eerst registreren voor de gebeurtenis PointerEntered en vervolgens controleren of het PointerDeviceType een pen is.
De volgende code laat zien hoe u het apparaattype van de aanwijzer controleert binnen een pointerEntered-gebeurtenis. In dit voorbeeld, als de invoer niet van een pen komt, keren we gewoon terug vanuit de eventhandler. Anders controleren we de penmogelijkheden en configureren we de haptische feedback.
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
...
// If the current Pointer device is not a pen, exit.
if (e.Pointer.PointerDeviceType != PointerDeviceType.Pen)
{
return;
}
...
}
Ondersteuning voor haptische feedback bepalen
Niet alle pennen en digitale pennen ondersteunen haptische feedback, en de pennen die dat wel doen, ondersteunen niet noodzakelijkerwijs alle haptische feedbackfuncties die in dit onderwerp worden beschreven. Daarom is het belangrijk om programmatisch te bevestigen welke functies worden ondersteund door de actieve pen.
In een vervolg van het voorgaande voorbeeld laten we zien hoe we kunnen controleren of de actieve pen haptische feedback ondersteunt.
We proberen eerst een PenDevice-object op te halen uit de huidige PointerId. Als een PenDevice niet kan worden verkregen, keren we gewoon terug uit de gebeurtenis-handler.
Als er een PenDevice is verkregen, testen we of deze de eigenschap SimpleHapticsController ondersteunt. Als dat niet het geval is, keren we terug van de event-handler.
// Attempt to retrieve the PenDevice from the current PointerId.
penDevice = PenDevice.GetFromPointerId(e.Pointer.PointerId);
// If a PenDevice cannot be retrieved based on the PointerId, it does not support
// advanced pen features, such as haptic feedback.
if (penDevice == null)
{
return;
}
// Check to see if the current PenDevice supports haptic feedback by seeing if it
// has a SimpleHapticsController.
hapticsController = penDevice.SimpleHapticsController;
if (hapticsController == null)
{
return;
}
De SimpleHapticsController die in het vorige voorbeeld is opgehaald, wordt gebruikt in volgende voorbeelden om haptische mogelijkheden op te vragen en haptische feedback te verzenden/stoppen.
Opmerking
Als u apps bouwt met de Windows App SDK, u kunt PenDevice interop (PenDeviceInterop.FromPointerPoint(PointerPoint)) gebruiken voor toegang tot het systeem PenDevice.
private void InputObserver_PointerEntered(PointerInputObserver sender, PointerEventArgs args)
{
var penDevice = PenDeviceInterop.PenDeviceFromPointerPoint(args.CurrentPoint);
}
In de volgende secties worden de feedbackfuncties beschreven die haptische pennen moeten ondersteunen, evenals de functies die optioneel zijn. Een vereist haptisch feedbacktype kan doorgaans worden gebruikt als een terugval in plaats van een optionele functie.
Inktgolfvormen
Inktgolfvormen spelen continu af terwijl de pen in contact is met het scherm en probeer het gevoel van verschillende schrijf- of tekenhulpmiddelen te simuleren.
| Eigenschap | Beschrijving | Vereist/optioneel |
|---|---|---|
| InkContinous-golfvorm | Simuleert het gevoel van inkt met een fysieke balpen. Dit is de standaardvalval wanneer een inktgolfvorm niet wordt ondersteund door een haptische pen. | Verplicht |
| BrushContinuous-golfvorm | Continu haptisch signaal wanneer de gebruiker penseel selecteert als inkthulpmiddel. | Optioneel |
| ChiselMarkerContinuous-golfvorm | Continu haptisch signaal wanneer de gebruiker chiselmarkering/markeerstift selecteert als inkthulpmiddel. | Optioneel |
| Gum doorlopende golfvorm | Doorlopend haptisch signaal wanneer de gebruiker de gum selecteert als inkttool. | Optioneel |
| GalaxyContinuous-golfvorm (de HID-documentatie en implementatiehandleiding verwijst naar deze golfvorm als SparkleContinuous) |
Doorlopende haptische feedback voor speciale inkttechnieken, zoals een borstel met meerdere kleuren. | Optioneel |
| Doorlopende markergolfvorm | Continu haptisch signaal wanneer de gebruiker markering selecteert als handschrifthulpmiddel. | Optioneel |
| PotloodContinuous-golfvorm | Continu haptisch signaal wanneer de gebruiker potlood selecteert als inkthulpmiddel. | Optioneel |
Interactiegolfvormen
Interactiegolfvormen zijn meestal kort (uitzonderingen die worden vermeld in de volgende tabel), directe feedbackgolfvormen die op aanvraag worden gegenereerd om belangrijke acties te bevestigen, zoals het aanwijzen of klikken op een knop, reageren op de voltooiing van een actie of om de aandacht van de gebruiker te trekken.
| Eigenschap | Beschrijving | Vereist/optioneel |
|---|---|---|
| Klikgolfvorm | Een korte "klik" feedback. Dit is de standaardterugval wanneer een interactiegolfvorm die door de app is geselecteerd, niet wordt ondersteund door een haptische pen. | Verplicht |
| Foutgolfvorm | Een sterk signaal om de gebruiker te waarschuwen dat een actie is mislukt of dat er een fout is opgetreden. | Optioneel |
| Golfvorm aanwijzen | Geeft aan dat de gebruiker over een interactief gebruikersinterface-element beweegt. | Optioneel |
| Druk op de golfvorm | Geeft aan wanneer een gebruiker op een interactief UI-element in een incrementele actie drukt (zie Release). | Optioneel |
| Golfsignaal vrijgeven | Geeft aan wanneer een gebruiker een interactief UI-element uitgeeft in een incrementele actie (zie Druk). | Optioneel |
| Succesgolfvorm | Sterk signaal om de gebruiker te waarschuwen dat een actie is geslaagd. | Optioneel |
| "BuzzContinuous golfvorm" | Continue bruisende sensatie. | Optioneel |
| RumbleContinuous-golfvorm | Continue gerommel gevoel. | Optioneel |
Haptische feedbackaanpassingen
Sommige haptische pennen kunnen de volgende aanpassingen ondersteunen.
| Eigenschap | Beschrijving | Vereist/optioneel |
|---|---|---|
| Intensiteit | Hiermee stelt u de intensiteit van het haptische signaal in. | Optioneel |
| Aantal afspelen | Herhaalt een haptisch signaal een opgegeven aantal keren. | Optioneel |
| Onderbrekingsinterval opnieuw afspelen | Hiermee stelt u de tijd in tussen elk herhaald afspelen van het haptische signaal. | Optioneel |
| Duur van afspelen | Hiermee stelt u het tijdsinterval in dat een haptisch signaal wordt afgespeeld. | Optioneel |
Controleren op ondersteuning voor aangepaste instellingen
Gebruik de volgende eigenschappen van de SimpleHapticsController om te controleren op Intensiteit, Afspeelfrequentie, Herhalingspauze-interval en Afspeelduur:
Haptische feedback verzenden en stoppen van inkt
Gebruik de SendHapticFeedback-methode van het Object SimpleHapticsController om inktgolfvormen door te geven aan de pen van de gebruiker. Deze methode ondersteunt het doorgeven van een golfvorm of beide een golfvorm met een aangepaste intensiteitswaarde (zie Haptische feedback aanpassen).
Roep SendHapticFeedback aan en geef een inktgolfvorm door om de pen zo te configureren dat deze golfvorm wordt afgespeeld zodra de tip van de pen ergens op het scherm aanraakt. De golfvorm blijft afspelen totdat de pen wordt opgeheven of StopFeedback wordt aangeroepen, afhankelijk van wat zich het eerst voordoet. We raden u aan dit te doen in de PointerEntered event handler voor het element waarin u haptische feedback wilt laten afspelen. Een app met een aangepaste inkt-implementatie zou dit bijvoorbeeld uitvoeren in de methode 'PointerEntered' van het inktcanvas.
Als u de gewenste inktgolfvorm wilt ophalen, moet u de SupportedFeedback-verzameling van de SimpleHapticsController herhalen, zodat deze wordt ondersteund door de actieve pen.
Als het niet wordt ondersteund, kunt u ervoor kiezen om helemaal niets af te spelen of terug te vallen op de InkContinuous-golfvorm , omdat dat gegarandeerd wordt ondersteund.
In het volgende voorbeeld proberen we de golfvorm BrushContinuous te verzenden (maar terugvallen naar InkContinuous als BrushContinuous niet wordt ondersteund).
SimpleHapticsControllerFeedback currentWaveform;
// Attempt to set the currentWaveform to BrushContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.BrushContinuous)
{
currentWaveform = waveform;
}
}
// If currentWaveform is null, it was not in the SupportedFeedback collection, so instead set
// the waveform to InkContinuous.
if (currentWaveform == null)
{
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.InkContinuous)
{
currentWaveform = waveform;
}
}
}
// Send the currentWaveform
hapticsController.SendHapticFeedback(currentWaveform);
Het is belangrijk dat u ook haptische feedback stopt wanneer de bijbehorende aanwijzer het element verlaat dat u hebt geregistreerd voor haptische feedback. Anders zal de signaalvorm blijven proberen af te spelen op de actieve pen.
Opmerking
Sommige pennen kunnen desgewenst haptiek op zichzelf stoppen wanneer de pen het bereik van het scherm verlaat. Het is echter niet vereist voor alle pennen om dit te doen, dus toepassingen moeten altijd expliciet haptische feedback stoppen zoals hier wordt beschreven.
Als u haptische feedback op een element wilt stoppen, registreert u zich voor de pointerExited-gebeurtenis op hetzelfde element als u de pointerEntered-handler hebt geregistreerd die het haptische signaal heeft verzonden. In die afgesloten gebeurtenishandler roept u StopFeedback aan , zoals hier wordt weergegeven.
hapticsController.StopFeedback();
Interactie-feedback verzenden en stoppen
Het verzenden van feedback over interactie is vergelijkbaar met het verzenden van inktfeedback.
Gebruik de SendHapticFeedback-methode van het Object SimpleHapticsController om interactiegolfvormen door te geven aan de pen van de gebruiker. Deze methode ondersteunt het doorgeven van een golfvorm of beide een golfvorm met een aangepaste intensiteitswaarde (zie Haptische feedback aanpassen).
Roep SendHapticFeedback aan en geef een inktgolfvorm door om de pen zo te configureren dat deze golfvorm onmiddellijk wordt afgespeeld op basis van enige interactie in uw app (in plaats van wanneer de tip van de pen het scherm aanraakt voor inktfeedback).
Wanneer u een van de niet-continue interactiegolfvormen gebruikt, is het niet nodig om een bijbehorende StopFeedback-aanroep te maken. U moet StopFeedback nog steeds aanroepen voor de continue interactiegolfvormen.
Opmerking
Het verzenden van een interactiegolfvorm wanneer een inktgolfvorm wordt afgespeeld, onderbreekt de inktgolfvorm tijdelijk. De inktgolfvorm wordt hervat wanneer de interactiegolfvorm stopt.
Als u de gewenste interactiegolfvorm wilt ophalen, moet u de SupportedFeedback-verzameling van de SimpleHapticsController herhalen, zodat deze wordt ondersteund door de actieve pen.
Als het niet wordt ondersteund, kunt u ervoor kiezen om helemaal niets af te spelen of terug te vallen op de klikgolfvorm , omdat dat gegarandeerd wordt ondersteund.
In het volgende voorbeeld proberen we de Error golfvorm te verzenden (maar vallen we terug op Click als Error niet wordt ondersteund).
SimpleHapticsControllerFeedback currentWaveform;
// Attempt to set the currentWaveform to BrushContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Error)
{
currentWaveform = waveform;
}
}
// If currentWaveform is null, it was not in the SupportedFeedback collection, so instead set
// the waveform to Click.
if (currentWaveform == null)
{
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click)
{
currentWaveform = waveform;
}
}
}
// Send the currentWaveform.
hapticsController.SendHapticFeedback(currentWaveform);
Haptische feedback aanpassen
Er zijn drie manieren om haptische feedback aan te passen. De eerste wordt ondersteund door zowel inkt- als interactiefeedback, terwijl de tweede en derde alleen door interactiefeedback worden ondersteund.
Pas de intensiteit van de feedback aan ten opzichte van de instelling voor maximale systeemintensiteit. Hiervoor moet u eerst controleren of simpleHapticsController ondersteuning biedt voor het instellen van de intensiteit en vervolgens SendHapticFeedback aanroept met de gewenste
Intensitywaarde.if (hapticsController.IsIntensitySupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click) { double intensity = 0.75; hapticsController.SendHapticFeedback(waveform, intensity); } } }Herhaal het haptische signaal een opgegeven aantal keren. Hiervoor moet u eerst controleren of simpleHapticsController ondersteuning biedt voor het instellen van de intensiteit en vervolgens SendHapticFeedbackForPlayCount aanroept met de gewenste tellingswaarde. U kunt ook zowel de intensiteit als het onderbrekingsinterval voor opnieuw afspelen instellen.
Opmerking
Als SimpleHapticsController het instellen van de intensiteit of het onderbrekingsinterval voor opnieuw afspelen niet ondersteunt, worden de opgegeven waarden genegeerd.
if (hapticsController.IsPlayCountSupported && hapticsController.IsIntensitySupported && hapticsController.IsReplayPauseIntervalSupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click) { double intensity = 0.75; int playCount = 3; System.TimeSpan pauseDuration = new System.TimeSpan(1000000); hapticsController.SendHapticFeedbackForPlayCount(currentWaveform, intensity, playCount, pauseDuration); } } }Stel de duur van het haptische signaal in. Hiervoor moet u eerst controleren of simpleHapticsController ondersteuning biedt voor het instellen van de afspeelduur en vervolgens SendHapticFeedbackForDuration aanroept met de gewenste tijdsintervalwaarde. U kunt ook de intensiteit instellen.
Opmerking
Als SimpleHapticsController het instellen van de intensiteit niet ondersteunt, wordt de opgegeven waarde genegeerd.
if (hapticsController.IsPlayDurationSupported && hapticsController.IsIntensitySupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.RumbleContinuous) { double intensity = 0.75; System.TimeSpan playDuration = new System.TimeSpan(5000000); hapticsController.SendHapticFeedbackForDuration(currentWaveform, intensity, playDuration); } } }
Voorbeelden
Zie het voorbeeld van pen haptiek voor werkende voorbeelden van de volgende functionaliteit:
- Verkrijg een SimpleHapticsController via peninvoer: Volg het proces van PointerId naar PenDevice en vervolgens naar SimpleHapticsController (dit vereist zowel een haptisch-geschikte pen als een apparaat dat deze pen ondersteunt).
- Controleer de mogelijkheden van pen haptiek: Een SimpleHapticsController toont eigenschappen voor penhardwaremogelijkheden, waaronder IsIntensitySupported, IsPlayCountSupported, SupportedFeedback, enzovoort.
- Haptische feedback starten en stoppen: gebruik de methoden SendHapticFeedback en StopFeedback op de juiste manier.
- Trigger haptische feedback: Feedback voor zowel inkttekeningfeedback als interactiefeedback.