言語バー (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 を呼び出します。
言語バー メニュー拡張機能をインストールするには、テキスト サービスで次の手順を実行します。
- 拡張するアイテムの GUID を使用して ITfLangBarItemMgr::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 で呼び出されると、テキスト サービスによってメニュー拡張機能が削除されます。
関連トピック