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


Прямая манипуляция

ИНТЕРФЕЙСы API прямой манипуляции позволяют создавать отличные возможности сдвига, масштабирования и перетаскивания пользователей. Для этого он обрабатывает сенсорные входные данные в регионе или объекте, создает преобразования выходных данных и применяет преобразования к элементам пользовательского интерфейса. Вы можете использовать прямую манипуляцию для оптимизации скорости реагирования и уменьшения задержки с помощью обработки входных данных вне потока, необязательного тестирования входных попаданий вне потока и прогнозирования входных и выходных данных.

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

Аудитория разработчика

API прямой манипуляции предназначен для опытных разработчиков, которые знают C/C++, имеют твердое представление о объектной модели компонентов (COM) и знакомы с концепциями программирования Windows.

Требования во время выполнения

Прямая манипуляция появилась в Windows 8. Он включается как в 32-разрядные, так и 64-разрядные версии.

Почему используйте DirectManipulation

Обрабатывает взаимодействие простым и согласованным способом.

Прямая манипуляция выполняется путем предварительного объявления поведения и взаимодействий для региона или объекта. Например, веб-страница часто настраивается для сдвига и масштабирования. Во время выполнения входные данные затем связываются с этим регионом или объектом с помощью простого вызова API. С этого момента прямая манипуляция выполняет все тяжелые операции обработки входных данных, применение ограничений и личности, а также создание преобразований выходных данных.

Создание адаптивных сенсорных приложений

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

Гибкость реализации

Интерфейсы, включенные в Direct Manipulation, обеспечивают полную поддержку обработки входных данных, распознавания взаимодействия, уведомлений о отзывах и обновлениях пользовательского интерфейса. Интерфейсы также включают системные службы, такие как DirectComposition.

Основные понятия

Основная реализация прямой манипуляции состоит из представления, содержимогои взаимодействия . окна просмотра — это регион, который может получать и обрабатывать входные данные от взаимодействия с пользователем. Это также регион содержимого, которое отображается конечным пользователем. содержимое — это фактический объект, который пользователи могут видеть и что перемещает или масштабирует в ответ на взаимодействие с пользователем. Основной пользователь взаимодействия (также известный как манипуляции), поддерживаемые прямой манипуляцией, передвигаются и масштабируются. Эти взаимодействия применяют преобразование перевода или масштабирования к содержимому в порту просмотра соответственно. В одном окне можно настроить несколько портов просмотра (каждый с собственным содержимым), чтобы создать широкий интерфейс пользовательского интерфейса.

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

базовую реализацию прямого манипулирования до и после сдвига.

Во время инициализации прямого манипулирования создается экземпляр объекта DCompDirectManipulationCompipulationCompositor и связан с прямой манипуляцией. Этот объект представляет собой оболочку вокруг DirectComposition, которая является системным компостером. Объект отвечает за применение выходных преобразований и управление обновлениями визуальных элементов.

Контакт представляет точку касания, определяемую pointerId, предоставленной в сообщении WM/_POINTERDOWN. При получении сообщения WM_POINTERDOWN приложение вызывает SetContact. Приложение уведомляет прямые манипуляции о контактах, которые должны обрабатываться, и окна просмотра, которые должны реагировать на эти контакты. Ввод клавиатуры и мыши имеет специальные значения pointerId, чтобы они могли обрабатываться соответствующим образом путем прямого манипулирования.

В нашем базовом случае выше, когда SetContact вызывается несколько вещей:

  • Когда пользователь выполняет сдвига, в приложение отправляется сообщение WM/_POINTERCAPTURECHANGED, чтобы уведомить о том, что контакт был занят прямой манипуляцией.
  • Когда пользователь перемещает перемещение, окно просмотра запускает события обновления, используемые DirectComposition оболочкой для обновления визуальных элементов на экране. Чтобы пользователь сдвигал в режиме просмотра, содержимое будет легко перемещаться под контактом.
  • Когда пользователь поднимает контакт, пользователь видит содержимое продолжает перемещаться по мере перехода в анимацию инерции, постепенно уменьшая, пока не достигнет окончательного места отдыха.

Обработка ввода клавиатуры и мыши

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

DirectManipulation и HWND

Прямая манипуляция связана с HWND Win32, чтобы получать и обрабатывать входные сообщения указателя для этого окна. Так как прямая манипуляция вычисляет выходные значения, он выполняет асинхронные обратные вызовы к объектной модели компонента Direct Manipulation (COM) объектов, реализованных в приложении. Эти обратные вызовы сообщают приложению о преобразовании, которое было применено к объектам. Прямая манипуляция активируется на указанном HWND путем вызова активации.

Поддержка документации