Repositórios de Texto
ACP (Posição de Caractere do Aplicativo)
Um ACP é o local de um caractere, ou caracteres, em um fluxo de texto expresso como o número de caracteres do início do fluxo de texto. Como o modelo ACP é baseado em zero, o primeiro caractere em um fluxo de texto tem um ACP de zero. Por exemplo:
Text Stream H | e | l | l | o | | W | o | r | l | d
ACP 0 1 2 3 4 5 6 7 8 9 10
Um repositório de texto implementa um objeto que dá suporte à interface ITextStoreACP , que permite que o fluxo de texto seja expresso em um ACP. Os métodos de interface ITextStoreACP usam o intervalo ACP do fluxo de texto para modificar o texto.
aplicativos Anchor-Based
O gerente usa os métodos baseados em ACP nativamente para manipular o texto. No entanto, uma abordagem baseada em âncora está disponível para clientes de Acessibilidade Ativa da Microsoft que dão suporte a âncoras, em que o gerente usa os métodos ITextStoreAnchor e ITextStoreAnchorSink para encapsular os métodos ITextStoreACP e ITextStoreACPSink .
Controle de Acesso do documento
O repositório de texto controla o acesso ao fluxo de texto usando bloqueios de documento. Para ler ou modificar o repositório de texto, o gerente deve primeiro instalar um coletor de consultoria que dê suporte à interface ITextStoreACPSink chamando o método ITextStoreACP::AdviseSink e passando um ponteiro para um coletor de consultoria. O coletor de consultoria permite que o gerente obtenha um documento bloqueado no repositório de texto e receba notificações quando o repositório de texto é modificado por algo diferente do gerenciador, como a entrada do usuário por meio do aplicativo. Os coletores de consultoria são discutidos posteriormente neste tópico.
Como inicializar o repositório de texto
Um aplicativo inicializa um repositório de texto concluindo as seguintes etapas:
Crie um objeto do gerenciador de threads com base na interface ITfThreadMgr chamando a função CoCreateInstance com um ponteiro para um objeto do gerenciador de threads. Veja a seguir um exemplo de código de implementação de um objeto do gerenciador de threads.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
Ative o objeto do gerenciador de threads chamando o método ITfThreadMgr::Activate . Esse método fornece um ponteiro para um identificador de cliente usado para criar um objeto de contexto. O gerenciador de threads é usado para implementar um objeto do gerenciador de documentos.
Crie um objeto do gerenciador de documentos com base na interface ITfDocumentMgr chamando o método ITfThreadMgr::CreateDocumentMgr com um ponteiro para o objeto do gerenciador de documentos. O objeto gerenciador de documentos é usado para implementar um objeto de contexto que é o repositório de texto.
Crie um objeto de contexto do gerenciador de documentos chamando o método ITfDocumentMgr::CreateContext com o ponteiro para o objeto do repositório de texto e um ponteiro para o identificador do cliente de ativar o gerenciador de threads. Veja a seguir um exemplo de criação de um objeto de contexto:
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
Envie o objeto de contexto por push para a pilha com o método ITfDocumentMgr::P ush . Veja a seguir um exemplo de como enviar o objeto de contexto para a pilha:
hr = pDocumentMgr->Push(pContext);
Como modificar o repositório de texto
O método ITfDocumentMgr::P ush chama ITextStoreACP::AdviseSink com um ponteiro para a interface do coletor de aconselhamento para instalar um novo coletor de consultoria ou modificar um coletor de aconselhamento existente. O coletor de consultoria recebe notificações quando o repositório de texto é modificado por algo diferente do gerenciador, como a entrada do usuário no aplicativo. Os aplicativos devem chamar o método ITfThreadMgrEventSink::OnSetFocus quando o método de entrada obtém o foco. Outras notificações para o gerenciador de threads são fornecidas chamando os métodos de interface ITextStoreACPSink apropriados.
No entanto, os aplicativos não devem chamar os métodos de interface ITextStoreACPSink em resposta aos métodos de interface ITextStoreACP . Os aplicativos só devem chamar métodos de interface ITextStoreACPSink quando o repositório de texto é modificado por algo diferente do gerenciador.
O conteúdo do repositório de texto pode ser modificado com um estado de entrada temporário chamado de composição.
Tópicos relacionados