Composições
Uma composição é um estado de entrada temporário que permite que um serviço de texto especifique tanto para o aplicativo quanto para o usuário que o texto de entrada ainda está em um estado de alteração. Um aplicativo pode e deve obter informações de atributo de exibição sobre a composição e usar essas informações para exibir o estado de composição para o usuário.
Um exemplo do uso de uma composição é durante a entrada de fala. Enquanto o usuário está falando, o serviço de texto de fala cria uma composição. Essa composição permanecerá intacta até que toda a entrada de fala seja concluída. Quando a sessão termina, o serviço de texto de fala encerra a composição.
Um aplicativo usa a presença e a ausência de uma composição para determinar como exibir texto e o que, se houver, o processamento deve ser executado no texto. Por exemplo, se o usuário estiver usando o mecanismo de fala para inserir texto, o aplicativo não deverá executar nenhuma verificação ortográfica ou gramatical em nenhum texto de composição. O texto é considerado incompleto até que a composição seja encerrada.
Serviços de Texto
Um serviço de texto cria uma composição chamando ITfContextComposition::StartComposition. Opcionalmente, o serviço de texto pode implementar um objeto ITfCompositionSink que recebe notificações de evento de composição. StartComposition retorna um objeto ITfComposition ao qual o serviço de texto mantém uma referência e usa para modificar e encerrar a composição. O serviço de texto encerra a composição chamando ITfComposition::EndComposition.
Se um serviço de texto for criar composições, ele também deverá dar suporte a atributos de exibição para permitir que um aplicativo exiba um texto que faça parte de uma composição diferente do texto padrão. Para obter mais informações, consulte Fornecendo atributos de exibição.
Aplicativos
Um aplicativo pode monitorar a criação, a alteração e o encerramento de composições instalando um coletor ITfContextOwnerCompositionSink . Quando uma composição é iniciada, ITfContextOwnerCompositionSink::OnStartComposition é chamado. Da mesma forma, quando uma composição é alterada ou encerrada, ITfContextOwnerCompositionSink::OnUpdateComposition e ITfContextOwnerCompositionSink::OnEndComposition serão chamados, respectivamente.
Veja a seguir um procedimento típico para atualizar um documento usando uma composição.
- ITextStoreACP::InsertTextAtSelection ou ITextStoreAnchor::InsertTextAtSelection normalmente são usados para inserir o texto inicial na composição.
- A composição é iniciada com uma chamada para ITfContextComposition::StartComposition, usando o intervalo de texto retornado por InsertTextAtSelection.
- Quando recebe novas entradas, como entrada de fala ou teclado, o aplicativo atualiza a composição com ITextStoreACP::SetText ou ITextStoreAnchor::SetText.
- Quando o aplicativo determina que é hora de encerrar a composição, ele chama ITfComposition::EndComposition.
O aplicativo deve usar os atributos de exibição fornecidos pelo serviço de texto para modificar a exibição do texto em todos os momentos e não apenas quando uma composição está ativa. Para obter mais informações, consulte Usando atributos de exibição.
Se necessário, um aplicativo pode encerrar uma composição chamando ITfContextOwnerCompositionServices::TerminateComposition.