Tryb bez interfejsu użytkownika — omówienie

Jak stworzyć tryb bez interfejsu użytkownika

tworzenie wątku bez interfejsu użytkownika: Aplikacja może utworzyć wątek bez interfejsu użytkownika przez ITfThreadMgrEx::ActivateEx za pomocą ITF_AE_UIELEMENTENABLEDONLY. Po aktywowaniu programu ThreadMgr za pomocą tej flagi, w wątku aktywowane są tylko TIPy, które mogą kontrolować jego element interfejsu użytkownika. Aplikacja musi zaimplementować interfejs ITfUIElementSink i zarejestrować interfejs w menedżerze wątków. ITfUIElementSink::BeginUIElement jest wywoływana, gdy funkcja TIP wyświetla interfejs użytkownika. Aplikacja może zwrócić TRUE w parametrze pbShow, aby umożliwić TIP wyświetlanie oryginalnego interfejsu użytkownika TIP, gdy aplikacja nie chce rysować swojego. Jeśli aplikacja nie zezwala na interfejs użytkownika TIP, może zwrócić FALSE w pbShow (zobacz diagramy poniżej). Aplikacja może rysować interfejs użytkownika samodzielnie, uzyskując informacje z parametru pElement. Może to być lista kandydatów, element paska języka lub niestandardowy interfejs użytkownika TIP. Aplikacja może określić rodzaj interfejsu użytkownika, wykorzystując mechanizm QIing ITfUIElement. Po zmianie interfejsu użytkownika wywoływana jest ITfUIElementSink::UpdateUIElement. Aplikacja może porównać identyfikator GUID elementu z pElement->GetGUID(), aby sprawdzić, czy element jest aktualnie rysowany przez aplikację.

Tworzenie TIP bez interfejsu użytkownika: TIP powinien obsługiwać tryb bez interfejsu użytkownika, jeśli ma działać w aplikacjach, które nie zezwalają na obecność interfejsu użytkownika TIP, takich jak aplikacje do gier lub aplikacje pełnoekranowe. Aby być mniej zależnym od interfejsu użytkownika, TIP musi zaimplementować interfejs ITfTextInputProcessorEx. Jeśli ten interfejs nie zostanie zaimplementowany, TIP nie zostanie aktywowany w wątku w trybie bez interfejsu użytkownika. Dodatkowo, TIP musi wywołać ITFUIElementMgr::BeginUIElement przed wyświetleniem widocznego interfejsu użytkownika na ekranie. Ta metoda wykonuje wywołanie ITfUIElementSink, aby powiadomić aplikację. Aplikacja zdecyduje, czy może być wyświetlana, czy nie. Gdy TIP wywołuje funkcję BeginUIElement(), musi mieć interfejs ITfUIElement dla odpowiadającego UI. Aplikacja będzie QI interfejs, aby uzyskać inny specyficzny interfejs użytkownika, aby pobrać więcej informacji potrzebnych do budowania interfejsu użytkownika. Wstępnie zdefiniowane ITfCandidateListUIElement i ITfReadingInformationUIElement dla TIP. Gdy TIP chce wyświetlić listę kandydatów w trybie bez interfejsu użytkownika, musi utworzyć wystąpienie interfejsu ITfCandidateListUIElement i wywołać ITFUIElementMgr::BeginUIElement. Po wywołaniu ITfTextInputProcessorEx::ActivateEx, TIP już wie, że wątek jest bez interfejsu użytkownika, więc może wyeliminować dodatkowy niestandardowy interfejs użytkownika. Jednak oczywiście może zaimplementować własny interfejs, który można wywołać jako zapytanie i spróbować wysłać powiadomienie. W związku z tym funkcja TIP i aplikacjaITfUIElementmogą prowadzić negocjacje dotyczące niestandardowego interfejsu użytkownika TIP.

Element interfejsu użytkownika wspierający TIP

TIP, który obsługuje UIElement, musi być przypisany do kategorii wskazanej przez GUID_TFCAT_TIPCAP_UIELEMENTENABLED. TIP w GUID_TFCAT_TIPCAP_UIELEMENTENABLED musi używać ITfUIElementMgr, aby wyświetlić dowolny element interfejsu użytkownika, tak aby aplikacja mogła kontrolować widoczność tego elementu.

Pokaż/Ukryj stan elementu UIElement: Stan Wyświetlony/Ukryty wskazywany przez metodę ITfUIElement::Show lub ITfUIElement::IsShown jest rzeczywiście widoczny. Nie jest to związane z dostępnością elementu UI. Element interfejsu użytkownika powinien być zawsze dostępny, gdy istnieje status "show". Stan wyświetlania można kontrolować z poziomu aplikacji. Aplikacja może nagle przejść do trybu bez interfejsu użytkownika i rozpocząć rysowanie interfejsu użytkownika samodzielnie, wywołując ITfUIElement::Pokaż z FALSE, aby ukryć cały interfejs użytkownika PORAD. Następnie TIP może wykonać jedną z kilku opcji. 1) TIP może przenieść UIElement do stanu Ukryty i rozpocząć generowanie UpdateUIElement. 2) TIP może zakończyć element UIElement, ponieważ element interfejsu użytkownika nie obsługuje stanu Ukryj, a TIP wywołuje EndUIElement(), aby go zakończyć.

Wstępnie zdefiniowane elementy interfejsu użytkownika

Lista kandydatów: Lista kandydatów jest jednym z głównych elementów interfejsu użytkownika dla wprowadzania danych w EA. Ten element interfejsu użytkownika zawiera listę kandydatów i odpowiednią liczbę ciągów kandydata do rysowania.

Okno informacji do czytania Okno informacji do czytania jest typowe dla chińskich danych wejściowych za pomocą klawiatury. Zawiera on etap, którego nie można wstawić do dokumentu jako ciągu kompozycji. Pewien chiński procesor wejściowy otwiera małe okno z informacjami o odczycie, fonetyce lub wpisywaniu.

Diagram przepływu trybu bez interfejsu użytkownika

Diagram przedstawiający schemat blokowy UI LessMode.

Po tym, jak TIP otrzyma TRUE w *pbShown przez ITfUIElementMgr::BeginUIElement, TIP nie musi wywoływać funkcji UpdateUIElement dla elementu UIElement. TIP musi wywołać metodę EndUIElement(), aby ITfUIElementMgr i aplikacja mogły śledzić stan elementu UIElement. Funkcja TIP musi wywołać metodę UpdateUIElement() po powrocie FALSE w *pbShow. Aplikacja, która chce rysować interfejs użytkownika, nie sprawdza zawartości w funkcji BeginUIElement(), po prostu zwraca status wyświetlania w BeginUIElement() i rozpoczyna sprawdzanie zawartości w UpdateUIElement(). Na przykład flaga aktualizacji elementu UIElement listy kandydatów ma wszystkie bity ustawione w pierwszym wywołaniu UpdateUIElement(). Oznacza to, że zawartość elementu UIElement nie musi być gotowa na beginUIElement().

Diagram, który pokazuje, kiedy T I P wywołuje 'ITUIElementMgr::BeginUIElement()' i 'BeginUIElement elementu UIElementSink aplikacji' jest wywoływany. Diagram przedstawiający, że aplikacja zwraca wartość FALSE w *pbShow. wykres blokowy trybu bez interfejsu użytkownika

Element UIElement listy kandydatów

O stronie PageIndex: Aplikacja, która tworzy listę kandydatów, obliczy liczbę ciągów na stronę, gdy nastąpi zmiana zawartości listy (TF_CLUIE_STRING jest ustawiony). Nie warto zmieniać indeksu strony, gdy lista kandydatów jest dostępna dla trybu bez interfejsu użytkownika. Oznacza to, że lista kandydatów TIP powinna obsługiwać stronicowanie zamiast przewijania po przeniesieniu zaznaczenia do następnej strony. Jeśli przewijanie następuje w momencie przesunięcia zaznaczenia, indeks strony zostaje zmieniony i aplikacja musi ponownie obliczyć indeks strony. Wynik może nie być zgodny z oczekiwaniami TIP.

brak wyboru:ITfCandidateListUIElement::GetSelection zwraca S_FALSE, jeśli lista kandydatów nie ma wyboru. Zwracana wartość pierwszego parametru jest nieprawidłowa.