Поделиться через


Пример жеста Windows Touch (MTGestures)

В этом разделе описывается пример жеста Windows Touch.

Пример Windows Touch Gesture демонстрирует, как использовать сообщения жестов для перемещения, поворота и масштабирования прямоугольника, отображаемого графическим интерфейсом устройства (GDI), путем обработки сообщения WM_GESTURE. При запуске пример выглядит следующим образом на снимке экрана.

снимок экрана, демонстрирующий образец жеста касания Windows в процессе выполнения, с повернутым, черным контуром белым прямоугольником на экране

В этом примере сообщения жестов передаются в обработчик жестов, который затем вызывает методы рисования объектов для преобразования, поворота и масштабирования объекта, имеющего методы обработки этих команд. Чтобы показать, как работает пример, рассмотрим шаги по использованию команды касания двумя пальцами, чтобы включить или отключить диагональные линии в отображаемом окне. Пользователь выполняет жест касания двумя пальцами, который создает сообщение, которое обрабатывается программой. Когда сообщение обрабатывается, переключается булевский флаг для отображения диагоналей в объекте рисования, и затем объект показывает диагональные линии.

В следующем коде показано, как сообщения жестов передаются обработчику жестов из метода WndProc.

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

В следующем коде показано, как обработчик жестов обрабатывает команду двумя пальцами касания.

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

В следующем коде показано, как объект рисования переключает его диагонали.

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

В следующем коде показано, как объект отображает диагональные линии в методе рисования.

    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);
    }

Приложение для работы с жестами Multi-touch (C#), Приложение для работы с жестами Multi-touch (C++), Образцы Windows Touch