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


Объекты sInk и tInk

Чтобы упростить поддержку рукописного ввода в приложениях, существует два объекта, оба из которых могут быть внедрены и поддерживаются любым контейнером OLE. Они создаются путем вызова метода Ink.ClipboardCopy (Rectangle, InkClipboardFormats, InkClipboardModes) или метода Ink.ClipboardCopy (Strokes, InkClipboardFormats, InkClipboardModes) и являются следующими:

  • Объект text ink (tInk). Это объект OLE, представляющий рукописный ввод, который должен формировать слова. Объект tInk позволяет преобразовать рукописные рукописные фрагменты в текст в виде текста, возвращаемого распознавателем, или выбора, взятого из списка вариантов распознавания. Цвет и размер рукописного фрагмента можно задать программным способом и на основе атрибутов текста вокруг объекта . Объект tInk должен содержать одно слово. Объект tInk — это небольшой, упрощенный объект, который может выполнять простые операции, такие как отрисовка (при использовании дескриптора контекста устройства (HDC) и RECT) и сохранение себя (при использовании потока). Использование объекта tInk обеспечивает простое взаимодействие с пользователем при работе в приложении, которое использует входные данные как рукописного ввода, так и текста.
  • Эскиз объекта рукописного ввода (sInk). Это объект OLE, представляющий рукописный ввод, который не должен формировать слова. Объект sInk интерпретируется как рисунок. Объект sInk также полезен для представления нескольких слов.

Эти объекты можно использовать для взаимодействия между приложениями путем размещения их в слоте объектов OLE в буфере обмена или путем внедрения в формат RTF.

Объекты tInk и sInk можно использовать следующими способами:

  • Объекты tInk и sInk поддерживаются в Microsoft Word 2002. Пользователи могут вставлять рукописные фрагменты в документ Word с помощью панелей ввода текста для записи и рисования, предоставленных в Word 2002 г. Этот рукописный ввод внедряется в файл Word в виде объекта OLE с идентификатором CLSID объекта sInk или tInk.
  • Элемент управления InkEdit для планшетного компьютера использует объект tInk. Элемент управления InkEdit является подклассом стандартного элемента управления RichTextBox . Рукописный ввод вставляется в rtf-поток элемента управления InkEdit в виде объекта tInk.
  • Когда приложение перемещает выбранный объект Ink в буфер обмена, слот буфера обмена объекта OLE содержит объект OLE tInk или sInk.

Например, приложение может распознавать рукописный ввод и помечать любой объект Ink как объект tInk. Затем, если выбрать слово рукописным вводом и скопировать и вставить его в Word, варианты этого слова будут показаны в Word 2002.

Примечание

Поддержка буфера обмена платформы планшетного пк автоматически выбирает флаг Расширенный метафайл (EMF) при добавлении объекта sInk или tInk в буфер обмена в качестве объекта OLE. Сам объект хранится в буфере обмена в слотах источника внедрения и дескриптора объекта.

 

Другой пример: с помощью объекта sInk можно нарисовать рукописный набросок в приложении, скопировать и вставить его в Word 2002 г., а затем изменить его с помощью панели ввода планшетного пк в Word.

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

  • Изменения в коде для поиска и замены. Вместо того, чтобы пропускать внедренные объекты в поиске, эти объекты должны быть допрошены на предмет типа. Если это объект tInk, необходимо создать экземпляр и запросить соответствующий текст.
  • Изменения в поведении выбора. Выбор объектов tInk никогда не должен отображаться с маркерами изменения размера. Они должны быть выбраны так же, как и текст в документе. Код выделения для объектов должен определять, является ли тип tInk, и отображать выделение соответствующим образом.
  • Использование свойств окружения. Свойства окружения, такие как размер шрифта, цвет и полужирное форматирование, должны передаваться в объект tInk. Применение этих свойств изменяет ширину рукописного фрагмента, поэтому обновление размера требуется путем вызова метода GetInkExtent или метода IOleObject::GetExtent .
  • Переопределите обработку метода IOleObject::D oVerb по умолчанию. Это позволяет преобразовать в текст, чтобы передать в распознаватель пакет объектов TInk, который затем может разбить слова на сегменты распознавания.

Дополнительные сведения о разбиение слов на сегменты распознавания см. в разделе Сегменты распознавания.