Основные сведения об архитектуре
В этом обзоре архитектуры представлен контекст для WINDOWS Touch API для планшетов и сенсорных технологий, а также объясняется, как он вписывается в более широкую архитектуру Windows 7.
Сообщения для сенсорного ввода и жестов Windows
Функции обмена сообщениями для Windows Touch включаются путем прослушивания и интерпретации сообщений во время выполнения. На следующем рисунке показано, как сообщения создаются с оборудования и отправляются в приложения в 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 манипуляции для выполнения этих вычислений. По сути, манипуляции — это жесты со связанными с ними значениями, которые описывают весь жест. После подключения входных данных к обработчику манипуляций можно получить сведения о действиях, которые пользователь выполняет с объектом. На следующем рисунке показан один из способов использования манипуляций.
В левом верхнем углу иллюстрации пользователь коснулся экрана, что создает сенсорные сообщения. Эти сообщения содержат координаты X и Y, которые используются для определения объекта, который находится в фокусе. Объект в фокусе содержит обработчик манипуляций. Затем в сообщении WM_TOUCH с флагом TOUCHEVENTF_UP выбирается объект в фокусе пользователя, создается ссылка на обработчик манипуляций, а сообщение отправляется обработчику манипуляций. Последующие WM_TOUCH сообщения, связанные с этим контактом, отправляются обработчику манипуляций, пока не будет получено WM_TOUCH сообщение с флагом TOUCHEVENTF_UP и разыменовка выбранного объекта. В нижнем правом разделе иллюстрации приемник событий манипуляции, реализующий интерфейс _IManipulationEvents , используется для обработки событий манипуляции, которые возникают при создании сенсорных сообщений. Приемник событий может выполнять обновления интерфейса на основе событий манипуляции во время их возникновения.
В приложениях Windows Touch обычно используется простая физика, чтобы объекты плавно прекращались, а не резко прекращались, когда их больше не касались. Корпорация Майкрософт предоставляет API инерции для выполнения вычислений для этих простых физических элементов, чтобы ваше приложение вел себя аналогично другим приложениям. Это также экономит усилия, необходимые для создания надежных физических функций. На следующем рисунке показано, как можно использовать инерцию.
Обратите внимание на сходство между инерцией и манипуляцией. Единственное различие между ними заключается в том, что в случае инерции интерпретируемые сообщения передаются обработчику инерции, а не обработчику манипуляции, а обработчик инерции вызывает события. В левом верхнем углу рисунка на WM_TOUCH сообщение с флагом TOUCHEVENTF_UP сенсорные сообщения используются для идентификации объекта в фокусе, содержащего обработчик инерции и обработчик манипуляций. Последующие WM_TOUCH сообщения отправляются обработчику манипуляций, а обработчик операций выполняет обновления пользовательского интерфейса приложения. После завершения манипуляции значения скорости из манипуляции используются для настройки процессора инерции. Как показано в среднем столбце, метод Process или ProcessTime вызывается в интерфейсе IInertiaProcessor с помощью таймера или другого цикла в отдельном потоке, пока вызовы не указывают, что обработка процессора завершена. При выполнении этих вызовов создаются события манипуляции, которые обрабатываются приемником событий манипуляции на основе интерфейса _IManipulationEvents . В нижнем правом разделе рисунка этот приемник событий затем выполняет обновления пользовательского интерфейса приложения на основе событий манипуляции, когда они происходят через обработчики событий в приемнике событий.
Связанные темы