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


Обзор архитектуры

Этот обзор архитектуры предоставляет контекст для API Windows Touch для планшетов и сенсорных технологий и объясняет, как он вписывается в более крупную архитектуру Windows 7.

Сообщения для ввода с помощью касания и жестов в Windows

Функции обмена сообщениями для Windows Touch включены путем прослушивания и интерпретации сообщений во время выполнения. На следующем рисунке показано, как сообщения создаются из оборудования и отправляются в приложения Windows 7.

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

В левом столбце иллюстрации сенсорное оборудование получает входные данные от пользователя. Затем драйвер взаимодействует между оборудованием и ОС. Затем ОС создает WM_TOUCH или WM_GESTURE сообщение, которое затем отправляется в HWND приложения. Затем приложение обновляет пользовательский интерфейс, учитывая сведения, инкапсулированные в сообщении.

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

Для поддержки прежних версий Windows интерпретирует WM_GESTURE сообщения, если они пузырятся, а затем отправит или POST соответствующие сообщения, которые сопоставляются с жестом. Чтобы избежать нарушения устаревшей поддержки, убедитесь, что вы пересылаете сообщения WM_GESTURE с помощью DefWindowProc. Дополнительные сведения о поддержке прежних версий см. в разделе Обзор жестов Windows Touch.

Манипуляции и инерция

Программисты Windows Touch должны иметь возможность интерпретировать жесты из нескольких источников таким образом, чтобы это было понятно для жеста. Корпорация Майкрософт предоставляет API манипуляций для выполнения этих вычислений. Манипуляции — это по сути жесты со значениями, связанными с ними, которые описывают весь жест. После подключения входных данных к обработчику манипуляций можно получить сведения, относящиеся к действиям, которые пользователь делает на объекте. На следующем рисунке показан один из способов использования манипуляций.

иллюстрация, показывающая сообщения касания Windows, передаваемые обработчику манипуляций объекта, который обрабатывает события с помощью интерфейса -imanipulationevents

В левом верхнем углу иллюстрации пользователь коснулся экрана, который создает сенсорные сообщения. Эти сообщения содержат координату x и координату y, которая используется для определения объекта, который находится в фокусе. Объект в фокусе содержит обработчик манипуляций. Затем в сообщении WM_TOUCH с флагом TOUCHEVENTF_UP выбран объект в фокусе пользователя, на обработчик манипуляций ссылается, а сообщение отправляется обработчику манипуляций. Последующие WM_TOUCH сообщения, связанные с этим контактом, отправляются обработчику манипуляций до тех пор, пока не будет получено сообщение WM_TOUCH с флагом TOUCHEVENTF_UP и ссылка на выбранный объект не будет удалена. В правом нижнем углу иллюстрации приемник событий манипуляции, реализующий интерфейс _IManipulationEvents, используется для обработки событий манипуляции, которые создаются при создании сенсорных сообщений. Приемник событий может выполнять обновления интерфейса на основе событий манипуляции во время их возникновения.

В приложениях Windows Touch обычно используют простые физические законы, чтобы объекты плавно останавливались, а не резко, когда их перестают касаться. Корпорация Майкрософт предоставляет API инерции для выполнения вычислений для этих простых физических элементов, чтобы приложение вел себя так же, как и другие приложения. Это также экономит усилия, необходимые для создания надежных функциональных возможностей физики. На следующем рисунке показано, как использовать инерцию.

иллюстрация, демонстрирующая сообщения касания Windows, передаваемые в интерфейс инерциапроцессора объекта, который инициирует события через интерфейс -imanipulationevents

Обратите внимание на сходство между инерцией и манипуляцией. Единственное различие между двумя заключается в том, что в случае инерции интерпретированные сообщения передаются обработчику инерции, а не обработчику манипуляций, а обработчик инерции вызывает события. В левом верхнем углу иллюстрации в сообщении WM_TOUCH с флагом TOUCHEVENTF_UP сенсорные сообщения используются для идентификации объекта в фокусе, содержащего обработчик инерции и обработчик манипуляций. Последующие WM_TOUCH сообщения отправляются обработчику манипуляций, а обработчик манипуляций выполняет обновления пользовательского интерфейса приложения. После завершения манипуляции значения скорости из манипуляции используются для настройки обработчика инерции. Как показано в среднем столбце, метод Process или ProcessTime вызывается в интерфейсе IInertiaProcessor с помощью таймера или другого цикла в отдельном потоке, пока вызовы не указывают, что обработчик завершит обработку. Хотя эти вызовы выполняются, возникают события манипуляции, которые обрабатываются приемником событий манипуляции на основе интерфейса _IManipulationEvents. В правом нижнем углу иллюстрации этот приемник событий затем выполняет обновления пользовательского интерфейса приложения на основе событий манипуляции, когда они происходят через обработчики событий в приемнике событий.

Руководство по программированию