Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Obtenga información sobre cómo usar comentarios hápticos de dispositivos de lápiz para proporcionar interacciones más naturales y táctiles en la aplicación de SDK de Aplicaciones para Windows.
Windows 11 introdujo comentarios hápticos para lápices digitales, lo que permite a los usuarios sentir su lápiz interactuando con la interfaz de usuario de la aplicación. Al referirse a esta función, háptico se usa en las API para desarrolladores y en la documentación, mientras que táctil es el nombre visible para el usuario que se muestra en Configuración de Windows.
APIs clave
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (SDK de Aplicaciones para Windows)
Tipos de comentarios hápticos
Hay dos tipos de comentarios hápticos disponibles:
- Respuesta háptica de entrada manuscrita — Simula la sensación de herramientas de escritura o dibujo (bolígrafo, rotulador, lápiz, marcador fluorescente) mediante vibraciones continuas mientras el lápiz toca la pantalla.
- Comentarios de interacción : señales táctiles cortas para acciones del usuario, como mantener el puntero sobre un botón, hacer clic o confirmar una acción completada.
Detección de la entrada del lápiz
Regístrese para el PointerEntered evento y compruebe si el tipo de dispositivo de puntero es un lápiz:
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
{
return;
}
// Pen detected — check for haptic support.
}
Obtener el PenDevice en el SDK de Aplicaciones para Windows
En una aplicación del SDK de aplicaciones de Windows, use PenDeviceInterop —una clase de interoperabilidad del SDK de aplicaciones de Windows— para obtener el objeto WinRT PenDevice a partir de un punto del puntero.
PenDevice, SimpleHapticsController y KnownSimpleHapticsControllerWaveforms son tipos WinRT de los espacios de nombres Windows.Devices.Input y Windows.Devices.Haptics; solo la propia llamada de interop procede del espacio de nombres Microsoft.UI.Input.Interop del SDK de aplicaciones de Windows:
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).
}
Nota:
En las aplicaciones para UWP, use PenDevice.GetFromPointerId en su lugar. La PenDeviceInterop clase es específica de la SDK de Aplicaciones para Windows.
Formas de onda de digitalización de trazos
Las formas de onda de la entrada de lápiz se muestran continuamente mientras el lápiz está en contacto con la pantalla. Se garantiza que las formas de onda necesarias sean compatibles con cualquier lápiz háptico.
| Forma de onda | Description | Obligatorio |
|---|---|---|
| InkContinuous | Sensación de bolígrafo por defecto. Alternativa para formas de onda no compatibles. | Sí |
| PincelContinuo | Herramienta de pincel | No |
| LápizContinuo | Herramienta de lápiz | No |
| IndicadorContinuo | Herramienta marcador | No |
| ChiselMarkerContinuo | Marcador de chisel /resaltador | No |
| BorradorContinuo | Herramienta de borrador | No |
| GalaxyPenContinuous | Tinta especial (pincel multicolor) | No |
Formas de onda de interacción
Las formas de onda de interacción proporcionan comentarios cortos y directos para las acciones de la interfaz de usuario.
| Forma de onda | Description | Obligatorio |
|---|---|---|
| Click | Clic corto predeterminado. Alternativa para interacciones no admitidas. | Sí |
| Error | La acción falló o se produjo un error | No |
| Pasar el ratón por encima | Se empezó a pasar el puntero por encima de un elemento interactivo | No |
| Presione | Se pulsó un elemento interactivo | No |
| Release | Publicado un elemento interactivo | No |
| Success | Acción completada correctamente | No |
| BuzzContinuous | Zumbido continuo | No |
| RumbleContinuous | Retumbar continuo | No |
Enviar comentarios hápticos
Recorra SupportedFeedback para encontrar la forma de onda deseada y, a continuación, llame a SendHapticFeedback:
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);
}
Desactivar respuesta háptica
Detenga siempre los comentarios hápticos cuando el puntero salga del elemento. Regístrese para PointerExited en el mismo elemento:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Nota:
Algunos lápices detienen automáticamente la respuesta háptica cuando el lápiz se aleja de la pantalla. Sin embargo, no todos los lápices lo hacen, por lo que siempre llaman StopFeedback explícitamente.
Personalización de comentarios hápticos
Algunos lápices admiten personalizaciones adicionales. Compruebe el soporte técnico antes de usarlos:
| Propiedad | Comprueba el soporte con |
|---|---|
| Intensidad | IsIntensitySupported |
| Número de reproducciones | IsPlayCountSupported |
| Duración de la reproducción | IsPlayDurationSupported |
| Intervalo de pausa de reproducción | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}