Udostępnij przez


Ciąg kompozycji

Ciąg kompozycji jest bieżącym tekstem w oknie kompozycji. Jest to tekst, który IME konwertuje na znaki końcowe. Każdy ciąg kompozycji składa się z co najmniej jednego "klauzuli". Klauzula to najmniejsza kombinacja znaków, którą edytor IME może przekonwertować na końcowy znak. Aby uzyskać i ustawić ciąg kompozycji, aplikacja wywołuje odpowiednio funkcje ImmGetCompositionString i ImmSetCompositionString.

Gdy użytkownik wprowadza tekst w oknie kompozycji, edytor IME śledzi stan ciągu kompozycji. Ten stan obejmuje informacje o atrybutach, informacje o klauzuli, informacje o wpisywaniu i położenie kursora. Aplikacja może pobrać stan kompozycji przy użyciu funkcji ImmGetCompositionString.

Informacje o atrybutach są renderowane w tablicy 8-bitowych wartości, które określają stan znaków w łańcuchu kompozycji. Wszystkie znaki jednej klauzuli muszą mieć ten sam atrybut. Tablica zawiera jedną wartość dla każdego bajtu w ciągu, w tym jeden bajt dla pierwszego i drugiego bajtu dowolnych znaków dwubajtowych w ciągu. Dla każdej wartości w tablicy bity od 0 do 3 mogą być jedną kombinacją następujących wartości.

Wartość Znaczenie
ATTR_INPUT Znak wprowadzany przez użytkownika. Protokół IME nie został jeszcze przekonwertowany na ten znak.
BŁĄD_WPROWADZANIA_ATTR Znak błędu, którego nie można przekonwertować za pomocą protokołu IME. Na przykład protokół IME nie może połączyć niektórych spółgłosek.
CEL_PRZEKONWERTOWANY Znak wybrany przez użytkownika, a następnie przekonwertowany przez IME.
ATTR_PRZEKONWERTOWANE Znak, który został już przekonwertowany przez protokół IME.
ATTR_TARGET_NOTCONVERTED Konwertowany jest znak. Użytkownik wybrał ten znak, ale edytor IME jeszcze go nie przekonwertował.
ATR_ZAMOCOWANASTALA Znaki, które nie będą już konwertowane przez IME.

 

Wszystkie inne wartości są zarezerwowane. W języku japońskim każdy niekonwertowany znak mający atrybut ATTR_INPUT jest znakiem hiragany, katakany lub alfanumerycznym. W języku koreańskim ten atrybut reprezentuje znak Hangul, który nie został jeszcze przekonwertowany przez protokół IME. W języku chińskim tradycyjnym i uproszczonym każdy edytor IME może ograniczyć znaki do określonego zakresu.

Informacje o klauzuli zawarte w stanie ciągu kompozycji to tablica 32-bitowych wartości, która określa pozycje klauzul w ciągu kompozycji. Tablica zawiera jedną wartość dla każdej klauzuli i końcową wartość, która określa długość pełnego ciągu. Każda wartość w tablicy określa przesunięcie w bajtach od początku łańcucha do klauzuli. Pierwsza wartość jest zawsze 0, ponieważ pierwsza klauzula zawsze zaczyna się na początku ciągu. Jeśli na przykład ciąg ma dwie klauzule, informacje o klauzuli mają trzy wartości: pierwsza wartość to 0, druga wartość jest przesunięciem drugiej klauzuli, a trzecia wartość to długość ciągu. W przypadku formatu Unicode pozycja klauzuli jest liczone w znakach Unicode, a długość ciągu to rozmiar znaków Unicode.

Informacje o wpisywaniu zawarte w stanie ciągu kompozycji to ciąg znaków zakończony o wartości null reprezentujący znaki wprowadzane przez użytkownika na klawiaturze.

Pozycja kursora w stanie ciągu kompozycji jest wartością wskazującą położenie kursora względem znaków w ciągu kompozycji. Wartość jest offsetem w bajtach od początku ciągu. Jeśli ta wartość to 0, kursor znajduje się bezpośrednio przed pierwszym znakiem w ciągu. Jeśli wartość jest równa długości ciągu, kursor jest natychmiast po ostatnim znaku. Jeśli wartość to 1, kursor nie jest obecny. W przypadku formatu Unicode zarówno pozycja, jak i długość są mierzone w znakach Unicode.

Aplikacja może ustawić ciąg kompozycji lub elementy stanu kompozycji przy użyciu funkcji ImmSetCompositionString. Aby upewnić się, że okno kompozycji aktualizuje wygląd na podstawie tych zmian, funkcja umożliwia aplikacji wysyłanie komunikatu powiadomienia do okna. Aplikacje, które ustawiają kombinację elementów stanu kompozycji, zwykle wyłączają powiadomienia dla wszystkich wywołań tej funkcji z wyjątkiem ostatniego, aby wygenerowany został tylko jeden komunikat powiadomienia dla okna kompozycji.

Na koniec kontrolka edycji obsługuje dwa komunikaty służące do zmieniania obsługi ciągów kompozycji przez edytor IME. Aby uzyskać więcej informacji, zobacz EM_GETIMESTATUS i EM_SETIMESTATUS. Aby uzyskać więcej informacji na temat kontrolki edycji, zobacz Edit Control.

Informacje o menedżerze metod wejściowych