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


Пример сенсорного жеста Windows (MTGestures)

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

В примере 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;}

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

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

Приложение мультисенсорных жестов (C#),мультисенсорное приложение жестов (C++), примерыwindows Touch