Exemplo de gesto de toque do Windows (MTGestures)

Esta seção descreve o exemplo de Gesto de Toque do Windows.

O exemplo gesto de toque do Windows demonstra como usar mensagens de gesto para traduzir, girar e dimensionar uma caixa renderizada pela GDI (Graphics Device Interface) manipulando a mensagem WM_GESTURE . A captura de tela a seguir mostra a aparência do exemplo quando ele está em execução.

captura de tela mostrando o exemplo de gesto de toque do Windows quando ele está em execução, com um retângulo branco girado e com estrutura preta na tela

Para este exemplo, as mensagens de gesto são passadas para um mecanismo de gestos, que, em seguida, chama métodos em objetos de desenho para traduzir, girar e dimensionar um objeto que tem métodos para lidar com esses comandos. Para ajudar a mostrar como o exemplo funciona, considere as etapas para usar o comando de toque de dois dedos para habilitar ou desabilitar linhas diagonais na caixa renderizada. Um usuário executa o gesto de toque de dois dedos, que gera uma mensagem que é manipulada pelo programa. Quando a mensagem for manipulada, ela alternará um booliano para renderizar diagonais no objeto de desenho e o objeto renderizará as linhas diagonais.

O código a seguir mostra como as mensagens de gesto são passadas para o mecanismo de gestos do método WndProc.

    case WM_GESTURE:
        // The gesture-processing code is implemented in the CGestureEngine
        // class.
        return g_cGestureEngine.WndProc(hWnd,wParam,lParam);
        break;

O código a seguir mostra como o mecanismo de gestos manipula o comando de toque de dois dedos.

// Two-finger tap command
void CMyGestureEngine::ProcessTwoFingerTap(void)
{
    if(_pcRect)
    {
        _pcRect->ToggleDrawDiagonals();
    }
}

O código a seguir mostra como o objeto de desenho alterna suas diagonais.

void ToggleDrawDiagonals(void){_bDrawDiagonals = !_bDrawDiagonals;}

O código a seguir mostra como o objeto renderiza linhas diagonais em seu método de desenho.

    if(_bDrawDiagonals)
    {
        // draw diagonals
        MoveToEx(hdc,ptRect[0].x,ptRect[0].y,NULL);
        LineTo(hdc,ptRect[2].x,ptRect[2].y);
        MoveToEx(hdc,ptRect[1].x,ptRect[1].y,NULL);
        LineTo(hdc,ptRect[3].x,ptRect[3].y);
    }

Aplicativo gestos de vários toques (C#), aplicativo gestos de vários toques (C++), exemplos do Windows Touch