Windows gestos táctiles en el ejemplo de C# (MTGesturesCS)

En esta sección se describe el ejemplo de gestos táctiles de Windows en C#.

En este ejemplo Windows gestos táctiles se muestra cómo usar mensajes de gestos para traducir, girar y escalar un cuadro representado por la Interfaz de dispositivo gráfico (GDI) controlando el mensaje de WM_GESTURE. En la captura de pantalla siguiente se muestra cómo se ve el ejemplo cuando se ejecuta.

screen shot showing the windows touch gestures in c sharp sample when it is running, with a black-outlined white rectangle centered on the screen

En este ejemplo, los mensajes de gestos se pasan a un motor de gestos que, a continuación, llama a métodos en objetos de dibujo para traducir, girar y escalar un objeto que tiene métodos para controlar estos comandos. Para que esto sea posible en C#, se crea un formulario especial, TouchableForm, para controlar los mensajes de gestos. A continuación, este formulario usa los mensajes para realizar cambios en un objeto de dibujo, DrawingObject, para cambiar cómo se representa el objeto en el método Paint.

Para mostrar cómo funciona el ejemplo, tenga en cuenta los pasos para usar el comando pan para traducir el cuadro representado. Un usuario realiza el gesto de movimiento panorámico que genera un mensaje de WM_GESTURE con el identificador de gesto GID_PAN. TouchableForm controla estos mensajes y actualiza la posición del objeto de dibujo, y el objeto se representará a sí mismo traducido.

En el código siguiente se muestra cómo el controlador de gestos recupera los parámetros del mensaje de WM_GESTURE y, a continuación, realiza la traducción en el cuadro representado a través de una llamada al método de movimiento del objeto de dibujo.

            switch (gi.dwID)
            {
                case GID_BEGIN:
                case GID_END:
                    break;
               (...)
                case GID_PAN:
                    switch (gi.dwFlags)
                    {
                        case GF_BEGIN:
                            _ptFirst.X = gi.ptsLocation.x;
                            _ptFirst.Y = gi.ptsLocation.y;
                            _ptFirst = PointToClient(_ptFirst);
                            break;

                        default:
                            // We read the second point of this gesture. It is a
                            // middle point between fingers in this new position
                            _ptSecond.X = gi.ptsLocation.x;
                            _ptSecond.Y = gi.ptsLocation.y;
                            _ptSecond = PointToClient(_ptSecond);

                            // We apply move operation of the object
                            _dwo.Move(_ptSecond.X - _ptFirst.X, _ptSecond.Y - _ptFirst.Y);

                            Invalidate();

                            // We have to copy second point into first one to
                            // prepare for the next step of this gesture.
                            _ptFirst = _ptSecond;
                            break;
                    }
                    break;

En el código siguiente se muestra cómo el método de movimiento del objeto de dibujo actualiza las variables de posición interna.

        public void Move(int deltaX,int deltaY)
        {
            _ptCenter.X += deltaX;
            _ptCenter.Y += deltaY;
        }

En el código siguiente se muestra cómo se usa la posición en el método de pintura del objeto de dibujo.

public void Paint(Graphics graphics)
        {
(...)
            for (int j = 0; j < 5; j++)
            {
                int idx = arrPts[j].X;
                int idy = arrPts[j].Y;

                // rotation
                arrPts[j].X = (int)(idx * dCos + idy * dSin);
                arrPts[j].Y = (int)(idy * dCos - idx * dSin);

                // translation
                arrPts[j].X += _ptCenter.X;
                arrPts[j].Y += _ptCenter.Y;
            }
(...)
        }

Los gestos de movimiento panorámico harán que el cuadro dibujado se represente traducido.

Aplicación de gestos multitáctil (C#),Aplicación de gestos multitáctil (C++), Windows muestras táctiles