言語バー (Text Services)

言語バー オブジェクトの実装

言語バーへの項目の追加をサポートするには、テキスト サービスで ITfSource インターフェイスと ITfLangBarItem コントロール要素の 1 つをサポートするオブジェクトを実装する必要があります。 項目がインストールされると、言語バーは、IID_ITfLangBarItemSinkを使用して項目の ITfSource::AdviseSink を呼び出すことによって ITfLangBarItemSink シンクをインストールします。 アイテムは 、ITfLangBarItemSink インターフェイスを使用して、アイテムが非表示、表示、有効、または無効になっている場合など、言語バーに変更を通知します。

4 種類の言語バー項目をインストールでき、必要な各インターフェイスが ITfLangBarItem から作成されます。 ITfLangBarItem コントロール要素の例を次に示します。

要素 説明
Button 言語バー ボタンは、コマンド ボタン、トグル コントロール、または言語バーのメニューとして機能します。 オブジェクトは ITfLangBarItemButton インターフェイスをサポートしている必要があります。
バルーン 言語バーバルーンは、言語バーのポップアップ通知として機能します。 オブジェクトは ITfLangBarItemBalloon インターフェイスをサポートしている必要があります。
Bitmap 言語バービットマップは、ビットマップを表示する言語バーの静的要素として機能します。 オブジェクトは ITfLangBarItemBitmap インターフェイスをサポートしている必要があります。
[ビットマップ] ボタン 言語バーのビットマップ ボタンは、テキストとビットマップを表示する言語バーのボタン要素として機能します。 オブジェクトは、ITfLangBarItemBitmapButton インターフェイスをサポートする必要があります。

 

ボタン スタイル

button 要素は、次のいずれかとして機能します。 ボタン項目の関数は、ITfLangBarItem::GetInfo メソッドのTF_LANGBARITEMINFO構造体の dwStyle メンバーに設定されたフラグによって決まります。

要素 説明
Button ボタンは標準のコマンド ボタンとして機能します。 このボタン スタイルは、TF_LBI_STYLE_BTN_BUTTON スタイルによって識別されます。 アイテムがクリックされると、ITfLangBarItemButton::OnClick が呼び出されます。 ITfLangBarItemButton::InitMenu および ITfLangBarItemButton::OnMenuSelect は使用されません。
トグル ボタン ボタンは、チェック ボックスと同様に、クリックされた状態を維持できるトグル コントロールとして機能します。 このボタン スタイルは、TF_LBI_STYLE_BTN_TOGGLE スタイルで識別されます。 アイテムがクリックされると、ITfLangBarItemButton::OnClick が呼び出されます。 ITfLangBarItemButton::InitMenu および ITfLangBarItemButton::OnMenuSelect は使用されません。
メニュー ボタンはドロップダウン メニューとして機能します。 このボタン スタイルは、TF_LBI_STYLE_BTN_MENU スタイルで識別されます。 ボタンがクリックされると、ITfLangBarItemButton::InitMenu が呼び出されます。 ユーザーがメニュー内の項目を選択すると、言語バーは、選択したメニュー項目の識別子を使用して ITfLangBarItemButton::OnMenuSelect を呼び出します。 ITfLangBarItemButton::OnClickis は使用されません。

 

メニュー ボタンの実装

ユーザーがメニュー ボタンをクリックすると、言語バーは ITfLangBarItemButton::InitMenu を呼び出します。 項目は、InitMenu に渡される ITfMenu インターフェイスを使用してメニューに項目を追加します。

メニューにサブメニューを追加するには、 ITfMenu::AddMenuItem をTF_LBMENUF_SUBMENUで呼び出します。 これを行うと、サブメニューを表す新しい ITfMenu オブジェクトが AddMenuItem の ppMenu パラメーターで返されます。 この新しいメニュー オブジェクトは、サブメニューに項目を追加するために使用されます。

ユーザーがメニュー内の項目を選択すると、言語バーは、選択したメニュー項目の識別子を使用して ITfLangBarItemButton::OnMenuSelect を呼び出します。

言語バーへの項目の追加

テキスト サービスは、 ITfTextInputProcessor::Activate メソッドが呼び出されたときにその項目を言語バーに追加し、 ITfTextInputProcessor::D eactivate が呼び出されたときにそれらを削除する必要があります。

言語バーに項目を追加するために、テキスト サービスは ITfThreadMgr::QueryInterface を呼び出して ITfLangBarItemMgr インターフェイスを取得IID_ITfLangBarItemMgr。 テキスト サービスは、言語バー項目オブジェクトへのポインターを使用して ITfLangBarItemMgr::AddItem を呼び出します。

テキスト サービスは、非アクティブ化時にアイテムを削除する必要があります。 テキスト サービスは、項目の追加に使用されたのと同じ ITfLangBarItemMgr インターフェイスを使用するか、インターフェイスの別のインスタンスを取得します。 その後、テキスト サービスは、削除する項目のインターフェイス ポインターを使用して ITfLangBarItemMgr::RemoveItem を呼び出します。

システム言語バー項目の拡張

TSF は、既存の言語バー メニューにメニュー項目を追加する機能を提供します。 これにより、テキスト サービスは、ツールバーに別のボタンを追加しなくても、別のテキスト サービスのメニューに項目を追加できます。 これにより、メニュー項目を論理グループに編成することもできます。 たとえば、標準の音声テキスト サービスに追加機能を提供するテキスト サービスでは、独自の最上位メニュー ボタンを追加するのではなく、音声テキスト サービス メニューに項目を追加できます。

テキスト サービスは、 ITfSystemLangBarItemSink インターフェイスをサポートするオブジェクトを実装することで、言語バー メニュー拡張機能を提供します。 このインターフェイスは、メニュー ボタンの ITfLangBarItemButton インターフェイスとまったく同じように機能します。 メニューが表示されると、拡張されているテキスト サービスは ITfSystemLangBarItemSink::InitMenu を呼び出します。 拡張機能は、InitMenu に渡される ITfMenu インターフェイスを使用してメニューに項目を追加します。 ユーザーが拡張機能によって追加された項目を選択すると、拡張されるテキスト サービスは、選択したメニュー項目の識別子を使用して ITfSystemLangBarItemSink::OnMenuSelect を呼び出します。

言語バー メニュー拡張機能をインストールするには、テキスト サービスで次の手順を実行します。

  1. 拡張するアイテムの GUID を使用して ITfLangBarItemMgr::GetItem を呼び出して、拡張する項目の ITfLangBarItem インターフェイスを取得します。
  2. IID_ITfSourceを使用して ITfLangBarItem ::QueryInterface を呼び出して、拡張する項目の ITfSource インターフェイスを取得します。
  3. IID_ITfSystemLangBarItemSinkと ITfSystemLangBarItemSink オブジェクトへのポインターを使用して ITfSource::AdviseSink を呼び出します。 ITfSource::AdviseSink が失敗した場合、テキスト サービスはメニュー拡張機能をサポートしません。

ITfSource::UnadviseSinkITfSource::AdviseSink

言語バー メニュー拡張機能のサポート

テキスト サービスを使用すると、上記のように、他のテキスト サービスで言語バー メニューに項目を追加できます。 ITfLangBarItemMgr::GetItem を呼び出してアイテムを取得できるように、GUID を発行する必要があるテキスト サービス。

メニュー拡張機能をサポートするには、テキスト サービスで ITfSource インターフェイスをサポートする必要があります。 次の手順では、1 つ以上のメニュー拡張機能のサポートを有効にします。

  1. IID_ITfSystemLangBarItemSinkを持つ ITfSource::AdviseSink が呼び出されると、テキスト サービスは ITfSystemLangBarItemSink インターフェイスを格納し、拡張機能を識別する Cookie 値を返す必要があります。
  2. ITfLangBarItemButton::InitMenu が呼び出されると、テキスト サービスは拡張機能の ITfSystemLangBarItemSink::InitMenu メソッドを呼び出します。 テキスト サービスは、テキスト サービス自体によって追加された項目ではなく、拡張機能によって追加されたメニュー項目を識別する方法を実装する必要があります。
  3. ITfLangBarItemButton::OnMenuSelect が拡張機能に属するメニュー項目識別子を使用して呼び出されると、テキスト サービスは拡張機能の ITfSystemLangBarItemSink::OnMenuSelect メソッドを呼び出します。
  4. ITfSource::UnadviseSink が適切な Cookie で呼び出されると、テキスト サービスによってメニュー拡張機能が削除されます。

Text Services フレームワークを設定する方法

言語バー (アプリケーション)