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


Строка языка (текстовые службы)

Реализация объекта панели языка

Чтобы поддерживать добавление элемента в языковую панель, служба текста должна реализовать объект, поддерживающий интерфейс ITfSource и один из элементов управления ITfLangBarIte m. Когда элемент установлен, строка языка устанавливает приемник ITfLangBarItemSink путем вызова элемента ITfSource::AdviseSink с IID_ITfLangBarItemSink. Элемент использует интерфейс ITfLangBarItemSink для уведомления языковой панели изменений, например при скрытии, отображении, включении или отключении элемента.

Можно установить четыре типа элементов панели языка, и каждый из необходимых интерфейсов создается из ITfLangBarItem. Ниже приведены элементы управления ITfLangBarItem.

Элемент Описание
Пуговица Кнопка панели языка работает как кнопка команды, переключатель или меню на панели языка. Объект должен поддерживать интерфейс ITfLangBarItemButton.
Воздушный шар Всплывающее уведомление на панели языка в языковой строке выполняется в виде всплывающего уведомления. Объект должен поддерживать интерфейс ITfLangBarItemBalloon.
Точечный рисунок Точечный рисунок панели языка функционирует как статический элемент на панели языка, где отображается растровое изображение. Объект должен поддерживать интерфейс ITfLangBarItemBitmap.
Кнопка растрового рисунка Кнопка растрового рисунка на панели языка, отображающая текст и растровое изображение, работает как элемент кнопки. Объект должен поддерживать интерфейс ITfLangBarItemBitmapButton.

 

Стили кнопки

Элемент кнопки может функционировать как любой из следующих элементов. Функция элемента кнопки определяется флагами, заданными в элементе dwStyle элемента структуры TF_LANGBARITEMINFO в методе ITfLangBarItem::GetInfo.

Элемент Описание
Пуговица Кнопка работает как стандартная кнопка команды. Этот стиль кнопки определяется стилем TF_LBI_STYLE_BTN_BUTTON. ITfLangBarItemButton::OnClick вызывается при щелчке элемента. ITfLangBarItemButton::InitMenu и ITfLangBarItemButton::OnMenuSelect не используются.
Кнопка переключения Кнопка работает как элемент управления переключателем, который может поддерживать состояние щелчка, аналогично флажку. Этот стиль кнопки определяется стилем TF_LBI_STYLE_BTN_TOGGLE. ITfLangBarItemButton::OnClick вызывается при щелчке элемента. ITfLangBarItemButton::InitMenu и ITfLangBarItemButton::OnMenuSelect не используются.
Меню Кнопка работает в виде раскрывающегося меню. Этот стиль кнопки определяется стилем TF_LBI_STYLE_BTN_MENU. ITfLangBarItemButton::InitMenu вызывается при нажатии кнопки. Когда пользователь выбирает элемент в меню, строка языка вызывает ITfLangBarItemButton::OnMenuSelect с идентификатором выбранного элемента меню. ITfLangBarItemButton::OnClickis не используется.

 

Реализация кнопки меню

Когда пользователь нажимает кнопку меню, строка языка вызывает ITfLangBarItemButton::InitMenu. Элемент добавляет элементы в меню с помощью интерфейса ITfMenu, переданного InitMenu.

Чтобы добавить в меню подменю, вызовите ITfMenu::AddMenuItem с TF_LBMENUF_SUBMENU. После этого новый объект ITfMenu, представляющий подменю, возвращается в параметре ppMenu AddMenuItem. Этот новый объект меню используется для добавления элементов в подменю.

Когда пользователь выбирает элемент в меню, строка языка вызывает ITfLangBarItemButton::OnMenuSelect с идентификатором выбранного элемента меню.

Добавление элементов в языковую панель

Служба текста должна добавлять элементы в строку языка при вызове метода ITfTextInputProcessor::Activate и удалить их при вызове ITfTextInputProcessor::D eactivate.

Чтобы добавить элемент на языковую панель, служба текста получает интерфейс ITfLangBarItemMgr путем вызова ITfThreadMgr::QueryInterface с IID_ITfLangBarItemMgr. Затем служба текста вызывает ITfLangBarItemMgr::AddItem с указателем на объект элемента панели языка.

Текстовая служба должна удалить элемент при деактивации. Текстовая служба использует тот же интерфейс ITfLangBarItemMgr, используемый для добавления элементов или получения другого экземпляра интерфейса. Затем служба текста вызывает ITfLangBarItemMgr::RemoveItem с указателем интерфейса элемента для удаления.

Расширение элементов панели языка системы

TSF предоставляет возможность добавлять элементы меню в существующие языковые меню. Это позволяет текстовой службе добавлять элементы в меню другой текстовой службы, не добавляя отдельную кнопку на панель инструментов. Это также позволяет упорядочивать элементы меню в логические группы. Например, текстовая служба, которая предоставляет дополнительные функции стандартной службе текста речи, может добавлять элементы в меню службы текста речи, а не добавлять собственную кнопку меню верхнего уровня.

Текстовая служба предоставляет расширение меню строк языка, реализуя объект, поддерживающий интерфейс ITfSystemLangBarItemSink. Этот интерфейс работает точно так же, как и интерфейс ITfLangBarItemButton для кнопки меню. При отображении меню расширенные вызовы службы текста ITfSystemLangBarItemSink::InitMenu. Расширение добавляет элементы в меню с помощью интерфейса ITfMenu, переданного InitMenu. Когда пользователь выбирает элемент, добавленный расширением, служба текста выполняет расширенные вызовы ITfSystemLangBarItemSink::OnMenuSelect с идентификатором выбранного элемента меню.

Чтобы установить расширение меню строк языка, служба текста выполняет следующие действия.

  1. Получите интерфейс ITfLangBarItem для расширения элемента путем вызова ITfLangBarItemMgr::GetItem с GUID для расширенного элемента.
  2. Получите интерфейс ITfSource для расширения элемента путем вызова ITfLangBarItem::QueryInterface с IID_ITfSource.
  3. Вызовите ITfSource::AdviseSink с IID_ITfSystemLangBarItemSink и указателем на объект ITfSystemLangBarItemSink. Если ITfSource::AdviseSink завершается ошибкой, служба текста не поддерживает расширения меню.

ITfSource::UnadviseSinkITfSource::AdviseSink

Поддержка расширений меню строк языка

Текстовая служба может включить другие текстовые службы для добавления элементов в меню строк языка, как показано выше. Текстовая служба, которая должна опубликовать свой GUID, чтобы элемент можно было получить, вызвав ITfLangBarItemMgr::GetItem.

Для поддержки расширений меню текстовая служба должна поддерживать интерфейс ITfSource. Следующие шаги позволяют включить поддержку одного или нескольких расширений меню.

  1. Когда вызывается ITfSource::AdviseSink с IID_ITfSystemLangBarItemSink, текстовая служба должна хранить интерфейс ITfSystemLangBarItemSink и возвращать значение cookie, которое будет определять расширение.
  2. Когда вызывается ITfLangBarItemButton::InitMenu, служба текста вызывает метод расширения ITfSystemLangBarItemSink::InitMenu. Текстовая служба должна реализовать способ идентификации элементов меню, добавленных расширением, а не элементов, добавленных самой текстовой службой.
  3. При вызове ITfLangBarItemButton::OnMenuSelect с идентификатором элемента меню, который принадлежит расширению, текстовая служба вызывает метод расширения ITfSystemLangBarItemSink::OnMenuSelect.
  4. При вызове ITfSource::UnadviseSink с соответствующим файлом cookie служба текста удаляет расширение меню.

настройка платформы текстовых служб

языковой панели (приложения)