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)
- PointerPressed / MSPointerDown / WM_POINTERDOWN
- PointerMoved / MSPointerMove / WM_POINTERUPDATE
- PointerReleased / MSPointerUp / WM_POINTERUP
- PointerEntered / MSPointerHover / WM_POINTERENTER: начато состояние наведения указателя.
- PointerExited / MSPointerOut / WM_POINTERLEAVE: завершено состояние наведения указателя.
- PointerCanceled / MSPointerCancel /: потеря указателя (касание отменено подключением пера, слишком много контактов, пользователь вышел из системы...).
- PointerCaptureLost / MSLostPointerCapture / WM_POINTERCAPTURECHANGED
- PointerWheelChanged / - / WM_POINTER(H)WHEEL: состояние обычного или горизонтального колесика прокрутки изменено по крайней мере на одну ступень после последнего события.
Объекты более высокого уровня, такие как элементы пользовательского интерфейса XAML, предоставляют события жестов и манипуляций напрямую:
События жестов
- Tapped
- DoubleTapped
- RightTapped: длительное касание, равноценное щелчку правой кнопкой мыши.
- Holding / MSGestureHold: срабатывает перед высвобождением указателя.
События манипуляции
- ManipulationStarting
- ManipulationStarted
- ManipulationDelta
- ManipulationCompleted
- ManipulationInertiaStarting
События манипуляции также могут предоставлять информацию о масштабировании, повороте и прокрутке. Кроме того, они предоставляют данные инерции. Их можно настроить с помощью 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 | |
Desktop C#/WPF apps | ||
JS/HTML (Windows* Store или IE10) | HTML elements | События MSPointerXXX События MSGestureXXX (требуется объект MSGesture для переключения) |
Windows Store – C#/C++ | События TouchHitTesting | |
Windows Store - XAML | События XXXTapped | |
Windows Store – XAML | ||
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. Все права защищены.
*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.