Habilitar el gesto de mantener presionado tablet en aplicaciones MFC

En este artículo se proporciona información sobre cómo habilitar el gesto de mantener presionado en una aplicación Microsoft Foundation Class (MFC).

Versión original del producto:   Visual Studio 2010 y versiones posteriores
Número de KB original:   2846829

Resumen

En un Tablet PC que ejecuta Windows, el sistema enviará un mensaje de WM_TABLET_QUERYSYSTEMGESTURESTATUS a las ventanas activas que podrían recibir la entrada del usuario. En una aplicación MFC, todas las ventanas se derivan normalmente de la CWnd clase y esta clase base controla este mensaje en su OnTabletQuerySystemGestureStatus método. Este método llama a la función CWnd::GetGestureStatusvirtual , que, a continuación, devolverá TABLET_DISABLE_PRESSANDHOLD, por motivos de rendimiento. Si la aplicación quiere habilitar el gesto de mantener presionado, debe invalidar este método en la clase de ventana derivada y devolver algo que no incluya la TABLET_DISABLE_PRESSANDHOLD marca.

Comportamiento predeterminado: deshabilitar el gesto de mantener presionado

Para habilitar el concepto de clic con el botón derecho que normalmente significa mostrar el menú contextual, y viene en forma de WM_RBUTTONDOWN, WM_RBUTTONUPy WM_CONTEXTMENU mensajes y ISG_HOLDENTER eventos ISG_RIGHTTAP , el gesto de presionar y mantener presionado debe estar habilitado para esa ventana. Para detectar este gesto, por necesidad se introduce algún retraso para distinguir entre una simple pulsación (tratada como un clic izquierdo) y una pulsación y espera (clic con el botón derecho). Por lo tanto, los eventos de clic izquierdo tardarán más tiempo en generarse y la aplicación parecerá menos dinámica. Por este motivo, el comportamiento predeterminado es deshabilitar el gesto de mantener presionado.

Habilitar el gesto de presionar y mantener la tableta

Si la aplicación MFC necesita este gesto para implementar el control de clics con el botón derecho, debe invalidar la función virtual GetGestureStatus para cualquier clase de ventana derivada que necesite implementar un controlador de clic con el botón derecho. Supongamos que es una clase de vista denominada CMyView definida en MyView.h e implementada en MyView.cpp. En MyView.h, agregue lo siguiente:

virtual ULONG GetGestureStatus(CPoint ptTouch);

En MyView.cpp, agregue lo siguiente:

ULONG CMyView::GetGestureStatus(CPoint /*ptTouch*/)
{
    return 0;
}

El valor 0 devuelto podría reemplazarse por una combinación de otras marcas, como se describe en la documentación de WM_TABLET_QUERYSYSTEMGESTURESTATUS , pero si desea habilitar la pulsación y la suspensión, no incluya la TABLET_DISABLE_PRESSANDHOLD marca.