Armazenamentos de texto
Posição do caractere do aplicativo (ACP)
Um ACP é o local de um caractere, ou caracteres, em um fluxo de texto que é expresso como o número de caracteres desde o 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 armazenamento de texto implementa um objeto que suporta a interface ITextStoreACP, que permite que o fluxo de texto seja expresso em um ACP. O ITextStoreACP métodos de interface usam o intervalo ACP do fluxo de texto para modificar o texto.
Anchor-Based Aplicações
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 Microsoft Ative Accessibility clientes que suportam âncoras, em que o gerente usa ITextStoreAnchor e métodos de ITextStoreAnchorSink para encapsular os ITextStoreACP e métodos de ITextStoreACPSink.
Controlo de Acesso a Documentos
O armazenamento de texto controla o acesso ao fluxo de texto usando bloqueios de documentos. Para ler ou modificar o armazenamento de texto, o gerente deve primeiro instalar um coletor de aviso que suporte a interface de ITextStoreACPSink chamando o método ITextStoreACP::AdviseSink e passando um ponteiro para um coletor de aconselhamento. O coletor de avisos permite que o gerente obtenha um bloqueio de documento no armazenamento de texto e receba notificações quando o armazenamento de texto é modificado por algo diferente do gerente, como a entrada do usuário através do aplicativo. Os dissipadores de aconselhamento são discutidos mais adiante neste tópico.
Como inicializar o armazenamento de texto
Um aplicativo inicializa um armazenamento de texto concluindo as seguintes etapas:
Crie um objeto do gerenciador de threads com base na interface ITfThreadMgr do chamando a função CoCreateInstance com um ponteiro para um objeto do gerenciador de threads. A seguir está um exemplo de código de implementação de um objeto 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 ITfThreadMgr::Activate método. 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 de gerenciador de documentos com base na interface de ITfDocumentMgr chamando o ITfThreadMgr::CreateDocumentMgr método com um ponteiro para o objeto do gerenciador de documentos. O objeto gerenciador de documentos é usado para implementar um objeto de contexto que é o armazenamento de texto.
Crie um objeto de contexto a partir do gerenciador de documentos chamando o método ITfDocumentMgr::CreateContext com o ponteiro para o objeto de armazenamento de texto e um ponteiro para o identificador do cliente a partir da ativação do gerenciador de threads. Segue-se um exemplo de criação de um objeto de contexto:
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
Empurre o objeto de contexto para a pilha com o método ITfDocumentMgr::P ush. A seguir está um exemplo de empurrar o objeto de contexto para a pilha:
hr = pDocumentMgr->Push(pContext);
Como modificar o armazenamento de texto
O método ITfDocumentMgr::P ush chama ITextStoreACP::AdviseSink com um ponteiro para a interface do coletor de aviso para instalar um novo coletor de aviso ou modificar um coletor de aviso existente. O coletor de avisos recebe notificações quando o armazenamento de texto é modificado por algo diferente do gerente, como a entrada do usuário no aplicativo. Os aplicativos devem chamar o ITfThreadMgrEventSink::OnSetFocus método quando o método de entrada obtém o foco. Outras notificações para o gerenciador de threads são fornecidas chamando para os métodos de interface ITextStoreACPSink apropriados.
No entanto, os aplicativos não devem chamar o ITextStoreACPSink métodos de interface em resposta a ITextStoreACP métodos de interface. Os aplicativos só devem chamar ITextStoreACPSink métodos de interface quando o armazenamento de texto é modificado por algo diferente do gerente.
O conteúdo do armazenamento de texto pode ser modificado com um estado de entrada temporário chamado composição.
Tópicos relacionados