Función de gestos para Windows con gestos automáticos
La lógica WAG está estrechamente acoplada con el manejo de DefWindowProc() para proporcionar respuestas de gestos predeterminadas que se pueden usar para cualquier ventana. Cuando está habilitado, WAG responderá automáticamente a los gestos GID_PAN y GID_SCROLL, creará una instancia de motor de física y enviará datos de posicionamiento relevantes a la aplicación a través de mensajes de notificación. Además, WAG puede realizar interrupciones de gestos al monitorear la cola de entrada mientras se realiza un gesto de desplazamiento o desplazamiento, y proporcionar transiciones de estado animadas apropiadas.
La configuración predeterminada de WAG es ignorar los mensajes de gestos, por lo que todas las ventanas que deseen utilizar el comportamiento WAG primero deben habilitar la compatibilidad con gestos. Para habilitar la compatibilidad con gestos, una aplicación debe llamar a TKSetWindowAutoGesture para cada ventana requerida, pasando los ajustes de configuración requeridos. Como se mencionó anteriormente, el propósito de WAG es simplificar los escenarios de soporte de gestos más comunes. Por lo tanto, para utilizar una ventana controlada por WAG, debe crear estilos WS_VSCROLL y/o VS_HSCROLL en ejes que puedan manipularse mediante gestos táctiles. Además, la aplicación debe administrar adecuadamente las barras de desplazamiento y mantener el rango, minimizar/maximizar y el tamaño de página según sea necesario. Esto permite a WAG calcular el tamaño del área de datos que muestra la ventana.
WAG tiene algunas opciones que vale la pena mencionar:
WAG puede manejar los gestos GID_PAN y GID_SCROLL, pero puedes desactivar cualquiera de ellos si lo deseas. Al igual que el motor de física, WAG también admite la configuración del ancho y alto de los elementos. Esta información se utiliza no sólo para establecer el punto de ajuste, sino también para ampliar el valor del rango de desplazamiento desde el recuento de elementos hasta el recuento de píxeles. Por ejemplo, supongamos que una lista contiene 10 elementos, la barra de desplazamiento varía de 0 a 9 y cada elemento ocupa 20 píxeles verticalmente para mostrar su contenido, entonces la altura del elemento debe establecerse en 20. WAG multiplica este rango de desplazamiento (10) por la altura del píxel (20) para determinar el rango completo de píxeles de los datos (200 píxeles). WAG admite un modo especial utilizado por la función WM_xSCROLL al generar un valor WM_xSCROLL para la aplicación. WAG admite un modo especial que impulsa el movimiento de la ventana generando mensajes WM_xSCROLL a la aplicación en lugar de los mensajes de animación del propietario más comunes. Este modo es útil si está utilizando una aplicación heredada y desea admitir gestos táctiles con la menor modificación de código posible. Este modo se habilita estableciendo el valor nOwnerAnimateMessage (parte de los datos de inicialización de TKSetWindowAutoGesture()) en 0 en lugar del valor habitual de WM_USER x. En este modo, algunas funciones estarán limitadas; por ejemplo, no se admite la operación píxel por píxel, solo se admiten controles de operación elemento por elemento. Además, en este modo no se puede exceder el rango de desplazamiento, por lo que se ignoran los valores extendidos. Esta opción no es adecuada para desplazarse en ambos ejes al mismo tiempo, ya que cada eje debe moverse de forma independiente. Al ampliar la descripción, se arrastra el área de visualización una distancia fuera del rango de datos, expresada como porcentaje del tamaño de visualización. Se debe tener cuidado al habilitar las extensiones, ya que esto permitirá al usuario arrastrar el área de visualización más allá de los límites de desplazamiento y exponer un área de la pantalla que muchas aplicaciones existentes no pueden manejar adecuadamente. Asegúrese de que la aplicación borre correctamente la pantalla cuando muestre un espacio que no sea el lado superior o izquierdo del rango de datos. Normalmente, las aplicaciones configuran el nOwnerAnimateMessage de WAG con un valor en el rango de WM_USER a WM_APP. El WAG utiliza este valor en un mensaje enviado a la aplicación cada vez que ésta necesita volver a dibujar su área de visualización.
WAG agrega automáticamente la información del gesto GID_PAN y la envía de vuelta a la aplicación con una frecuencia máxima de 24 veces por segundo (usando GESTURE_ANIMATION_MESSAGE_INSTALLATION_VALUATION_TYPES en gestophysics.h en el kit para desarrolladores de Windows Mobile 6.5). GESTURE_ANIMATION_FRAME_DELAY_MS Duración del temporizador (del kit de herramientas para desarrolladores de Windows Mobile 6.5), solo envía información de animación a la aplicación. Lo mismo se aplica a las animaciones de desplazamiento, WAG usa el mismo temporizador para consultar su motor de física con una frecuencia máxima de 24 veces por segundo.
La opción de mensaje de estado de WAG es particularmente útil cuando el control admite el enfoque o su apariencia cambia sin interacción del usuario (por ejemplo, a través de actualizaciones asincrónicas). Los mensajes de estado informan al control que el usuario está interactuando con la interfaz táctil. Dichos mensajes se pueden utilizar como desencadenantes para pausar la ejecución de actualizaciones que podrían cambiar la apariencia o el contenido de un control, o consumir recursos innecesariamente debido a las animaciones de la pantalla. Generar efectos de animación en pantalla completa puede consumir muchos recursos, por lo que se debe suspender todo procesamiento en segundo plano innecesario y concentrar los recursos en brindar respuestas fluidas y oportunas a los usuarios. Una vez completada una interacción táctil, los mensajes de estado se pueden utilizar para activar actualizaciones de datos cuando sea necesario.