Tablets MultiTouch con MS Windows 7: Inertia (I)

Windows Técnico

Sindicación

Proximos HOLs

Loading...

En la primera entrada de esta ya dilatada serie,  Tablets MultiTouch MS Windows 7: Desarrollo de Aplicaciones, se analizaron las ventajas que presenta Windows 7 cara a la programación de un dispositivo tablet. Una de las ventajas que se presentaban era dotar a los objetos de inercia. Esta propiedad posibilita que los objetos cobren vida y sean más naturales sus movimientos ante las acciones del usuario.

Ahora podemos operar de forma táctil manejando un determinado objeto incorporado en una aplicación pudiéndolo lanzar, controlar la velocidad de lanzamiento y la propia inercia que adquiere el objeto, como puede apreciarse en la siguiente imagen.

image

Inertia

Para poder trabajar con esta propiedad debemos interactuar directamente con las librerías nativas de Windows o bien podemos hacer uso de WPF (Windows Presentation Fundation). En la entrada de hoy comentaremos el código necesario para trabajar con las librerías nativas de Windows 7, para ello utilizaremos una DLL proporcionada por Microsoft, y su código lo podemos descargar desde este link de descarga de librería. Esta  DLL “Windows7.Multitouch” hará de intermediaria entre la aplicación y las librerías nativas de Windows. En futuras entradas comentaremos como realizar esta operativa sólo con WPF.

Una vez descargado y abierto el proyecto de la DLL “Windows7.Multitouch”, nos dirigimos al código de nuestra librería,  que dispone de dos módulos relacionados con Inertia, el  “Manipulationinterop” y “ManipulationInertiaProcessor”.

image

Proyecto DLL Inertia

La presente entrada se centra en “Manipulationinterop”. Este módulo va incluir los objetos COM nativos de Windows 7 para ser utilizados desde un proyecto .NET.

La primera actuación que realiza la DLL es registrar los GUID (Globally Unique Identifier ) de los COM de Windows 7 relacionados con Touch.

internal class IIDGuid

    {

        // IID GUID strings for relevant COM interfaces.

        internal const string IManipulationEvents = "4f62c8da-9c53-4b22-93df-927a862bbb03";

        internal const string IInertiaProcessor = "18b00c6d-c5ee-41b1-90a9-9d4a929095ad";

        internal const string IManipulationProcessor = "A22AC519-8300-48a0-BEF4-F1BE8737DBA4";

    }

 

    internal class ClassIDGuid

    {

        internal const string InertiaProcessor = "abb27087-4ce0-4e58-a0cb-e24df96814be";

        internal const string ManipulationProcessor = "597D4FB0-47FD-4aff-89B9-C6CFAE8CF08E";

    }

De los objetos COM invocados en esta librería, interesa IInertiaProcessoral ser el encargado de gestionar la inercia de los objetos en Windows 7. Para añadirlo a la DLL en .Net será necesario implementar las llamadas del propio COM. Esta inclusión se realiza haciendo coincidir los métodos del objeto COM con nuestros métodos y delegando su acción a una llamada al objeto nativo COM. Esto se traduce en código de la siguiente manera: Primero se indica que el método es una importación de un objeto COM por medio de la directiva “ComImport()”, además se señala a que GUID pertenece y cuál es el tipo de interfaz, como se muestra en las siguientes líneas de código:

    [ComImport(),

    Guid(IIDGuid.IInertiaProcessor),

    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

    internal interface IInertiaProcessor : IConnectionPointContainer

 

Una vez incluido el nombre de la interfaz del objeto COM se pasa a añadir los diferentes métodos de éste, siempre incorporando la directiva “MethodImpl” para indicar a .Net la realización de la llamada a un objeto externo. Se muestra a continuación los métodos implementados para IInertiaProcessor :

 

    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

        void Reset();

       

         [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

         bool Process();

           

         [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

         bool ProcessTime([In] int timestamp);

 

         [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

         void Complete();

       

         [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

         void CompleteTime([In] int timestamp);

 

Ya solo queda añadir las propiedades del objeto COM a IInertiaProcessor”. Estas son iguales que en .Net con sus dos campos “get” y “set” pero siempre añadiendo la directiva “MethodImpl” para indicar la llamada al objeto nativo. Se muestra a continuación  una propiedad a modo de ejemplo:

 

  float InitialOriginX

        {

            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

            get;

            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

            set;

        }

 

De esta manera hemos realizado diversa llamadas a un objeto COM nativo de Windows 7 y realizado en C++, pero  para ser usado en nuestra aplicación .Net con C#.

En la siguientes entradas se analizarán métodos relacionados con la inercia de los objetos y se adaptación en aplicaciones .Net.

 

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


Enviado abr 20 2011, 02:29 por Ignacio Briones

Comentarios

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (II)
en 05-03-2011 19:31

Dando continuidad a esta serie de artículos en torno a la programación para Tablets Multitouch con MS

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (III)
en 05-09-2011 11:42

Continuando con la serie de últimos artículos publicados en Windows Técnico   dentro de la categoría

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (V)
en 05-20-2011 17:49

En este artículo, y tras la publicación de las entradas anteriores de la serie “Inertia”, se iniciará

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (V)
en 05-20-2011 18:26

En este artículo, y tras la publicación de las entradas anteriores de la serie “Inertia”, se iniciará

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (VI)
en 06-04-2011 13:13

Tras haber presentado   una serie de entradas dedicadas a valorar las aplicaciones ejemplo disponibles

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (VII)
en 06-10-2011 18:13

Con esta nueva entrada se da continuidad a la ya dilatada serie de artículos dedicados al desarrollo

Windows Técnico escrito Tablets MultiTouch con MS Windows 7: Inertia (VII)
en 06-10-2011 18:17

Con esta nueva entrada se da continuidad a la ya dilatada serie de artículos dedicados al desarrollo

Windows Técnico escrito Desarrollo de aplicaciones con MS Windows 7 Multitouch: Manejador de Gestos (I de IV)
en 07-06-2011 19:45

Tal y como queda reflejado en entradas anteriores de esta categoría, una de las ventajas que ofrece  

Añadir un comentario

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