言語バー (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 を呼び出します。
言語バー メニュー拡張機能をインストールするには、テキスト サービスで次の手順を実行します。
- 拡張するアイテムの GUIDITfLangBarItemMgr::GetItem を呼び出して、拡張する項目の ITfLangBarItem インターフェイスを取得します。
- IID_ITfSourceで ITfLangBarItem::QueryInterface を呼び出して、拡張する項目の ITfSource インターフェイスを取得します。
- IID_ITfSystemLangBarItemSinkと ITfSystemLangBarItemSink オブジェクトへのポインターを使用して、ITfSource::AdviseSink 呼び出します。 ITfSource::AdviseSink が失敗した場合、テキスト サービスはメニュー拡張機能をサポートしません。
ITfSource::UnadviseSinkITfSource::AdviseSink
言語バーのメニュー拡張機能のサポート
テキスト サービスを使用すると、上に示すように、他のテキスト サービスで言語バーのメニューに項目を追加できます。 ITfLangBarItemMgr::GetItem 呼び出してアイテムを取得できるように、GUID を発行する必要があるテキスト サービス。
メニュー拡張機能をサポートするには、テキスト サービスが ITfSource インターフェイスをサポートする必要があります。 次の手順では、1 つ以上のメニュー拡張機能のサポートを有効にします。
- IID_ITfSystemLangBarItemSinkを使用して ITfSource::AdviseSink を する場合、テキスト サービスは ITfSystemLangBarItemSink インターフェイスを格納し、拡張機能を識別する Cookie 値を返す必要があります。
- ITfLangBarItemButton::InitMenu 呼び出されると、テキスト サービスは拡張機能の ITfSystemLangBarItemSink::InitMenu メソッドを呼び出します。 テキスト サービスは、テキスト サービス自体によって追加された項目とは対照的に、拡張機能によって追加されたメニュー項目を識別する方法を実装する必要があります。
- ITfLangBarItemButton::OnMenuSelect が拡張機能に属するメニュー項目識別子を使用して呼び出されると、テキスト サービスは拡張機能の ITfSystemLangBarItemSink::OnMenuSelect メソッドを呼び出します。
- ITfSource::UnadviseSink が適切な Cookie で呼び出されると、テキスト サービスによってメニュー拡張機能が削除されます。
関連トピック