Kompositionen

Eine Komposition ist ein temporärer Eingabezustand, der es einem Textdienst ermöglicht, sowohl für die Anwendung als auch für den Benutzer anzugeben, dass sich der Eingabetext noch in einem Änderungszustand befindet. Eine Anwendung kann und sollte Anzeigeattributinformationen über die Komposition abrufen und diese Informationen verwenden, um den Kompositionszustand für den Benutzer anzuzeigen.

Ein Beispiel für die Verwendung einer Komposition ist die Spracheingabe. Während der Benutzer spricht, erstellt der Sprachtextdienst eine Komposition. Diese Komposition bleibt intakt, bis die gesamte Spracheingabe abgeschlossen ist. Wenn die Sitzung beendet wird, beendet der Sprachtextdienst die Komposition.

Eine Anwendung verwendet das Vorhandensein und Fehlen einer Komposition, um zu bestimmen, wie Text und ggf. welche Verarbeitung für den Text ausgeführt werden soll. Wenn der Benutzer beispielsweise die Sprach-Engine zum Eingeben von Text verwendet, sollte die Anwendung keine Rechtschreib- oder Grammatiküberprüfung für Kompositionstext ausführen. Der Text gilt als unvollständig, bis die Komposition beendet wird.

Textdienste

Ein Textdienst erstellt eine Komposition durch Aufrufen von ITfContextComposition::StartComposition. Der Textdienst kann optional ein ITfCompositionSink-Objekt implementieren, das Kompositionsereignisbenachrichtigungen empfängt. StartComposition gibt ein ITfComposition-Objekt zurück, auf das der Textdienst einen Verweis behält und verwendet, um die Komposition zu ändern und zu beenden. Der Textdienst beendet die Komposition durch Aufrufen von ITfComposition::EndComposition.

Wenn ein Textdienst Kompositionen erstellen soll, sollte er auch Anzeigeattribute unterstützen, damit eine Anwendung Text, der Teil einer Komposition ist, anders als Standardtext anzeigen kann. Weitere Informationen finden Sie unter Bereitstellen von Anzeigeattributen.

Anwendungen

Eine Anwendung kann die Erstellung, Änderung und Beendigung von Kompositionen überwachen, indem sie eine ITfContextOwnerCompositionSink-Senke installiert. Wenn eine Komposition gestartet wird, wird ITfContextOwnerCompositionSink::OnStartComposition aufgerufen. Ebenso werden beim Ändern oder Beenden einer Komposition ITfContextOwnerCompositionSink::OnUpdateComposition und ITfContextOwnerCompositionSink::OnEndComposition aufgerufen.

Im Folgenden wird ein typisches Verfahren zum Aktualisieren eines Dokuments mithilfe einer Komposition beschrieben.

  1. ITextStoreACP::InsertTextAtSelection oder ITextStoreAnchor::InsertTextAtSelection werden normalerweise verwendet, um den ursprünglichen Text in die Komposition einzufügen.
  2. Die Komposition wird mit einem Aufruf von ITfContextComposition::StartCompositiongestartet, wobei der von InsertTextAtSelection zurückgegebene Textbereich verwendet wird.
  3. Wenn neue Eingaben wie Sprache oder Tastatureingabe empfangen werden, aktualisiert die Anwendung die Komposition mit ITextStoreACP::SetText oder ITextStoreAnchor::SetText.
  4. Wenn die Anwendung feststellt, dass es an der Zeit ist, die Komposition zu beenden, ruft sie ITfComposition::EndComposition auf.

Die Anwendung sollte die vom Textdienst bereitgestellten Anzeigeattribute verwenden, um die Anzeige von Text jederzeit und nicht nur dann zu ändern, wenn eine Komposition aktiv ist. Weitere Informationen finden Sie unter Verwenden von Anzeigeattributen.

Bei Bedarf kann eine Anwendung eine Komposition beenden, indem sie ITfContextOwnerCompositionServices::TerminateComposition aufruft.