Kompozycje
Kompozycja jest tymczasowym stanem wejściowym, który umożliwia usłudze tekstowej określenie zarówno aplikacji, jak i użytkownika, że tekst wejściowy jest nadal w stanie zmiany. Aplikacja może i powinna uzyskać informacje o atrybucie o kompozycji i używać tych informacji do wyświetlania stanu kompozycji użytkownikowi.
Jednym z przykładów użycia kompozycji jest podczas wprowadzania mowy. Gdy użytkownik mówi, usługa zamiany mowy tworzy kompozycję. Ta kompozycja pozostanie nienaruszona do momentu ukończenia całego wprowadzania mowy. Po zakończeniu sesji usługa zamiany mowy kończy kompozycję.
Aplikacja używa obecności i braku kompozycji, aby określić sposób wyświetlania tekstu i co, jeśli istnieje, przetwarzanie powinno być wykonywane na tekście. Jeśli na przykład użytkownik używa aparatu mowy do wprowadzania tekstu, aplikacja nie powinna wykonywać sprawdzania pisowni ani gramatyki w żadnym tekście kompozycji. Tekst jest uznawany za niekompletny do momentu zakończenia kompozycji.
Usługi tekstowe
Usługa tekstowa tworzy kompozycję, wywołując ITfContextComposition::StartComposition. Usługa tekstowa może opcjonalnie zaimplementować obiekt ITfCompositionSink, który odbiera powiadomienia o zdarzeniach kompozycji. Funkcja StartComposition zwraca obiekt ITfComposition, do którego usługa tekstowa przechowuje odwołanie i używa go do modyfikowania i zakończenia kompozycji. Usługa tekstowa kończy kompozycję, wywołując ITfComposition::EndComposition.
Jeśli usługa tekstowa utworzy kompozycje, powinna również obsługiwać atrybuty wyświetlania, aby umożliwić aplikacji wyświetlanie tekstu, który jest częścią kompozycji inaczej niż standardowy tekst. Aby uzyskać więcej informacji, zobacz Zapewnianie atrybutów wyświetlania.
Aplikacji
Aplikacja może monitorować tworzenie, zmienianie i kończenie kompozycji, instalując ujście ITfContextOwnerCompositionSink. Po uruchomieniu kompozycji wywoływana jest ITfContextOwnerCompositionSink::OnStartComposition. Podobnie, gdy skład zostanie zmieniony lub zakończony, ITfContextOwnerCompositionSink::OnUpdateComposition i ITfContextOwnerCompositionSink::OnEndComposition będą wywoływane odpowiednio.
Poniżej przedstawiono typową procedurę aktualizowania dokumentu przy użyciu kompozycji.
- ITextStoreACP::InsertTextAtSelection lub ITextStoreAnchor::InsertTextAtSelection są zwykle używane do wstawiania początkowego tekstu do kompozycji.
- Kompozycja rozpoczyna się od wywołania ITfContextComposition::StartComposition, używając zakresu tekstu zwróconego przez InsertTextAtSelection.
- Po odebraniu nowych danych wejściowych, takich jak mowa lub wpis klawiatury, aplikacja aktualizuje kompozycję za pomocą ITextStoreACP::SetText lub ITextStoreAnchor::SetText.
- Gdy aplikacja ustali, że nadszedł czas na zakończenie kompozycji, wywołuje ITfComposition::EndComposition.
Aplikacja powinna używać atrybutów wyświetlania udostępnianych przez usługę tekstową do modyfikowania wyświetlania tekstu przez cały czas, a nie tylko wtedy, gdy kompozycja jest aktywna. Aby uzyskać więcej informacji, zobacz Używanie atrybutów wyświetlania.
W razie potrzeby aplikacja może zakończyć kompozycję, wywołując metodę ITfContextOwnerCompositionServices::TerminateComposition.