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


Языковая панель (службы текста)

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

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

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

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

 

Стили кнопок

Элемент button может функционировать как любой из следующих элементов. Функция элемента кнопки определяется флагами, установленными в элементе 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 служба текста удаляет расширение меню.

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

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