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


Отделения

Типы секций

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

Глобальный раздел позволяет клиентам совместно использовать данные в разных процессах. Чтобы получить глобальный диспетчер секций, вызовите ITfThreadMgr::GetGlobalCompartment.

Диспетчер потоков содержит диспетчер секций, содержащий секции для каждого потока. Это позволяет совместно использовать данные в потоке. Чтобы получить диспетчер секций диспетчера потоков, вызовите ITfThreadMgr::QueryInterface с IID_ITfCompartmentMgr.

Каждый созданный диспетчер документов также содержит диспетчер секций. Это позволяет совместно использовать данные в определенном диспетчере документов. Чтобы получить диспетчер секций диспетчера документов, вызовите ITfDocumentMgr::QueryInterface с IID_ITfCompartmentMgr.

Каждый созданный контекст также содержит диспетчер секций. Это позволяет предоставлять общий доступ к данным в определенном контексте. Чтобы получить диспетчер секций контекста, вызовите ITfContext::QueryInterface с IID_ITfCompartmentMgr.

Создание и удаление секции

Секции создаются при первом вызове ITfCompartmentMgr::GetCompartment с идентификатором GUID секции. Клиент установки должен задать начальное значение секции с помощью ITfCompartment::SetValue. Пока значение не задано, значение секции будет пустым. Из-за этого невозможно проверить существование секции до вызова GetCompartment . Чтобы избежать этой ситуации, устанавливающий клиент должен задать для него начальное значение, чтобы другие клиенты могли определить, существует ли секция.

Метод ITfCompartmentMgr::ClearCompartment используется для удаления секции. Все существующие ссылки на секцию помечаются как недопустимые.

Получение секций

Используя интерфейс ITfCompartmentMgr , клиент может перечислять секции, вызывая ITfCompartmentMgr::EnumCompartments. Этот метод предоставляет объект IEnumGUID , содержащий идентификаторы GUID всех установленных отсеков.

С помощью GUID секции для получения определенного отсека используется ITfCompartmentMgr::GetCompartment . Этот метод предоставляет вызывающей объекту ITfCompartment , который может получать и задавать данные секции.

Получение уведомлений об изменениях секций

При изменении значения секции диспетчер TSF уведомляет все установленные приемники о том, что отсек изменился. Чтобы установить приемник рекомендаций по смене отсека, создайте объект, реализующий ITfCompartmentEventSink. Затем вызовите ITfCompartment::QueryInterface с IID_ITfSource объекта секции, который будет отслеживаться для получения интерфейса ITfSource . Теперь вызовите ITfSource::AdviseSink с IID_ITfCompartmentEventSink и указателем на объект ITfCompartmentEventSink . При изменении значения секции вызывается ITfCompartmentEventSink::OnChange приемника рекомендаций с идентификатором GUID секции. Приемник рекомендаций может вызвать ITfCompartment::GetValue , чтобы получить новое значение.

ITfCompartmentMgr

ITfCompartment

ITfCompartmentEventSink

TfClientId

ITfThreadMgr::GetGlobalCompartment

ITfCompartmentMgr::GetCompartment

ITfCompartment::SetValue

ITfCompartmentMgr::ClearCompartment

ITfCompartmentMgr::EnumCompartments

ITfSource

ITfSource::AdviseSink

ITfCompartmentEventSink::OnChange