Editar Contextos
Aplicativos
Para criar um contexto de edição, um aplicativo chama ITfDocumentMgr::CreateContext.
Serviços de Texto
Um serviço de texto geralmente usa o contexto de edição ativo no momento. O contexto de edição ativo no momento é o contexto de edição na parte superior da pilha do gerenciador de documentos ativo. Para obter o contexto ativo no momento, um serviço de texto chama ITfThreadMgr::GetFocus para obter o gerenciador de documentos ativo e, em seguida, chama ITfDocumentMgr::GetTop para obter o contexto de edição na parte superior da pilha.
Em alguns casos, um serviço de texto requer seu próprio contexto de edição. Para criar um contexto de edição, um serviço de texto chama ITfDocumentMgr::CreateContext.
Editar Cookies
Muitos métodos, como ITfRange::SetText, exigem uma maneira de identificar um contexto de edição que tenha um bloqueio de documento somente leitura ou leitura/gravação. Um bloqueio de documento é obtido por meio de uma negociação entre o gerenciador do TSF e o aplicativo. Um serviço de texto não pode executar essa negociação diretamente. Um serviço de texto só pode obter um bloqueio solicitando uma sessão de edição com um contexto específico e acesso somente leitura ou leitura/gravação. Quando a sessão de edição é concedida, o serviço de texto é fornecido com um cookie de edição que identifica o contexto de edição com o acesso solicitado. Esse cookie é então passado para o método para identificar o contexto de edição com o acesso adequado.
ITfDocumentMgr::CreateContext também fornece um cookie de edição para o criador de contexto. Esse cookie tem acesso somente leitura e não há como modificar o nível de acesso. Na verdade, o gerenciador do TSF não negocia um bloqueio de documento para esse cookie de edição. O cookie está marcado internamente como somente leitura, mas o documento não está realmente bloqueado. Por exemplo, se o criador de contexto chamar ITfContext::GetSelection com o cookie de edição retornado por ITfDocumentMgr::CreateContext , isso resultará na chamada de ITextStoreACP::GetSelection ou ITextStoreAnchor::GetSelection do aplicativo. Antes de obter a seleção, o aplicativo determinará se existe um bloqueio de documento. Como não existe nenhum bloqueio, o aplicativo falhará com TS_E_NOLOCK. Ou seja, se um aplicativo chamar um método com esse cookie que resulta na chamada de um dos métodos de repositório de texto do aplicativo, ele deverá tratar esse caso internamente porque o aplicativo não terá realmente um bloqueio de documento.
Se o criador de contexto exigir um cookie de edição com acesso de leitura/gravação, ele deverá estabelecer sua própria sessão de edição.
Tópicos relacionados