Composiciones
Una composición es un estado de entrada temporal que permite a un servicio de texto especificar tanto a la aplicación como al usuario que el texto de entrada sigue en un estado de cambio. Una aplicación puede y debe obtener información de atributo para mostrar sobre la composición y usar esta información para mostrar el estado de composición al usuario.
Un ejemplo del uso de una composición es durante la entrada de voz. Mientras el usuario habla, el servicio de texto de voz crea una composición. Esta composición permanecerá intacta hasta que se complete toda la entrada de voz. Cuando finaliza la sesión, el servicio de texto de voz finaliza la composición.
Una aplicación usa la presencia y ausencia de una composición para determinar cómo mostrar texto y qué, si existe, el procesamiento se debe realizar en el texto. Por ejemplo, si el usuario usa el motor de voz para escribir texto, la aplicación no debe realizar ninguna revisión ortográfica o gramatical en ningún texto de composición. El texto se considera incompleto hasta que finaliza la composición.
Un servicio de texto crea una composición llamando a ITfContextComposition::StartComposition. El servicio de texto puede implementar opcionalmente un objeto ITfCompositionSink que recibe notificaciones de eventos de composición. StartComposition devuelve un objeto ITfComposition al que el servicio de texto mantiene una referencia a y usa para modificar y finalizar la composición. El servicio de texto finaliza la composición llamando a ITfComposition::EndComposition.
Si un servicio de texto va a crear composiciones, también debe admitir atributos para mostrar para permitir que una aplicación muestre texto que forme parte de una composición de forma diferente al texto estándar. Para obtener más información, vea Proporcionar atributos para mostrar.
Una aplicación puede supervisar la creación, el cambio y la finalización de las composiciones mediante la instalación de un receptor ITfContextOwnerCompositionSink . Cuando se inicia una composición, se llama a ITfContextOwnerCompositionSink::OnStartComposition . Del mismo modo, cuando se cambia o finaliza una composición, se llamará a ITfContextOwnerCompositionSink::OnUpdateComposition y ITfContextOwnerCompositionSink::OnEndComposition , respectivamente.
A continuación se muestra un procedimiento típico para actualizar un documento mediante una composición.
- ITextStoreACP::InsertTextAtSelection o ITextStoreAnchor::InsertTextAtSelection se usan normalmente para insertar el texto inicial en la composición.
- La composición se inicia con una llamada a ITfContextComposition::StartComposition mediante el intervalo de texto devuelto por InsertTextAtSelection.
- Cuando recibe una entrada nueva, como la entrada de voz o teclado, la aplicación actualiza la composición con ITextStoreACP::SetText o ITextStoreAnchor::SetText.
- Cuando la aplicación determina que es el momento de finalizar la composición, llama a ITfComposition::EndComposition.
La aplicación debe usar los atributos para mostrar proporcionados por el servicio de texto para modificar la presentación de texto en todo momento y no solo cuando una composición está activa. Para obtener más información, vea Usar atributos para mostrar.
Si es necesario, una aplicación puede finalizar una composición llamando a ITfContextOwnerCompositionServices::TerminateComposition.