次の方法で共有


言語バー (Text Services)

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

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

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

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

 

ボタンのスタイル

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

要素 形容
ボタン ボタンは標準のコマンド ボタンとして機能します。 このボタン スタイルは、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 インターフェイスを使用して、メニューに項目を追加します。

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

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

言語バーへの項目の追加

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

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

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

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

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

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

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

  1. 拡張するアイテムの GUIDITfLangBarItemMgr::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 Framework を設定する方法

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