Compartir a través de


Almacenes de texto

Posición de caracteres de aplicación (ACP)

Un ACP es la ubicación de un carácter, o caracteres, en una secuencia de texto que se expresa como el número de caracteres desde el inicio de la secuencia de texto. Dado que el modelo ACP está basado en cero, el primer carácter de una secuencia de texto tiene un ACP de cero. Por ejemplo:

Text Stream  H | e | l | l | o |   | W | o | r | l | d
ACP          0   1   2   3   4   5   6   7   8   9   10

Un almacén de texto implementa un objeto que admite la interfaz ITextStoreACP , que permite expresar la secuencia de texto en un ACP. Los métodos de interfaz ITextStoreACP usan el intervalo ACP de la secuencia de texto para modificar el texto.

Aplicaciones de Anchor-Based

El administrador usa los métodos basados en ACP de forma nativa para manipular texto. Sin embargo, hay disponible un enfoque basado en anclajes para los clientes de accesibilidad activa de Microsoft que admiten anclajes, en los que el administrador usa métodos ITextStoreAnchor e ITextStoreAnchorSink para encapsular los métodos ITextStoreACP e ITextStoreACPSink .

Access Control de documentos

El almacén de texto controla el acceso a la secuencia de texto mediante bloqueos de documento. Para leer o modificar el almacén de texto, el administrador debe instalar primero un receptor de aviso que admita la interfaz ITextStoreACPSink llamando al método ITextStoreACP::AdviseSink y pasando un puntero a un receptor de asesoramiento. El receptor de avisos permite al administrador obtener un bloqueo de documento en el almacén de texto y recibir notificaciones cuando el almacén de texto lo modifica algo distinto del administrador, como la entrada del usuario a través de la aplicación. Los receptores de asesoramiento se describen más adelante en este tema.

Cómo inicializar el almacén de texto

Una aplicación inicializa un almacén de texto completando los pasos siguientes:

  1. Cree un objeto de administrador de subprocesos basado en la interfaz ITfThreadMgr llamando a la función CoCreateInstance con un puntero a un objeto de administrador de subprocesos. A continuación se muestra un ejemplo de código de implementación de un objeto de administrador de subprocesos.

    hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, 
                            IID_ITfThreadMgr, (void**)&pThreadMgr);
    
  2. Active el objeto del administrador de subprocesos llamando al método ITfThreadMgr::Activate . Este método proporciona un puntero a un identificador de cliente usado para crear un objeto de contexto. El administrador de subprocesos se usa para implementar un objeto de administrador de documentos.

  3. Cree un objeto de administrador de documentos basado en la interfaz ITfDocumentMgr llamando al método ITfThreadMgr::CreateDocumentMgr con un puntero al objeto del administrador de documentos. El objeto del administrador de documentos se usa para implementar un objeto de contexto que es el almacén de texto.

  4. Cree un objeto de contexto desde el administrador de documentos llamando al método ITfDocumentMgr::CreateContext con el puntero al objeto de almacén de texto y un puntero al identificador de cliente para activar el administrador de subprocesos. A continuación se muestra un ejemplo de creación de un objeto de contexto:

    hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, 
                                    &pContext, pEditCookie);
    
  5. Inserte el objeto de contexto en la pila con el método ITfDocumentMgr::P ush . A continuación se muestra un ejemplo de inserción del objeto de contexto en la pila:

    hr = pDocumentMgr->Push(pContext);
    

Cómo modificar el almacén de texto

El método ITfDocumentMgr::P ush llama a ITextStoreACP::AdviseSink con un puntero a la interfaz del receptor de asesoramiento para instalar un nuevo receptor de aviso o modificar un receptor de aviso existente. El receptor de aviso recibe notificaciones cuando el almacén de texto lo modifica algo distinto del administrador, como la entrada del usuario en la aplicación. Las aplicaciones deben llamar al método ITfThreadMgrEventSink::OnSetFocus cuando el método de entrada obtiene el foco. Otras notificaciones al administrador de subprocesos se proporcionan llamando a los métodos de interfaz ITextStoreACPSink adecuados.

Sin embargo, las aplicaciones no deben llamar a los métodos de interfaz ITextStoreACPSink en respuesta a los métodos de interfaz ITextStoreACP . Las aplicaciones solo deben llamar a métodos de interfaz ITextStoreACPSink cuando algo distinto del administrador modifica el almacén de texto.

El contenido del almacén de texto se puede modificar con un estado de entrada temporal denominado composición.

Delimitadores

Composiciones

Bloqueos de documento

ITextStoreACPSink

ITextStoreACP

ITextStoreAnchor

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr

ITfThreadMgrEventSink::OnSetFocus

TfClientId

Microsoft Active Accessibility