Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos. Anexo II

Windows Técnico

Sindicación

Proximos HOLs

Loading...

 

clip_image002[6]

En esta entrada se centrará la atención en la clase “GestureEventArgs” que es utilizada como argumento en su definición por los eventos de la clase “GestureHandler”. Adicionalmente se mencionarán los atributos “LastBeginEvent” y “LastEvent” que son instancias de la clase inicialmente mencionada.

 

GestureEventArgs

 

clip_image004[6]

Estructura de “GestureEventsArgs”

 

 

GestureEventArgs”deriva de la clase “EventArgs” que contiene un conjunto de propiedades muy interesantes que se procederán a describir:

 

       

  • Uint GestureId:
    Un entero sin signo que identifica un gesto realizado sobre la pantalla táctil.

  • Point Location:
    Coordenadas donde se ubica el gesto sobre la pantalla.

  • Bool IsBegin:
    Valor booleano que indica si el evento actual es el primer evento de un gesto.

  • Bool IsInertia:
    Indica si el gesto transmitido al objeto ha dado lugar a inercia, de esa forma se haría uso de la velocidad de desplazamiento, para mover el objeto sin intervención del usuario de la aplicación.

  • Double RotateAngle:
    El ángulo de giro usado por el evento de rotación.

  • Point Center:
    Coordenadas del centro del gesto.

  • Double ZoomFactor:
    La escala de la imagen, que será utilizado por el evento Zoom para agrandar o reducir la imagen.

  • Size PanTranslation:
    El desplazamiento relativo el cual será utilizado por el evento Pan para aplicar el efecto “panning” al objeto dentro de la aplicación. La clase “Size” se encuentra en el espacio de nombres “System.Drawing”, por lo cual la clase “GestureEventsArgs” debe referenciarla.

  • Size PanVelocity:
    La velocidad del gesto “Pan” que puede ser usado por una inercia personalizada.

  • LastBeginEvent:
    El primer evento en la secuencia de eventos desencadenado por el último gesto.

  • LastEvent :
    El último evento en la secuencia de eventos desencadenado.

Una vez definidos y localizados los atributos de la clase, se continuará describiendo las dos grandes funciones de “GestureEventArgs”: la función constructor y la función de decodificación de gestos.

             

Constructor:

//Aquí se almacena la información del gesto

internal GestureEventArgs(GestureHandler handler, ref GESTUREINFO gestureInfo)

{

         _dwFlags = gestureInfo.dwFlags;

         GestureId = gestureInfo.dwID;

         GestureArguments = gestureInfo.ullArguments;

           

         //Obtiene el último evento para el manejador

         LastEvent = handler.LastEvent;

 

         //Obtiene el primer evento lanzado por el último gesto realizado.

         LastBeginEvent = handler.LastBeginEvent;

 

         DecodeGesture(handler.HWndWrapper, ref gestureInfo);

 

         // Cuando se realice un nuevo gesto, se borran los valores

 // de LastBeginEvent y LastEvent

 

         if (IsBegin)

         {

              LastBeginEvent = null;

              LastEvent = null;

         }

  }

 

Decodificador de gestos:

  private void DecodeGesture(IHwndWrapper hWndWrapper, ref GESTUREINFO gestureInfo)

  {

            // Localización del gesto sobre la pantalla.

            Location = hWndWrapper.PointToClient(

       new Point(gestureInfo.ptsLocation.x, gestureInfo.ptsLocation.y));

           

            Center = Location;

               

            // Según el identificador de gestos se llenan los campos con los valores corespondientes

            switch (GestureId)

            {

                case User32.GID_ROTATE:

       

                    // Se realiza el evento de rotación, utilizando la función específica de User32

 

                    ushort lastArguments = (ushort)(IsBegin ? 0 : LastEvent.GestureArguments);

 

RotateAngle = User32.GID_ROTATE_ANGLE_FROM_ARGUMENT(

  (ushort)(gestureInfo.ullArguments - lastArguments));

 

                    break;

 

 

                case User32.GID_ZOOM:

 

    // Se guarda el valor de la nueva escala a la que se va a dibujar la figura

 

                    Point first = IsBegin ? Location : LastBeginEvent.Location;

                    Center = new Point((Location.X + first.X) / 2, (Location.Y + first.Y) / 2);

                    ZoomFactor = IsBegin ? 1 :

(double)gestureInfo.ullArguments / LastEvent.GestureArguments;

                   

 

 

                    break;

 

                case User32.GID_PAN:

 

                   

                    // Se establece la velocidad de movimiento del objeto al hacer el efecto Panning

 

                    PanTranslation = IsBegin ?

     new Size(0, 0) :

new Size(Location.X - LastEvent.Location.X,

 Location.Y - LastEvent.Location.Y);

                    int panVelocity = User32.HiDWord((long)(gestureInfo.ullArguments));

                    PanVelocity = new Size(User32.LoWord(panVelocity), User32.HiWord(panVelocity));

                   

                    break;

            }               

        }

 

       

}

 

En la próxima entrada, y para finalizar la serie de forma apropiada, se va a mostrar todo lo descrito en la misma y en pleno funcionamiento para tener de esta manera una visión completa del trabajo del proyecto “mtGesture” proporcionado por Microsoft, como vía de introducción al mundo del desarrollo de aplicaciones para dispositivos tablet con MS Windows 7 Multitouch.

 

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.

 

image

 

-------------------------------------------------------------------------------------------------------------------------------------------

Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (I de IV)
Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (II de IV)

Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (III de IV)

Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (IV de IV)

Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (IV de IV) Anexo I

Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (IV de IV) Anexo II

-------------------------------------------------------------------------------------------------------------------------------------------

 


Enviado jul 27 2011, 02:13 por Jhonattan Fiestas

Comentarios

Juan Pablo escrito re: Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos. Anexo II
en 07-27-2011 14:55

Buenos Días...

Tengo un par de dudas que me gustaria aclarar, asi que acudo a tu blog ya que manejas el tema, he realizado la misma pregunta en otras partes y no hay quien me la haya podido solucionar.

Lo que pasa es que me encuentro desarrollando una aplicación didáctica en visual basic 2008, y he querido incorporarle realidad aumentada y el efecto cover flow que se manejan en los iphones.

Buscando me encuentro con la librería artoolkit, pero me interesa mas aun la slartoolkit (para silverlight), la primera pregunta es… ¿se puede integrar el desarrollo que yo haga en silverlight a mi aplicación windows form?, y si es asi… ¿como lo realizo?.

La otra consulta es con respecto a lo del coverflow, tambien buscando en internet encontre el FluidKit para WPF, y ahondando mas en el tema encontre un componente de pago llamado IndexCard 3D para el Visual Basic, mi pregunta es… ¿existe algun componente que actue directamente sobre Visual Basic 2008 para generar este efecto?

Muchisimas Gracias por la atención prestada.

Windows Técnico escrito Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos. Anexo III . Final
en 07-30-2011 20:51

Con la publicación de esta entrada se va a dar por finalizada la serie “ Desarrollo de aplicaciones con

Añadir un comentario

(requerido)  
(opcional)
(requerido)  
Recordarme
If you can't read this number refresh your screen
Enter the numbers above: