En la categoría de posts dedicados a la programación para dispositivos tablet multitouch con Windows 7, se han presentado toda una serie de entradas relacionadas con la propiedad Inertia. En ellas se han analizado varios componentes que permiten dotar a las aplicaciones de funcionalidades asociadas con este movimiento propio de objetos característicos en las aplicaciones para dispositivos multitouch.

En la entrada de hoy se continuará valorando apartados relacionados con esta funcionalidad. Se trata de un aspecto importante, la comunicación de los eventos de inercia detectados por el sistema operativo MS Windows 7.y capturados por las aplicaciones.
Los mensajes, procedentes del sistema operativo al activarse algún elemento touch, guardan información necesaria para poder interactuar con el Tablet. La información que aportan estos mensajes es la siguiente: posición de pantalla donde se produce el evento, el identificador del mismo, el momento en el que se produce, la posibilidad de activación de algunos bits en forma de “flag” y la máscara asociada a ésta.
En las siguientes líneas de código se muestra un ejemplo de cómo extraer esta información:
private void DecodeTouch(ref TOUCHINPUT touchInput)
{
// TOUCHINFO point coordinates and contact size is in 1/100 of a pixel; convert it to pixels.
// Also convert screen to client coordinates.
if ( (touchInput.dwMask & User32.TOUCHINPUTMASKF_CONTACTAREA) != 0)
ContactSize = new Size(AdjustDpiX(touchInput.cyContact / 100), AdjustDpiY(touchInput.cyContact / 100));
Id = touchInput.dwID;
Point p = _hWndWrapper.PointToClient(new Point(touchInput.x / 100, touchInput.y / 100));
Location = new Point(AdjustDpiX(p.X), AdjustDpiY(p.Y));
Time = touchInput.dwTime;
TimeSpan ellapse = TimeSpan.FromMilliseconds(Environment.TickCount - touchInput.dwTime);
AbsoluteTime = DateTime.Now - ellapse;
Mask = touchInput.dwMask;
Flags = touchInput.dwFlags;
}
La utilidad de este código es asociarlo a un evento para ser manejado por la aplicación en función de las necesidades en cada caso. Junto a lo anterior permite monitorizar de forma instantáneas los parámetros asociados al dispositivo tablet.
De nuevo se presenta un ejemplo que ilustre cómo crear un evento de estas características:
internal TouchEventArgs(IHwndWrapper hWndWrapper, float dpiX, float dpiY, ref TOUCHINPUT touchInput)
{
_hWndWrapper = hWndWrapper;
_dpiXFactor = 96F / dpiX;
_dpiYFactor = 96F / dpiY;
DecodeTouch(ref touchInput);
}
Con esta información es posible monitorizar toda la operativa que se lleva a efecto sobre el dispositivo tablet con Ms Windows 7, haciendo uso de eventos que comunican el dispositivo a través del sistema operativo con las aplicaciones.
Finalizamos aquí esta breve entrada, pero seguiremos aportándoos más información sobre el desarrollo de aplicaciones enfocadas a dispositivos tablet multitouch con Ms Windows 7. Para acabar, recuerda que si quieres aprender mucho más sobre los secretos de los sistemas Microsoft Windows, te recomendamos leer el libro de Sergio de los Santos "Máxima Seguridad en Windows: Secretos Técnicos" , o siempre puedes suscribirte al Canal RSS de Windows Técnico para estar al día de las novedades e información técnica de interés.

Enviado
may 13 2011, 04:51
por
Ignacio Briones