Обработка сенсорного ввода в приложениях Windows 8

Даже самые серьезные разработчики, пишущие на ассемблере и знающие наизусть все клавиатурные шоткарты, не смогут оспорить то, что все больше устройств и их пользователей поддерживают сенсорный ввод (touch screen), поэтому обработка сенсорных методов взаимодействия в приложениях становится все более важной. Стандартные элементы управления и шаблоны Windows 8 хорошо работают с сенсорным вводом — если вы пользуетесь только ими, вам нет необходимости разбираться в технических подробностях. Если же вы имеете дело с классическими приложениями или хотите разработать собственные элементы управления (например, для игры), то должны знать, как правильно обрабатывать сенсорный ввод.Приложения, которые работали под управлением Windows 7, продолжат работать со следующими особенностями: Если ваше приложение обрабатывает только события мыши, то события касания будут сведены к ним (не будет только события наведения указателя мыши). Если ваше приложение использует события касания Windows 7 (API-интерфейсы WM_TOUCH/WM_GESTURE), то эти API по-прежнему доступны. В обоих случаях можно подумать над доработкой приложения с использованием новых API ввода Windows 8, поскольку они помогут обеспечить однородность с другими приложениями и в целом повысить удобство для пользователей.Если ваше приложение изначально не было предназначено для обработки сенсорного ввода, вам также может потребоваться доработать пользовательский интерфейс, чтобы сделать его более пригодным для сенсорного управления: увеличить размер элементов управления, убрать лишние элементы и т. п.Разработка для сенсорного управления без сенсорного устройства Если у вас нет сенсорных устройств, можно опробовать ваше классическое приложение или приложение для Магазина Windows в имитаторе Windows 8, который входит в состав Visual Studio 2012 на платформе Windows 8.Эта программа находится в папке C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Simulator\11.0\Microsoft.Windows.Simulator.exe.В нем можно запускать любое приложение, как в обычном сеансе работы: ee3cd8c694f3e44185f09f8f6aeb9118.jpg

Приложения для Магазина Windows 8 также можно запускать напрямую в имитаторе из Visual Studio:

8be4dc1684afddf76d4a4218914b19fa.jpg

Сенсорное взаимодействие в Windows 8 Чтобы ваше приложение было удобным для пользователей, используемые в нем жесты должны совпадать со стандартными жестами в ОС: 3b9b54baecd47ba1e375d7a730d6fb83.jpg

Принцип ввода указателя Обработка в приложениях сразу нескольких методов ввода может сильно все усложнить. К счастью, в Windows 8 корпорация Microsoft внедрила объединенный ввод с помощью элемента Pointer (Указатель): b4cf2726330a0a100f6ef2ff05c78686.jpg

Метод ввода Pointer объединяет методы ввода мышью, пером и касаниями и является абстракцией этих методов ввода, что дает возможность обрабатывать все методы, написав код всего один раз.События указателя — самое простое, с чем вы столкнетесь. Вы можете получить их для любого элемента пользовательского интерфейса Windows 8 XAML, а также для ICoreWindow. Со стороны HTML5 эти элементы доступны, но их имена несколько отличаются. Они имеют префикс MS: MSPointerDown, MSPointerMove, MSPointerUp.

Эквивалентами событий указателя в Win32 являются сообщения WM_POINTERXXX, которые можно получать в функции обратного вызова окна Win32. По умолчанию в приложениях Win32 сообщения WM_POINTERXXX не включают сообщения мыши. Чтобы получать действительно объединенные сообщения указателя, нужно сначала вызвать EnableMouseInPointer (true).

События манипуляции также могут предоставлять информацию о масштабировании, повороте и прокрутке. Кроме того, они предоставляют данные инерции. Их можно настроить с помощью ManipulationMode для переключения инерции. Можно разрешить только определенные виды взаимодействия/добавить ограничения (например, направляющие для преобразования в движение по осям X/Y).

В приложениях для Магазина Windows Windows 8, написанных на HTML5/JavaScript, можно использовать метод WinRT GestureRecognizer для доступа к этим событиям.

Обзор API-интерфейсов Windows 8 f6e195ca262f586114e4be8034ac4ad6.jpgЕсли объект, с которым вы работаете, не переключает события жестов, можно отправить события указателя интерфейсу GestureRecognizer. GestureRecognizer переключит выбранные события жестов и манипуляций, а также события перетаскивания и поперечной прокрутки.

InteractionContext в Win32 является эквивалентом GestureRecognizer в API Windows Runtime. Объект Interaction Context переключает INTERACTION_CONTEXT_OUTPUT_CALLBACK, связанный с другими жестами и манипуляциями.

Кроме того, в сенсорное приложение можно встроить интерфейс InkRecognizer. Он позволяет распознавать рукописный ввод в классических приложениях и в приложениях для Магазина Windows 8.Также можно внедрять события касания из классических приложений с помощью API Touch Injection API.

Полную версию статьи можно прочитать на сайте Intel Developer Zone.

© Habrahabr.ru