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

Cкачать статью

Скачать Handling touch input in Windows* 8 Applications [Eng., PDF 745KB]

Поскольку все больше устройств поддерживает сенсорный ввод, обработка сенсорных методов взаимодействия в приложениях становится все более важной.

Стандартные элементы управления и шаблоны Windows* 8 идеально обрабатывают сенсорный ввод,поэтому, если вы пользуетесь только ими, вам нет необходимости разбираться в технических подробностях.

Если же вы работаете с классическим приложением или хотите разработать собственные элементы управления (например, для игры), то вы должны знать, как правильно обрабатывать сенсорный ввод.

При этом приложения, которые работали под управлением Windows 7, продолжат работать:

  • Если ваше приложение обрабатывает только события мыши, то события касания будут сведены к ним (не будет только события наведения указателя мыши).
  • Если ваше приложение использует события касания Windows 7 (API-интерфейсы WM_TOUCH/WM_GESTURE), то все в порядке, эти API по-прежнему доступны.

В обоих случаях можно подумать над доработкой приложения с использованием новых API ввода Windows 8, поскольку они помогут обеспечить однородность с другими приложениями и в целом повысить удобство для пользователей.

Если ваше приложение изначально не было предназначено для обработки сенсорного ввода, вам также может потребоваться доработать пользовательский интерфейс, чтобы сделать его более пригодным для сенсорного управления: увеличить размер элементов управления, убрать лишние элементы и т. п. Советы по проектированию интерфейсов для сенсорного управления см. здесь: Designing for Ultrabook™ Devices and Touch-enabled Desktop Applications

Разработка для сенсорного управления без сенсорного устройства

Если у вас нет сенсорных устройств, можно опробовать ваше классическое приложение или приложение для Магазина Windows в имитаторе Windows 8, который входит в состав Visual Studio* 2012 на платформе Windows 8.

Эта программа находится в папке C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Simulator\11.0\Microsoft.Windows.Simulator.exe.

В нем можно запускать любое приложение, как в обычном сеансе работы:

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

Затем в правой части окна имитатора можно выбрать режим взаимодействия по умолчанию. По умолчанию используется мышь, но нас интересуют три других режима: одиночное касание, сведение для масштабирования и режимы вращения.

Для режимов двойного касания используется щелчок левой кнопкой мыши и колесико мыши для масштабирования или поворота.

Сенсорное взаимодействие в Windows 8

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

Источник: //build/ 2011 - APP-391T

Принцип ввода указателя

Общие сведения

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

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

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

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

События указателя (XAML / JS / Win32)

Объекты более высокого уровня, такие как элементы пользовательского интерфейса XAML, предоставляют события жестов и манипуляций напрямую:

События жестов

  • Tapped
  • DoubleTapped
  • RightTapped: длительное касание, равноценное щелчку правой кнопкой мыши.
  • Holding / MSGestureHold: срабатывает перед высвобождением указателя.

События манипуляции

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

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

Если приложение также должно работать в IE10 (т. е. без WinJS), можно использовать объект MSGesture. Он будет переключать следующие события, равноценные событиям манипуляции: MSGestureStart, MSGestureEnd, MSInertiaStart и MSManipulationStateChanged, а также следующим событиям жестов: MSGestureTap, MSGestureHold.

Примечание. События манипуляции также доступны для классических приложений C#/WPF 4.x в том виде, как они работали под управлением Windows 7, без ManipulationMode.

Обзор API-интерфейсов Windows 8

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

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

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

Также можно внедрять события касания из классических приложений с помощью API Touch Injection API.

Сводка по способам интеграции возможностей сенсорного управления в приложения

Вот краткая сводка по способам обработки сенсорного ввода в зависимости от объектов и типов приложений, с которыми вы работаете:

Application Type Object Method

Win32*

Window

WM_POINTERXXX

WM_TOUCHHITTESTING 

Desktop C#/WPF apps

UIElement

OnManipulationXXX(…) и OnTouchXXX(…)

JS/HTML (Windows* Store или IE10)

HTML elements

События MSPointerXXX

События MSGestureXXX (требуется объект MSGesture для переключения)

Windows Store – C#/C++

ICoreWindow

PointerXXX

События TouchHitTesting

Windows Store - XAML

UIElement

PointerXXX

ManipulationXXX

События XXXTapped

Windows Store – XAML

Control

OnPointerXXX(…)

OnManipulationXXX(…)

OnXXXTapped(…)

Windows Store (XAML & JS/HTML)

ListView, FlipView, ScrollViewer и пр.

Seamless

Образцы кода

Win32* touch/Interaction Context sample – Intel

Windows* 8 gestures C#/JS sample – MSDN

DirectX* Touch input C++ sample – MSDN

 

InkRecognizer JS sample – MSDN

 

Intel, эмблема Intel и Ultrabook являются товарными знаками корпорации Intel в США и в других странах.

© Intel Corporation, 2012. Все права защищены.

*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.

Pour de plus amples informations sur les optimisations de compilation, consultez notre Avertissement concernant les optimisations.