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


Работа с классом RealTimeStylus

Класс RealTimeStylus является частью программных интерфейсов (API) StylusInput. В следующих разделах описаны ключевые элементы класса RealTimeStylus и API StylusInput.

Создание экземпляра класса RealTimeStylus

При создании объекта RealTimeStylus вы можете присоединить его к дескрипторе окна или к элементу управления . Присоединение объекта RealTimeStylus к дескрипторе окна требует дополнительных разрешений. Дополнительные сведения об этих разрешениях см. в разделе Вопросы частичного доверия для API StylusInput.

Примечание

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

 

При использовании конструктора по умолчанию создается объект RealTimeStylus , который может принимать входные данные только из другого объекта RealTimeStylus . Дополнительные сведения о соединении двух объектов RealTimeStylus см. в разделе Каскадная модель RealTimeStylus.

Объект RealTimeStylus реализует интерфейс IDisposable .

Расширение класса RealTimeStylus

Чтобы разрешить подключаемым модулям взаимодействовать с потоком данных из пера планшета, объект RealTimeStylus поддерживает две коллекции подключаемых модулей, доступные с помощью методов GetStylusSyncPlugin и GetStylusAsyncPlugin в C++, а также свойств SyncPluginCollection и AsyncPluginCollection в управляемом коде. Подключаемый модуль можно добавить, вызвав метод AddStylusSyncPlugin или Метод AddStylusAsyncPlugin коллекции в соответствующем свойстве. Дополнительные сведения о создании и использовании подключаемых модулей см. в разделе Подключаемые модули и класс RealTimeStylus. Сведения о создании синхронного или асинхронного подключаемого модуля для конкретной задачи см. в разделах Вопросы потоков для API StylusInput и Рекомендации по производительности для API StylusInput.

Синхронные подключаемые модули должны реализовывать интерфейс IStylusSyncPlugin , а а асинхронные подключаемые модули должны реализовывать интерфейс IStylusAsyncPlugin . Каждый подключаемый модуль имеет свойство IStylusSyncPlugin.DataInterest или IStylusAsyncPlugin.DataInterest . Объект RealTimeStylus вызывает только методы уведомления подключаемого модуля для методов, на которые подписан подключаемый модуль. Дополнительные сведения о методах уведомлений см. в разделе Данные подключаемого модуля и класс RealTimeStylus.

Объект RealTimeStylus реализует интерфейс IStylusAsyncPlugin . Единственный способ создать экземпляр объекта RealTimeStylus , который принимает входные данные из другого объекта RealTimeStylus , — использовать конструктор по умолчанию и реализовать каскадную модель RealTimeStylus . Дополнительные сведения о соединении двух объектов RealTimeStylus см. в разделе Каскадная модель RealTimeStylus.

Объект RealTimeStylus имеет две внутренние очереди, которые содержат данные пера планшета: входную и выходную очередь. Данные пера преобразуются в экземпляры классов в пространстве имен Microsoft.StylusInput.PluginData . В следующем списке описывается, как объект RealTimeStylus обрабатывает данные пера планшета.

  1. Объект RealTimeStylus проверяет наличие подключаемых объектов данных сначала во входной очереди, а затем из потока данных пера планшета.
  2. Объект RealTimeStylus отправляет один объект данных подключаемого модуля объектам в синхронной коллекции подключаемых модулей. Каждый синхронный подключаемый модуль может добавлять данные во входную или выходную очередь.
  3. После отправки объекта данных подключаемого модуля всем членам синхронной коллекции подключаемых модулей объект данных подключаемого модуля помещается в очередь вывода объекта RealTimeStylus .
  4. Затем объект RealTimeStylus проверяет наличие следующего объекта данных подключаемого модуля для обработки.
  5. В то время как выходная очередь объекта RealTimeStylus содержит данные, объект RealTimeStylus отправляет один объект данных подключаемого модуля из выходной очереди в объекты в своей асинхронной коллекции подключаемых модулей. Каждый асинхронный подключаемый модуль может добавлять данные во входную или выходную очередь, но так как асинхронные подключаемые модули выполняются в потоке пользовательского интерфейса, данные добавляются в очередь относительно текущих данных пера, обрабатываемых объектом RealTimeStylus , а не относительно данных, обрабатываемых асинхронным подключаемым модулем.

На следующей схеме показан поток данных пера планшета через объект RealTimeStylus и его коллекции подключаемых модулей.

Иллюстрация, показывающая поток данных пера планшетного пк

На этой схеме круги с буквами "A" и "B" представляют данные пера планшета, которые уже были добавлены в очередь вывода объекта RealTimeStylus и еще не отправлены в асинхронную коллекцию подключаемых модулей. Круг с буквой "C" представляет данные пера планшета, которые в настоящее время обрабатывает объект RealTimeStylus . Он отправляется в синхронную коллекцию подключаемых модулей и помещается в очередь вывода. Пустой круг представляет позицию в очереди вывода, в которую добавляются будущие данные пера планшета.

Дополнительные сведения о том, как конкретные данные добавляются в очередь и обрабатываются, см. в разделе Подключаемые данные и класс RealTimeStylus.

Ниже приведен минимальный сценарий использования объекта RealTimeStylus в форме, которая собирает рукописный ввод.

  1. Создайте форму, реализующую интерфейс IStylusAsyncPlugin .
  2. Создайте объект RealTimeStylus , присоединенный к элементу управления в форме.
  3. Задайте интерес для уведомлений StylusDown, Packets и StylusUp в свойстве IStylusAsyncPlugin.DataInterest формы.
  4. В методах StylusDown, Packets и StylusUp формы добавьте код для обработки уведомлений пера вниз, пакетов и пера вверх, которые отправляются из объекта RealTimeStylus формы.

Пример такого приложения см. в разделе Пример коллекции Ink RealTimeStylus.

Работа с объектами планшета

Каждый включенный объект RealTimeStylus хранит список уникальных идентификаторов для объектов Tablet , с которыми он может взаимодействовать. Объект RealTimeStylus предоставляет два метода для преобразования между уникальным идентификатором и объектом Tablet : методы GetTabletContextIdFromTablet и GetTabletFromTabletContextId .

Объект TabletPropertyDescription (в управляемом коде) содержит свойство PacketPropertyId и структуру TabletPropertyMetrics , которая описывает диапазон, разрешение и единицы свойства для конкретного объекта Tablet . Метод GetDesiredPacketDescription объекта RealTimeStylus возвращает массив глобальных уникальных идентификаторов (GUID) для свойств пакета, которые объект RealTimeStylus перенаправляет в свои подключаемые модули при наличии этих свойств пакета. Чтобы изменить набор свойств пакета, который объект RealTimeStylus передает своим подключаемым модулям, вызовите метод SetDesiredPacketDescription объекта RealTimeStylus. Метод GetTabletPropertyDescriptionCollection (в управляемом коде) объекта RealTimeStylus принимает уникальный идентификатор планшета и возвращает коллекцию объектов TabletPropertyDescription . Эти свойства пакета представляют подмножество свойств, поддерживаемых планшетом, которые возвращаются методом GetDesiredPacketDescription .

Список идентификаторов GUID стандартного свойства пакета см. в разделе Класс PacketPropertyGuids Constants .

Особые рекомендации

В следующем списке описаны другие моменты, которые следует учитывать при использовании объекта RealTimeStylus с объектом Tablet .

  • Метод SetDesiredPacketDescription можно вызывать только во время отключения объекта Tablet . Объект RealTimeStylus может изменять список требуемых свойств пакета; Поэтому вызовите метод GetDesiredPacketDescription после вызова метода SetDesiredPacketDescription , чтобы определить, какие свойства пакета объект RealTimeStylus может пересылать в свои подключаемые модули. Планшет гарантированно поддерживает только значения X, Y и PacketStatus для Свойства PacketProperty. Таким образом, в структуре подключаемого модуля может потребоваться учитываться получение меньшего количества свойств пакета, чем требуется.
  • Метод GetTabletPropertyDescriptionCollection (для управляемого кода) можно вызывать только при включенном объекте RealTimeStylus . Так как уведомление можно отправить в асинхронные подключаемые модули после отключения объекта RealTimeStylus , может потребоваться кэшировать сведения для каждого объекта Tablet . Метод GetTabletPropertyDescriptionCollection возвращает список требуемых свойств пакета, поддерживаемых указанным планшетом.
  • Если объект RealTimeStylus включен, каждый подключаемый модуль получает вызов метода RealTimeStylusEnabled . Объект RealTimeStylusEnabledData , переданный в уведомлении, содержит коллекцию идентификаторов контекста для доступных планшетов на момент включения объекта RealTimeStylus .
  • Когда планшет, который может использовать объект RealTimeStylus , добавляется на планшетный компьютер или удаляется с него при включенном объекте RealTimeStylus , объект RealTimeStylus уведомляет подключаемые модули о добавлении или удалении объекта Tablet . Дополнительные сведения см. в разделе Данные подключаемого модуля и класс RealTimeStylus.

Работа с ручками для планшетов

Объект RealTimeStylus передает сведения о перо планшета в подключаемые модули в нескольких методах уведомления. Сведения о пере планшета представлены объектом Stylus , который получается с помощью метода GetStyluses . Этот объект представляет собой перо планшета во время сбора данных. Так как подключаемые модули получают данные пера планшета как часть потока данных пера планшета, подключаемые модули должны использовать сведения в объекте Stylus вместо проверки текущего состояния конкретного пера планшета с помощью класса Cursor . Сведения о том, как данные пера планшета и кнопки пера планшета передаются в подключаемые модули, см. в разделе Данные подключаемого модуля и класс RealTimeStylus.

Чтобы получить массив объектов Stylus, с которыми столкнулся объект RealTimeStylus с момента последнего включения, используйте метод GetStyluses объекта RealTimeStylus.

Microsoft.Ink.Tablet

Microsoft.StylusInput.RealTimeStylus

Каскадная модель RealTimeStylus

Вопросы частичного доверия для API StylusInput

Данные подключаемого модуля и класс RealTimeStylus

Рекомендации по потоковой работе с API StylusInput