Sprachleiste (Textdienste)
Um das Hinzufügen eines Elements zur Sprachleiste zu unterstützen, muss ein Textdienst ein -Objekt implementieren, das die ITfSource-Schnittstelle und eines der ITfLangBarItem-Steuerelementelemente unterstützt. Wenn das Element installiert ist, installiert die Sprachleiste eine ITfLangBarItemSink-Senke , indem die ITfSource::AdviseSink des Elements mit IID_ITfLangBarItemSink aufgerufen wird. Das Element verwendet die ITfLangBarItemSink-Schnittstelle , um die Sprachleiste über Änderungen zu benachrichtigen, z. B. wenn das Element ausgeblendet, angezeigt, aktiviert oder deaktiviert ist.
Vier Typen von Sprachleistenelementen können installiert werden, und jede der erforderlichen Schnittstellen wird aus ITfLangBarItem erstellt. Im Folgenden sind mögliche ITfLangBarItem-Steuerelementelemente aufgeführt.
Element | BESCHREIBUNG |
---|---|
Taste | Eine Sprachleistenschaltfläche fungiert als Befehlsschaltfläche, als Umschaltsteuerelement oder als Menü auf der Sprachleiste. Das -Objekt muss die ITfLangBarItemButton-Schnittstelle unterstützen. |
Ballon | Eine Sprachleistensprechblase fungiert als Popupbenachrichtigung auf der Sprachleiste. Das -Objekt muss die ITfLangBarItemBalloon-Schnittstelle unterstützen. |
Bitmap | Eine Sprachleisten-Bitmap fungiert als statisches Element auf der Sprachleiste, die eine Bitmap anzeigt. Das -Objekt muss die ITfLangBarItemBitmap-Schnittstelle unterstützen. |
Bitmap-Schaltfläche | Eine Bitmapschaltfläche in der Sprachleiste fungiert als Schaltflächenelement auf der Sprachleiste, die Text und eine Bitmap anzeigt. Das -Objekt muss die ITfLangBarItemBitmapButton-Schnittstelle unterstützen. |
Ein Schaltflächenelement kann wie folgt funktionieren. Die Funktion des Schaltflächenelements wird durch die Flags bestimmt, die im dwStyle-Member der TF_LANGBARITEMINFO-Struktur in der ITfLangBarItem::GetInfo-Methode festgelegt sind.
Element | BESCHREIBUNG |
---|---|
Taste | Die Schaltfläche fungiert als Standardbefehlsschaltfläche. Dieser Schaltflächenstil wird durch den TF_LBI_STYLE_BTN_BUTTON-Stil identifiziert. ITfLangBarItemButton::OnClick wird aufgerufen, wenn auf das Element geklickt wird. ITfLangBarItemButton::InitMenu und ITfLangBarItemButton::OnMenuSelect werden nicht verwendet. |
Umschaltfläche | Die Schaltfläche fungiert als Umschaltsteuerelement, das einen klickten Zustand beibehalten kann, ähnlich wie bei einem Kontrollkästchen. Dieser Schaltflächenstil wird durch den TF_LBI_STYLE_BTN_TOGGLE-Stil identifiziert. ITfLangBarItemButton::OnClick wird aufgerufen, wenn auf das Element geklickt wird. ITfLangBarItemButton::InitMenu und ITfLangBarItemButton::OnMenuSelect werden nicht verwendet. |
Menü | Die Schaltfläche fungiert als Dropdownmenü. Dieser Schaltflächenstil wird durch den TF_LBI_STYLE_BTN_MENU-Stil identifiziert. ITfLangBarItemButton::InitMenu wird aufgerufen, wenn auf die Schaltfläche geklickt wird. Wenn der Benutzer ein Element im Menü auswählt, ruft die Sprachleiste ITfLangBarItemButton::OnMenuSelect mit dem Bezeichner des ausgewählten Menüelements auf. ITfLangBarItemButton::OnClickis wird nicht verwendet. |
Wenn der Benutzer auf eine Menüschaltfläche klickt, ruft die Sprachleiste ITfLangBarItemButton::InitMenu auf. Das Element fügt dem Menü mithilfe der an InitMenu übergebenen ITfMenu-Schnittstelle Elemente hinzu.
Um dem Menü ein Untermenü hinzuzufügen, rufen Sie ITfMenu::AddMenuItem mit TF_LBMENUF_SUBMENU auf. Anschließend wird im ppMenu-Parameter von AddMenuItem ein neues ITfMenu-Objekt zurückgegeben, das das Untermenü darstellt. Dieses neue Menüobjekt wird verwendet, um dem Untermenü Elemente hinzuzufügen.
Wenn der Benutzer ein Element im Menü auswählt, ruft die Sprachleiste ITfLangBarItemButton::OnMenuSelect mit dem Bezeichner des ausgewählten Menüelements auf.
Ein Textdienst sollte seine Elemente der Sprachleiste hinzufügen, wenn seine ITfTextInputProcessor::Activate-Methode aufgerufen wird, und sie entfernen, wenn ITfTextInputProcessor::D eactivate aufgerufen wird.
Um der Sprachleiste ein Element hinzuzufügen, ruft der Textdienst eine ITfLangBarItemMgr-Schnittstelle ab, indem er ITfThreadMgr::QueryInterface mit IID_ITfLangBarItemMgr aufruft. Der Textdienst ruft dann ITfLangBarItemMgr::AddItem mit dem Zeiger auf das Sprachleistenelementobjekt auf.
Der Textdienst muss das Element entfernen, wenn es deaktiviert ist. Der Textdienst verwendet entweder dieselbe ITfLangBarItemMgr-Schnittstelle, die zum Hinzufügen der Elemente verwendet wird, oder ruft eine andere instance der Schnittstelle ab. Der Textdienst ruft dann ITfLangBarItemMgr::RemoveItem mit dem Schnittstellenzeiger des zu entfernenden Elements auf.
TSF bietet die Möglichkeit, menüelemente zu vorhandenen Sprachleistenmenüs hinzuzufügen. Dadurch kann ein Textdienst Dem Menü eines anderen Textdiensts Elemente hinzufügen, ohne der Symbolleiste eine separate Schaltfläche hinzufügen zu müssen. Dadurch können auch die Menüelemente in logischen Gruppen organisiert werden. Beispielsweise kann ein Textdienst, der zusätzliche Features für den Standard-Sprachtextdienst bereitstellt, dem Menü des Sprachtextdiensts Elemente hinzufügen, anstatt eine eigene Menüschaltfläche der obersten Ebene hinzuzufügen.
Ein Textdienst stellt eine Sprachleistenmenüerweiterung bereit, indem er ein -Objekt implementiert, das die ITfSystemLangBarItemSink-Schnittstelle unterstützt. Diese Schnittstelle funktioniert genau wie die ITfLangBarItemButton-Schnittstelle für eine Menüschaltfläche. Wenn das Menü angezeigt wird, ruft der textdienst, der erweitert wird , ITfSystemLangBarItemSink::InitMenu auf. Die Erweiterung fügt dem Menü Elemente mithilfe der ITfMenu-Schnittstelle hinzu, die an InitMenu übergeben wird. Wenn der Benutzer ein element auswählt, das von der Erweiterung hinzugefügt wurde, ruft der textdienst, der erweitert wird , ITfSystemLangBarItemSink::OnMenuSelect mit dem Bezeichner des ausgewählten Menüelements auf.
Um eine Sprachleistenmenüerweiterung zu installieren, führt der Textdienst die folgenden Schritte aus.
- Rufen Sie die ITfLangBarItem-Schnittstelle für das zu erweiternde Element ab, indem Sie ITfLangBarItemMgr::GetItem mit der GUID für das zu erweiternde Element aufrufen.
- Rufen Sie die ITfSource-Schnittstelle für das zu erweiternde Element ab, indem Sie ITfLangBarItem::QueryInterface mit IID_ITfSource aufrufen.
- Rufen Sie ITfSource::AdviseSink mit IID_ITfSystemLangBarItemSink und dem Zeiger auf das ITfSystemLangBarItemSink-Objekt auf. Wenn ITfSource::AdviseSink fehlschlägt, unterstützt der Textdienst keine Menüerweiterungen.
ITfSource::UnadviseSinkITfSource::AdviseSink
Ein Textdienst kann anderen Textdiensten das Hinzufügen von Elementen zu den Menüs der Sprachleiste ermöglichen, wie oben gezeigt. Der Textdienst, der seine GUID veröffentlichen muss, damit das Element durch Aufrufen von ITfLangBarItemMgr::GetItem abgerufen werden kann.
Um Menüerweiterungen zu unterstützen, muss der Textdienst die ITfSource-Schnittstelle unterstützen. Mit den folgenden Schritten wird die Unterstützung für eine oder mehrere Menüerweiterungen aktiviert.
- Wenn ITfSource::AdviseSink mit IID_ITfSystemLangBarItemSink aufgerufen wird, muss der Textdienst die ITfSystemLangBarItemSink-Schnittstelle speichern und einen Cookiewert zurückgeben, der die Erweiterung identifiziert.
- Wenn ITfLangBarItemButton::InitMenu aufgerufen wird, ruft der Textdienst die ITfSystemLangBarItemSink::InitMenu-Methode der Erweiterung auf. Der Textdienst muss eine Möglichkeit implementieren, die von der Erweiterung hinzugefügten Menüelemente im Gegensatz zu den vom Textdienst selbst hinzugefügten Elementen zu identifizieren.
- Wenn ITfLangBarItemButton::OnMenuSelect mit einem Menüelementbezeichner aufgerufen wird, der zu einer Erweiterung gehört, ruft der Textdienst die ITfSystemLangBarItemSink::OnMenuSelect-Methode der Erweiterungen auf.
- Wenn ITfSource::UnadviseSink mit dem entsprechenden Cookie aufgerufen wird, entfernt der Textdienst die Menüerweiterung.