Sprachenleiste (Textdienste)
Implementieren des Language Bar-Objekts
Um das Hinzufügen eines Elements zur Sprachenleiste zu unterstützen, muss ein Textdienst ein Objekt implementieren, das die ITfSource Schnittstelle und eine der ITfLangBarItem- Steuerelementelemente unterstützt. Wenn das Element installiert ist, installiert die Sprachenleiste eine ITfLangBarItemSink- sinken, indem die ITfSource::AdviseSink- mit IID_ITfLangBarItemSink aufgerufen wird. Das Element verwendet die ITfLangBarItemSink Schnittstelle, um die Sprachleiste von Änderungen zu benachrichtigen, z. B. wenn das Element ausgeblendet, angezeigt, aktiviert oder deaktiviert ist.
Vier Arten von Sprachleistenelementen können installiert werden, und jede der erforderlichen Schnittstellen wird aus ITfLangBarItemerstellt. Im Folgenden sind ITfLangBarItem Steuerelementelemente möglich.
Element | Beschreibung |
---|---|
Knopf | Eine Sprachenleistenschaltfläche fungiert als Befehlsschaltfläche, umschaltbares Steuerelement oder menü auf der Sprachenleiste. Das Objekt muss die ITfLangBarItemButton-Schnittstelle unterstützen. |
Luftballon | Eine Sprachleistensprechblase funktioniert als Popupbenachrichtigung auf der Sprachenleiste. Das Objekt muss die ITfLangBarItemBalloon-Schnittstelle unterstützen. |
Bitmap | Eine Sprachleistenbitmap fungiert als statisches Element auf der Sprachenleiste, das eine Bitmap anzeigt. Das Objekt muss die ITfLangBarItemBitmap-Schnittstelle unterstützen. |
Bitmapschaltfläche | Eine Bitmapschaltfläche für die Sprachenleiste funktioniert als Schaltflächenelement auf der Sprachenleiste, die Text und eine Bitmap anzeigt. Das Objekt muss die ITfLangBarItemBitmapButton-Schnittstelle unterstützen. |
Schaltflächenformatvorlagen
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 |
---|---|
Knopf | Die Schaltfläche fungiert als Standardbefehlsschaltfläche. Diese Schaltflächenformatvorlage wird durch die formatvorlage TF_LBI_STYLE_BTN_BUTTON 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 geklickten Zustand beibehalten kann, ähnlich wie ein Kontrollkästchen. Diese Schaltflächenformatvorlage wird durch die TF_LBI_STYLE_BTN_TOGGLE Formatvorlage 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ü. Diese Schaltflächenformatvorlage wird durch die formatvorlage TF_LBI_STYLE_BTN_MENU identifiziert. ITfLangBarItemButton::InitMenu wird aufgerufen, wenn auf die Schaltfläche geklickt wird. Wenn der Benutzer ein Element im Menü auswählt, ruft die Sprachenleiste ITfLangBarItemButton::OnMenuSelect mit dem Bezeichner des ausgewählten Menüelements auf. ITfLangBarItemButton::OnClickis nicht verwendet. |
Implementieren einer Menüschaltfläche
Wenn der Benutzer auf eine Menüschaltfläche klickt, ruft die Sprachenleiste ITfLangBarItemButton::InitMenuauf. Das Element fügt dem Menü Elemente mithilfe der ITfMenu Schnittstelle hinzu, die an InitMenu übergeben wird.
Um dem Menü ein Untermenü hinzuzufügen, rufen Sie ITfMenu::AddMenuItem- mit TF_LBMENUF_SUBMENU auf. Wenn dies geschieht, wird ein neues ITfMenu-Objekt, das das Untermenü darstellt, im ppMenu Parameter von AddMenuItem zurückgegeben. 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.
Hinzufügen von Elementen zur Sprachenleiste
Ein Textdienst sollte seine Elemente zur Sprachenleiste hinzufügen, wenn die ITfTextInputProcessor::Activate-Methode aufgerufen und entfernt wird, wenn die ITfTextInputProcessor::D eactivate aufgerufen wird.
Um der Sprachenleiste ein Element hinzuzufügen, ruft der Textdienst ein ITfLangBarItemMgr Schnittstelle ab, indem ITfThreadMgr::QueryInterface mit IID_ITfLangBarItemMgr aufgerufen wird. Der Textdienst ruft dann ITfLangBarItemMgr::AddItem mit dem Zeiger auf das Objekt der Sprachenleiste auf.
Der Textdienst muss das Element beim Deaktivieren entfernen. Der Textdienst verwendet entweder dieselbe ITfLangBarItemMgr Schnittstelle, die zum Hinzufügen der Elemente verwendet wird, oder ruft eine andere Instanz der Schnittstelle ab. Der Textdienst ruft dann ITfLangBarItemMgr::RemoveItem mit dem Schnittstellenzeiger des zu entfernenden Elements auf.
Erweitern von Systemsprachenleistenelementen
TSF bietet die Möglichkeit, Menüelemente zu vorhandenen Sprachleistenmenüs hinzuzufügen. Dadurch kann ein Textdienst elemente zum Menü eines anderen Textdiensts hinzufügen, ohne der Symbolleiste eine separate Schaltfläche hinzufügen zu müssen. Dadurch können die Menüelemente auch in logische Gruppen organisiert werden. Beispielsweise kann ein Textdienst, der zusätzliche Features für den Standardmäßigen Sprachtextdienst bereitstellt, dem Sprachtextdienstmenü Elemente hinzufügen, anstatt eine eigene Menüschaltfläche der obersten Ebene hinzuzufügen.
Ein Textdienst stellt eine Sprachleistenmenüerweiterung bereit, indem ein Objekt implementiert wird, 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 erweitert aufruft ITfSystemLangBarItemSink::InitMenu. Die Erweiterung fügt dem Menü Elemente mithilfe der ITfMenu Schnittstelle hinzu, die an InitMenuübergeben wird. Wenn der Benutzer ein Von der Erweiterung hinzugefügtes Element auswählt, wird der Textdienst ITfSystemLangBarItemSink::OnMenuSelect mit dem Bezeichner des ausgewählten Menüelements erweitert.
Um eine Menüerweiterung für die Sprachenleiste 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- aufrufen, damit das Element erweitert werden soll.
- 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
Unterstützen von Menüerweiterungen in der Sprachenleiste
Ein Textdienst kann anderen Textdiensten das Hinzufügen von Elementen zu den Sprachleistenmenüs ermöglichen, wie oben gezeigt. Der Textdienst, der seine GUID veröffentlichen muss, damit das Element durch Aufrufen von ITfLangBarItemMgr::GetItemabgerufen werden kann.
Zur Unterstützung von Menüerweiterungen 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, um die von der Erweiterung hinzugefügten Menüelemente im Gegensatz zu den Elementen zu identifizieren, die vom Textdienst selbst hinzugefügt wurden.
- Wenn ITfLangBarItemButton::OnMenuSelect mit einem Menüelementbezeichner aufgerufen wird, der zu einer Erweiterung gehört, ruft der Textdienst die ITfSystemLangBarItemSink::OnMenuSelect-Methode auf.
- Wenn ITfSource::UnadviseSink mit dem entsprechenden Cookie aufgerufen wird, entfernt der Textdienst die Menüerweiterung.
Verwandte Themen