Partilhar via


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:

  1. 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);
    
  2. 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.

  3. 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.

  4. 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);
    
  5. 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.

Âncoras

Composições

de bloqueios de documentos

ITextStoreACPSink

ITextStoreACP

ITextStoreAnchor

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr

ITfThreadMgrEventSink::OnSetFocus

TfClientId

Microsoft Ative Accessibility