Barre de langue (Services de texte)
Implémentation de l’objet Barre de langage
Pour prendre en charge l’ajout d’un élément à la barre de langue, un service de texte doit implémenter un objet qui prend en charge l’interface ITfSource et l’un des éléments de contrôle ITfLangBarItem . Lorsque l’élément est installé, la barre de langue installe un récepteur ITfLangBarItemSink en appelant ITfSource::AdviseSink de l’élément avec IID_ITfLangBarItemSink. L’élément utilise l’interface ITfLangBarItemSink pour notifier la barre de langue des modifications, par exemple lorsque l’élément est masqué, affiché, activé ou désactivé.
Quatre types d’éléments de barre de langue peuvent être installés et chacune des interfaces requises est créée à partir de ITfLangBarItem. Voici les éléments de contrôle ITfLangBarItem possibles.
Élément | Description |
---|---|
Bouton | Un bouton de barre de langue fonctionne comme un bouton de commande, un contrôle bascule ou un menu dans la barre de langue. L’objet doit prendre en charge l’interface ITfLangBarItemButton. |
Ballon | Une bulle de barre de langue fonctionne comme une notification contextuelle dans la barre de langue. L’objet doit prendre en charge l’interface ITfLangBarItemBalloon. |
Bitmap | Une bitmap de barre de langage fonctionne comme un élément statique dans la barre de langue qui affiche une bitmap. L’objet doit prendre en charge l’interface ITfLangBarItemBitmap. |
Bouton Bitmap | Un bouton bitmap de la barre de langue fonctionne comme un élément de bouton dans la barre de langue qui affiche du texte et une bitmap. L’objet doit prendre en charge l’interface ITfLangBarItemBitmapButton. |
Styles des boutons
Un élément button peut fonctionner comme suit. La fonction de l’élément de bouton est déterminée par les indicateurs définis dans le membre dwStyle de la structure TF_LANGBARITEMINFO dans la méthode ITfLangBarItem::GetInfo .
Élément | Description |
---|---|
Bouton | Le bouton fonctionne comme un bouton de commande standard. Ce style de bouton est identifié par le style TF_LBI_STYLE_BTN_BUTTON. ITfLangBarItemButton::OnClick est appelé lorsque l’utilisateur clique sur l’élément. ITfLangBarItemButton::InitMenu et ITfLangBarItemButton::OnMenuSelect ne sont pas utilisés. |
Bouton bascule | Le bouton fonctionne comme un contrôle bascule qui peut conserver un état cliqué, semblable à une zone de case activée. Ce style de bouton est identifié par le style TF_LBI_STYLE_BTN_TOGGLE. ITfLangBarItemButton::OnClick est appelé lorsque l’utilisateur clique sur l’élément. ITfLangBarItemButton::InitMenu et ITfLangBarItemButton::OnMenuSelect ne sont pas utilisés. |
Menu | Le bouton fonctionne comme un menu déroulant. Ce style de bouton est identifié par le style TF_LBI_STYLE_BTN_MENU. ITfLangBarItemButton::InitMenu est appelé lorsque l’utilisateur clique sur le bouton. Lorsque l’utilisateur sélectionne un élément dans le menu, la barre de langue appelle ITfLangBarItemButton::OnMenuSelect avec l’identificateur de l’élément de menu sélectionné. ITfLangBarItemButton::OnClick n’est pas utilisé. |
Implémentation d’un bouton de menu
Lorsque l’utilisateur clique sur un bouton de menu, la barre de langue appelle ITfLangBarItemButton::InitMenu. L’élément ajoute des éléments au menu à l’aide de l’interface ITfMenu passée à InitMenu.
Pour ajouter un sous-menu au menu, appelez ITfMenu::AddMenuItem avec TF_LBMENUF_SUBMENU. Lorsque cette opération est effectuée, un nouvel objet ITfMenu qui représente le sous-menu est retourné dans le paramètre ppMenu d’AddMenuItem. Ce nouvel objet de menu est utilisé pour ajouter des éléments au sous-menu.
Lorsque l’utilisateur sélectionne un élément dans le menu, la barre de langue appelle ITfLangBarItemButton::OnMenuSelect avec l’identificateur de l’élément de menu sélectionné.
Ajout d’éléments à la barre de langue
Un service de texte doit ajouter ses éléments à la barre de langue lorsque sa méthode ITfTextInputProcessor::Activate est appelée et les supprimer lorsque son ITfTextInputProcessor::D eactivate est appelé.
Pour ajouter un élément à la barre de langue, le service de texte obtient une interface ITfLangBarItemMgr en appelant ITfThreadMgr::QueryInterface avec IID_ITfLangBarItemMgr. Le service de texte appelle ensuite ITfLangBarItemMgr::AddItem avec le pointeur vers l’objet élément de barre de langue.
Le service de texte doit supprimer l’élément lorsqu’il est désactivé. Le service de texte utilise la même interface ITfLangBarItemMgr que celle utilisée pour ajouter les éléments ou obtient une autre instance de l’interface. Le service de texte appelle ensuite ITfLangBarItemMgr::RemoveItem avec le pointeur d’interface de l’élément à supprimer.
Extension des éléments de la barre de langue système
TSF offre la possibilité d’ajouter des éléments de menu à des menus de barre de langue existants. Cela permet à un service de texte d’ajouter des éléments au menu d’un autre service de texte sans avoir à ajouter un bouton distinct à la barre d’outils. Cela permet également d’organiser les éléments de menu en groupes logiques. Par exemple, un service de texte qui fournit des fonctionnalités supplémentaires au service de texte vocal standard peut ajouter des éléments au menu du service de texte vocal au lieu d’ajouter son propre bouton de menu de niveau supérieur.
Un service de texte fournit une extension de menu de barre de langue en implémentant un objet qui prend en charge l’interface ITfSystemLangBarItemSink . Cette interface fonctionne exactement comme l’interface ITfLangBarItemButton pour un bouton de menu. Lorsque le menu s’affiche, le service de texte étendu appelle ITfSystemLangBarItemSink::InitMenu. L’extension ajoute des éléments au menu à l’aide de l’interface ITfMenu passée à InitMenu. Lorsque l’utilisateur sélectionne un élément ajouté par l’extension, le service de texte étendu appelle ITfSystemLangBarItemSink::OnMenuSelect avec l’identificateur de l’élément de menu sélectionné.
Pour installer une extension de menu de barre de langue, le service de texte effectue les étapes suivantes.
- Obtenez l’interface ITfLangBarItem pour l’élément à étendre en appelant ITfLangBarItemMgr::GetItem avec le GUID de l’élément à étendre.
- Obtenez l’interface ITfSource pour l’élément à étendre en appelant ITfLangBarItem::QueryInterface avec IID_ITfSource.
- Appelez ITfSource::AdviseSink avec IID_ITfSystemLangBarItemSink et le pointeur vers l’objet ITfSystemLangBarItemSink . Si ITfSource::AdviseSink échoue, le service de texte ne prend pas en charge les extensions de menu.
ITfSource::UnadviseSinkITfSource::AdviseSink
Prise en charge des extensions de menu de la barre de langue
Un service de texte peut permettre à d’autres services de texte d’ajouter des éléments à ses menus de barre de langue, comme indiqué ci-dessus. Service de texte qui doit publier son GUID afin que l’élément puisse être obtenu en appelant ITfLangBarItemMgr::GetItem.
Pour prendre en charge les extensions de menu, le service de texte doit prendre en charge l’interface ITfSource . Les étapes suivantes activent la prise en charge d’une ou plusieurs extensions de menu.
- Lorsque ITfSource::AdviseSink avec IID_ITfSystemLangBarItemSink est appelé, le service de texte doit stocker l’interface ITfSystemLangBarItemSink et retourner une valeur de cookie qui identifiera l’extension.
- Lorsque ITfLangBarItemButton::InitMenu est appelé, le service de texte appelle la méthode ITfSystemLangBarItemSink::InitMenu de l’extension. Le service de texte doit implémenter un moyen d’identifier les éléments de menu ajoutés par l’extension, par opposition aux éléments ajoutés par le service de texte lui-même.
- Lorsque ITfLangBarItemButton::OnMenuSelect est appelé avec un identificateur d’élément de menu qui appartient à une extension, le service de texte appelle la méthode ITfSystemLangBarItemSink::OnMenuSelect des extensions.
- Lorsque ITfSource::UnadviseSink est appelé avec le cookie approprié, le service de texte supprime l’extension de menu.
Rubriques connexes