Отделения
Типы секций
Существует несколько различных типов секций. Существует глобальный раздел, и каждый диспетчер потоков, диспетчер документов и контекст могут содержать секцию.
Глобальный раздел позволяет клиентам совместно использовать данные в разных процессах. Чтобы получить глобальный диспетчер секций, вызовите 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 , чтобы получить новое значение.
Связанные темы