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


Изменение контекстов

Приложений

Чтобы создать контекст редактирования, приложение вызывает ITfDocumentMgr::CreateContext.

Текстовые службы

Текстовая служба часто использует активный контекст редактирования. В настоящее время активный контекст редактирования — это контекст редактирования в верхней части стека активного диспетчера документов. Чтобы получить активный контекст, служба текста вызывает ITfThreadMgr::GetFocus, чтобы получить активный диспетчер документов, а затем вызывает ITfDocumentMgr::GetTop, чтобы получить контекст редактирования в верхней части стека.

В некоторых случаях для службы текста требуется собственный контекст редактирования. Чтобы создать контекст редактирования, служба текста вызывает ITfDocumentMgr::CreateContext.

Изменение файлов cookie

Во многих методах, таких как ITfRange::SetText, требуется способ определить контекст редактирования, имеющий блокировки документов только для чтения илизаписи. Блокировка документа получается путем согласования между диспетчером TSF и приложением. Текстовая служба не может выполнять эти переговоры напрямую. Текстовая служба может получить блокировку только путем запроса редактирования сеанса с определенным контекстом и доступом только для чтения или записи. При предоставлении сеанса редактирования текстовая служба предоставляется с помощью файла cookie редактирования, который определяет контекст редактирования с запрошенным доступом. Затем этот файл cookie передается методу для идентификации контекста редактирования с правильным доступом.

ITfDocumentMgr::CreateContext также предоставляет файл cookie редактирования создателю контекста. Этот файл cookie имеет доступ только для чтения, и нет способа изменить уровень доступа. По сути, диспетчер TSF не согласовывает блокировку документа для этого файла cookie редактирования. Файл cookie помечается только для чтения, но документ на самом деле не заблокирован. Например, если создатель контекста вызывает ITfContext::GetSelection с файлом cookie редактирования, возвращенным ITfDocumentMgr::CreateContext, это приводит к вызову ITextStoreACP::GetSelection или ITextStoreAnchor::GetSelection. Перед получением выбора приложение определит, существует ли блокировка документа. Так как блокировка отсутствует, приложение завершится ошибкой TS_E_NOLOCK. То есть, если приложение вызывает метод с этим файлом cookie, что приводит к вызову одного из вызываемых методов текстового хранилища приложения, оно должно внутренне обрабатывать этот случай, так как приложение не будет на самом деле иметь блокировку документа.

Если создатель контекста требует изменения файла cookie с доступом на чтение и запись, он должен установить собственный сеанс редактирования.

ITfContext

ITfDocumentMgr::CreateContext

ITfThreadMgr::GetFocus

ITfDocumentMgr::GetTop

ITfRange::SetText

блокировки документов

редактирование сеансов

ITfContext::GetSelection

ITextStoreACP::GetSelection

ITextStoreAnchor::GetSelection