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

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

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

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

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

Требования к среде выполнения

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

Преимущества DirectManipulation

Обеспечивает простую и согласованную обработку взаимодействий.

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

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

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

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

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

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

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

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

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

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

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

В нашем базовом примере, приведенном выше, при вызове SetContact происходит несколько вещей:

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

Обработка ввода с помощью клавиатуры и мыши

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

DirectManipulation и HWND

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

Вспомогательная документация