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 atualmente ativo é 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 de 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 editar cookie que identifica o contexto de edição com o acesso solicitado. Esse cookie é 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 gerente do TSF não negocia um bloqueio de documento para este 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á no ITextStoreACP::GetSelection ou ITextStoreAnchor::GetSelection sendo chamado. Antes de obter a seleção, o aplicativo determinará se existe um bloqueio de documento. Como nenhum bloqueio existe, o aplicativo falhará com TS_E_NOLOCK. Ou seja, se um aplicativo chamar um método com esse cookie que resulta em um dos métodos do repositório de texto do aplicativo sendo chamados, ele deverá lidar com 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