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 Anzeigeattributeinformationen über die Komposition abrufen und diese Informationen verwenden, um dem Benutzer den Kompositionszustand anzuzeigen.
Ein Beispiel für die Verwendung einer Komposition ist die Spracheingabe. Während der Benutzer spricht, erstellt der Sprachtextdienst eine Komposition. Diese Zusammensetzung bleibt intakt, bis die gesamte Spracheingabe abgeschlossen ist. Wenn die Sitzung endet, beendet der Sprachtextdienst die Komposition.
Eine Anwendung verwendet das Vorhandensein und Fehlen einer Komposition, um zu bestimmen, wie Text angezeigt werden soll und welche Verarbeitung, falls vorhanden, 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 Grammatikprüfung für einen Kompositionstext durchführen. Der Text gilt als unvollständig, bis die Komposition beendet wird.
Ein Textdienst erstellt eine Komposition, indem er ITfContextComposition::StartComposition aufruft. 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, indem er ITfComposition::EndComposition aufruft.
Wenn ein Textdienst Kompositionen erstellt, sollte er auch Anzeigeattribute unterstützen, damit eine Anwendung Text anzeigen kann, der Teil einer Komposition ist, anders als Standardtext. Weitere Informationen finden Sie unter Bereitstellen von Anzeigeattributen.
Eine Anwendung kann das Erstellen, Ändern und Beenden von Kompositionen überwachen, indem sie eine ITfContextOwnerCompositionSink-Senke installiert. Wenn eine Komposition gestartet wird, wird ITfContextOwnerCompositionSink::OnStartComposition aufgerufen. Wenn eine Komposition geändert oder beendet wird, werden ITfContextOwnerCompositionSink::OnUpdateComposition bzw . ITfContextOwnerCompositionSink::OnEndComposition aufgerufen.
Im Folgenden wird ein typisches Verfahren zum Aktualisieren eines Dokuments mithilfe einer Komposition beschrieben.
- ITextStoreACP::InsertTextAtSelection oder ITextStoreAnchor::InsertTextAtSelection werden normalerweise verwendet, um den Anfangstext in die Komposition einzufügen.
- Die Komposition wird mit einem Aufruf von ITfContextComposition::StartComposition gestartet, wobei der von InsertTextAtSelection zurückgegebene Textbereich verwendet wird.
- Wenn sie neue Eingaben wie Spracheingabe oder Tastatureingabe empfängt, aktualisiert die Anwendung die Komposition mit ITextStoreACP::SetText oder ITextStoreAnchor::SetText.
- Wenn die Anwendung feststellt, dass es 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.