Aperçu du mode sans interface utilisateur

Comment créer un mode sans interface utilisateur

Créer un thread sans interface utilisateur : L’application peut créer un thread sans interface utilisateur en utilisant ITfThreadMgrEx::ActivateEx avec ITF_AE_UIELEMENTENABLEDONLY. Lorsque ThreadMgr est activé avec cet indicateur, seuls les TIPs pouvant contrôler leur élément d’interface utilisateur sont activés sur le thread. L’application doit implémenter l’interface ITfUIElementSink et conseiller l’interface dans le gestionnaire de threads. ITfUIElementSink::BeginUIElement est appelé lorsque TIP affiche son interface utilisateur. L’application peut retourner TRUE dans le paramètre pbShow pour permettre à TIP d’afficher son interface utilisateur d’origine lorsque l’application ne souhaite pas dessiner. Si l’application ne permet pas l’interface utilisateur de TIP, elle peut retourner FALSE dans pbShow (voir les diagrammes ci-dessous). L’application peut dessiner l’interface utilisateur elle-même en obtenant des informations à partir du paramètre pElement. Cela pourrait être la liste des candidats, l’élément de la barre de langue ou l’interface utilisateur personnalisée de TIP. L’application peut connaître le type d’interface utilisateur en interrogeant l’interface ITfUIElement. Lorsque l’interface utilisateur est modifiée, ITfUIElementSink::UpdateUIElement est appelé. L’application peut comparer le GUID à partir de pElement->GetGUID() pour savoir si l’élément est actuellement dessiné par l’application.

Créer un TIP conscient du mode sans interface utilisateur : TIP doit prendre en charge le mode sans interface utilisateur s’il souhaite fonctionner sous l’application qui ne veut pas permettre l’interface utilisateur de TIP, comme les applications de jeu ou les applications en plein écran. Pour être conscient du mode sans interface utilisateur, TIP doit implémenter l’interface ITfTextInputProcessorEx. Si cette interface n’est pas implémentée, TIP ne sera pas activé sous le thread en mode sans interface utilisateur. De plus, TIP doit appeler ITFUIElementMgr::BeginUIElement avant d’afficher une interface utilisateur visible à l’écran. Cette méthode appelle ITfUIElementSink pour notifier l’application. Et l’application décidera si elle peut être affichée ou non. Lorsque TIP appelle BeginUIElement(), TIP doit avoir l’interface ITfUIElement pour l’interface utilisateur correspondante. L’application interrogera l’interface pour obtenir une autre interface utilisateur spécifique afin de récupérer plus d’informations pour dessiner l’interface utilisateur. Le système prédéfinit ITfCandidateListUIElement et ITfReadingInformationUIElement pour TIP. Lorsque TIP veut afficher la liste des candidats sous le thread en mode sans interface utilisateur, TIP doit créer une instance de l’interface ITfCandidateListUIElement et appeler ITFUIElementMgr::BeginUIElement. Lorsque ITfTextInputProcessorEx::ActivateEx est appelé, TIP sait déjà que le thread est en mode sans interface utilisateur, donc il peut éliminer l’interface utilisateur personnalisée supplémentaire. Cependant, bien sûr, il peut implémenter sa propre interface qui peut être interrogée et essayer de faire une notification. Ainsi, TIP et l’application ITfUIElement peuvent avoir une négociation pour l’interface utilisateur personnalisée de TIP.

TIP supportant UIElement

Le TIP qui prend en charge UIElement doit être catégorisé par GUID_TFCAT_TIPCAP_UIELEMENTENABLED. Le TIP dans GUID_TFCAT_TIPCAP_UIELEMENTENABLED doit utiliser ITfUIElementMgr pour afficher toute interface utilisateur afin que l’application puisse contrôler la visibilité de l’interface utilisateur.

Statut d’affichage/masquage de UIElement : Le statut d’affichage/masquage indiqué par ITfUIElement::Show ou ITfUIElement::IsShown est le statut visible réel. Il n’est pas lié à la disponibilité de UIElement. UIElement doit toujours être disponible lorsque le statut d’affichage existe. Le statut d’affichage est contrôlable par l’application. L’application peut soudainement passer en mode sans interface utilisateur et commencer à dessiner une interface utilisateur par elle-même, en appelant ITfUIElement::Show avec FALSE pour masquer toute l’interface utilisateur de TIP. Ensuite, TIP peut prendre l’une des options suivantes. 1) TIP peut déplacer UIElement vers le statut Masqué et commencer à générer UpdateUIElement. 2) TIP peut terminer UIElement car l’élément d’interface utilisateur ne prend pas en charge le statut Masqué et TIP appelle EndUIElement() pour le terminer.

Éléments d’interface utilisateur prédéfinis

Liste des candidats : La liste des candidats est l’un des principaux éléments d’interface utilisateur pour la saisie EA. Cet élément d’interface utilisateur fournit la liste des candidats et le numéro correspondant des chaînes de candidats pour le dessin.

La fenêtre d’information de lecture : La fenêtre d’information de lecture est courante pour la saisie au clavier chinois. Elle a l’étape qui ne peut pas être insérée dans le document comme la chaîne de composition. Certains processeurs de saisie chinois ouvrent une petite fenêtre d’information de lecture qui affiche la lecture, phonétique ou les informations de frappe.

Le diagramme du flux de UILessMode

Diagramme montrant le flux de UILessMode.

Après que TIP ait reçu TRUE dans *pbShown par ITfUIElementMgr::BeginUIElement, TIP n’a pas besoin d’appeler UpdateUIElement pour UIElement. Mais TIP doit appeler EndUIElement() afin que ITfUIElementMgr et l’application puissent suivre le statut de UIElement. TIP doit appeler UpdateUIElement() après que BeginUIElement() retourne FALSE dans *pbShow. L’application qui souhaite dessiner l’interface utilisateur ne vérifie pas le contenu dans BeginUIElement(), elle retourne simplement le statut d’affichage dans BeginUIElement() et commence à vérifier le contenu dans UpdateUIElement(). Par exemple, le drapeau de mise à jour de UIElement de la liste des candidats a tous les bits lors du premier UpdateUIElement(). Cela signifie que le contenu de UIElement n’a pas besoin d’être prêt dans BeginUIElement().

Diagramme montrant quand TIP appelle ’ITUIElementMgr::BeginUIElement()’ et ’BeginUIElement de UIElementSink de l’application’ est appelé.Diagramme montrant que l’application retourne FALSE dans *pbShow.flux de UILessMode

L’élément d’interface utilisateur de la liste des candidats

À propos de PageIndex : L’application qui dessine la liste des candidats calculera le nombre de chaînes par page lorsque le contenu de la liste est modifié (TF_CLUIE_STRING est défini). Il n’est pas bon de changer l’index de page tant que la liste des candidats est disponible en mode sans interface utilisateur. Cela signifie que la liste des candidats de TIP doit se comporter en pagination plutôt qu’en défilement lorsque la sélection est déplacée vers la page suivante. Si le défilement se produit lorsque la sélection est déplacée, l’index de page est modifié et l’application doit recalculer l’index de page. Le résultat peut ne pas être attendu par TIP.

Aucune sélection : ITfCandidateListUIElement::GetSelection retourne S_FALSE, si la liste des candidats n’a pas de sélection. La valeur de retour du premier paramètre n’est pas valide.