Sprachleiste (Textdienste)

Implementieren des Sprachleistenobjekts

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 ITfSource::AdviseSink mit IID _ ITfLangBarItemSink des Elements aufruft. 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 Arten von Sprachleistenelementen können installiert werden, und jede der erforderlichen Schnittstellen wird aus ITfLangBarItem erstellt. Im Folgenden finden Sie mögliche ITfLangBarItem-Steuerelementelemente.

Element Beschreibung
Schaltfläche Eine Sprachleistenschaltfläche fungiert als Befehlsschaltfläche, Umschaltsteuerelement oder Menü auf der Sprachleiste. Das -Objekt muss die ITfLangBarItemButton-Schnittstelle unterstützen.
Ballon Ein Sprachleistensprechblasen fungiert als Popupbenachrichtigung auf der Sprachleiste. Das -Objekt muss die ITfLangBarItemBalloon-Schnittstelle unterstützen.
Bitmap Eine Sprachleistenbitmap fungiert als statisches Element auf der Sprachleiste, die eine Bitmap anzeigt. Das -Objekt muss die ITfLangBarItemBitmap-Schnittstelle unterstützen.
Bitmapschaltfläche Eine Bitmapschaltfläche der Sprachleiste fungiert als Schaltflächenelement auf der Sprachleiste, in der Text und eine Bitmap angezeigt werden. Das -Objekt muss die ITfLangBarItemBitmapButton-Schnittstelle unterstützen.

Schaltflächenstile

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
Schaltfläche Die Schaltfläche fungiert als Standardbefehlsschaltfläche. Dieses Schaltflächenformat 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 Ein-/Aus-Steuerelement, das einen klickten Zustand ähnlich wie ein Kontrollkästchen verwalten kann. Dieses Schaltflächenformat 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ü. Dieses Schaltflächenformat 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.

Implementieren einer Menüschaltfläche

Wenn der Benutzer auf eine Menüschaltfläche klickt, ruft die Sprachleiste ITfLangBarItemButton::InitMenu auf. 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 erfolgt ist, 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.

Hinzufügen von Elementen zur Sprachleiste

Ein Textdienst sollte seine Elemente der Sprachleiste hinzufügen, wenn seine ITfTextInputProcessor::Activate-Methode aufgerufen wird, und diese entfernen, wenn dessen 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 wird. Der Textdienst verwendet entweder dieselbe ITfLangBarItemMgr-Schnittstelle, die zum Hinzufügen der Elemente verwendet wird, oder erhält eine andere Instanz der Schnittstelle. Der Textdienst ruft dann ITfLangBarItemMgr::RemoveItem mit dem Schnittstellenzeiger des zu entfernenden Elements auf.

Erweitern von Systemsprachleistenelementen

TSF bietet die Möglichkeit, vorhandenen Sprachleistenmenüs Menüelemente 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 die Menüelemente auch in logische Gruppen organisiert werden. Beispielsweise kann ein Textdienst, der dem Standard-Sprachtextdienst zusätzliche Funktionen bietet, dem Menü des Sprachtextdiensts Elemente hinzufügen, anstatt eine eigene Menüschaltfläche auf oberster Ebene hinzuzufügen.

Ein Textdienst stellt eine Sprachleisten-Menü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 zu erweiternde Textdienst ITfSystemLangBarItemSink::InitMenu auf. Die Erweiterung fügt dem Menü Elemente hinzu, indem sie die ITfMenu-Schnittstelle verwendet, die an InitMenu übergeben wird. Wenn der Benutzer ein von der Erweiterung hinzugefügtes Element auswählt, ruft der zu erweiternde Textdienst ITfSystemLangBarItemSink::OnMenuSelect mit dem Bezeichner des ausgewählten Menüelements auf.

Um eine Sprachleisten-Menüerweiterung zu installieren, schließt der Textdienst die folgenden Schritte ab.

  1. 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.
  2. Rufen Sie die ITfSource-Schnittstelle für das zu erweiternde Element ab, indem Sie ITfLangBarItem::QueryInterface mit IID _ ITfSource aufrufen.
  3. 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ützung von Sprachleisten-Menüerweiterungen

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::GetItem erhalten 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.

  1. Wenn ITfSource::AdviseSink mit IID _ ITfSystemLangBarItemSink aufgerufen wird, muss der Textdienst die ITfSystemLangBarItemSink-Schnittstelle speichern und einen Cookiewert zurückgeben, der die Erweiterung identifiziert.
  2. 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 zu identifizieren, im Gegensatz zu den Elementen, die vom Textdienst selbst hinzugefügt werden.
  3. Wenn ITfLangBarItemButton::OnMenuSelect mit einem Menüelementbezeichner aufgerufen wird, der zu einer Erweiterung gehört, ruft der Textdienst die ITfSystemLangBarItemSink::OnMenuSelect-Methode der Erweiterung auf.
  4. Wenn ITfSource::UnadviseSink mit dem entsprechenden Cookie aufgerufen wird, entfernt der Textdienst die Menüerweiterung.

Einrichten von Textdienstframework

Sprachleiste (Anwendungen)