Kompositioner
En komposition är ett tillfälligt indatatillstånd som gör att en texttjänst kan ange både för programmet och användaren att indatatexten fortfarande är i ändringstillstånd. Ett program kan och bör hämta information om visningsattributet om sammansättningen och använda den här informationen för att visa användarens sammansättningstillstånd.
Ett exempel på användningen av en komposition är under talindata. Medan användaren talar skapar taltexttjänsten en komposition. Den här kompositionen förblir intakt tills hela talindata har slutförts. När sessionen är slut avslutar taltexttjänsten sammansättningen.
Ett program använder förekomsten och frånvaron av en komposition för att avgöra hur text ska visas och vad, om någon, bearbetning ska utföras på texten. Om användaren till exempel använder talmotorn för att mata in text bör programmet inte utföra någon stavnings- eller grammatikkontroll på någon kompositionstext. Texten anses vara ofullständig tills kompositionen avslutas.
Texttjänster
En texttjänst skapar en komposition genom att anropa ITfContextComposition::StartComposition. Texttjänsten kan om du vill implementera ett ITfCompositionSink- objekt som tar emot meddelanden om kompositionshändelser. StartComposition returnerar ett ITfComposition- objekt som texttjänsten behåller en referens till och använder för att ändra och avsluta kompositionen. Texttjänsten avslutar kompositionen genom att anropa ITfComposition::EndComposition.
Om en texttjänst ska skapa kompositioner bör den också ha stöd för visningsattribut för att göra det möjligt för ett program att visa text som är en del av en komposition på ett annat sätt än standardtexten. Mer information finns i Tillhandahålla visningsattribut.
Program
Ett program kan övervaka skapandet, ändringen och avslutningen av kompositioner genom att installera en ITfContextOwnerCompositionSink mottagare. När en komposition startas anropas ITfContextOwnerCompositionSink::OnStartComposition. På samma sätt anropas ITfContextOwnerCompositionSink::OnUpdateComposition och ITfContextOwnerCompositionSink::OnEndComposition.
Följande är en vanlig procedur för att uppdatera ett dokument med hjälp av en komposition.
- ITextStoreACP::InsertTextAtSelection eller ITextStoreAnchor::InsertTextAtSelection används vanligtvis för att infoga den första texten i kompositionen.
- Kompositionen startas med ett anrop till ITfContextComposition::StartCompositionmed hjälp av textintervallet som returneras av InsertTextAtSelection.
- När det tar emot nya indata, till exempel tal- eller tangentbordsinmatning, uppdaterar programmet kompositionen med ITextStoreACP::SetText eller ITextStoreAnchor::SetText.
- När programmet fastställer att det är dags att avsluta kompositionen anropas ITfComposition::EndComposition.
Programmet bör alltid använda visningsattributen som tillhandahålls av texttjänsten för att ändra textvisningen och inte bara när en komposition är aktiv. Mer information finns i Använda visningsattribut.
Om det behövs kan ett program avsluta en komposition genom att anropa ITfContextOwnerCompositionServices::TerminateComposition.