Composizioni
Una composizione è uno stato di input temporaneo che consente a un servizio di testo di specificare sia all'applicazione che all'utente che il testo di input è ancora in uno stato di modifica. Un'applicazione può e deve ottenere informazioni sull'attributo sulla composizione e usare queste informazioni per visualizzare lo stato di composizione all'utente.
Un esempio dell'uso di una composizione è durante l'input vocale. Mentre l'utente parla, il servizio di testo vocale crea una composizione. Questa composizione rimarrà intatta fino al completamento dell'intero input vocale. Al termine della sessione, il servizio di testo vocale termina la composizione.
Un'applicazione usa la presenza e l'assenza di una composizione per determinare come visualizzare il testo e cosa, se presente, l'elaborazione deve essere eseguita sul testo. Ad esempio, se l'utente usa il motore di riconoscimento vocale per inserire testo, l'applicazione non deve eseguire alcun controllo ortografico o grammaticale su qualsiasi testo di composizione. Il testo viene considerato incompleto finché la composizione non viene terminata.
Servizi di testo
Un servizio di testo crea una composizione chiamando ITfContextComposition::StartComposition. Il servizio di testo può implementare facoltativamente un oggetto ITfCompositionSink che riceve notifiche degli eventi di composizione. StartComposition restituisce un oggetto ITfComposition che il servizio di testo mantiene un riferimento a e usa per modificare e terminare la composizione. Il servizio di testo termina la composizione chiamando ITfComposition::EndComposition.
Se un servizio di testo creerà composizioni, deve supportare anche gli attributi visualizzati per consentire a un'applicazione di visualizzare il testo che fa parte di una composizione diversamente dal testo standard. Per altre informazioni, vedere Fornire attributi di visualizzazione.
Applicazioni
Un'applicazione può monitorare la creazione, la modifica e la terminazione delle composizioni installando un sink ITfContextOwnerCompositionSink . Quando viene avviata una composizione, viene chiamato ITfContextOwnerCompositionSink::OnStartComposition . Analogamente, quando una composizione viene modificata o terminata, verranno chiamati rispettivamente ITfContextOwnerCompositionSink::OnUpdateComposition e ITfContextOwnerCompositionSink::OnEndComposition .
Di seguito è riportata una procedura tipica per aggiornare un documento usando una composizione.
- ITextStoreACP::InsertTextAtSelection o ITextStoreAnchor::InsertTextAtSelection vengono in genere usati per inserire il testo iniziale nella composizione.
- La composizione viene avviata con una chiamata a ITfContextComposition::StartComposition, usando l'intervallo di testo restituito da InsertTextAtSelection.
- Quando riceve un nuovo input, ad esempio voce vocale o tastiera, l'applicazione aggiorna la composizione con ITextStoreACP::SetText o ITextStoreAnchor::SetText.
- Quando l'applicazione determina che è ora di terminare la composizione, chiama ITfComposition::EndComposition.
L'applicazione deve usare gli attributi visualizzati forniti dal servizio di testo per modificare la visualizzazione del testo in ogni momento e non solo quando una composizione è attiva. Per altre informazioni, vedere Uso degli attributi di visualizzazione.
Se necessario, un'applicazione può terminare una composizione chiamando ITfContextOwnerCompositionServices::TerminateComposition.