次の方法で共有


UILess モードの概要

UILessMode を作成する方法

スレッドの UI レス化: アプリケーションでは、ITF_AE_UIELEMENTENABLEDONLY と ITfThreadMgrEx::ActivateEx を使用してスレッドを UI レス化できます。 このフラグを使用して ThreadMgr がアクティブ化されると、その UI 要素を制御できる TIP のみがスレッドでアクティブ化されます。 アプリケーションでは、ITfUIElementSink インターフェイスを実装し、インターフェイスにスレッド マネージャーを提供する必要があります。 ITfUIElementSink::BeginUIElement は、TIP がその UI を表示したときに呼び出されます。 アプリケーションは pbShow パラメーターで TRUE を返して、アプリケーションで描画したくない場合に TIP の元の UI を表示できるようにします。 アプリケーションで TIP の UI が許可されていない場合は、pbShow で FALSE を返すことができます (下の図を参照)。 アプリケーションでは、pElement パラメーターからいくつかの情報を取得することで UI を単独で描画できます。 候補リスト、言語バー項目、または TIP のカスタム UI を指定できます。 アプリケーションでは、QIing ITfUIElement インターフェイスによって UI の種類を認識できます。 UI が変更されると ITfUIElementSink::UpdateUIElement が呼び出されます。 アプリケーションでは、pElement->GetGUID() の GUID を比較することで、要素がアプリケーションによって現在描画されているかどうかを確認できます。

TIP の UI レス対応化: ゲーム アプリケーションや全画面表示アプリケーションなどの TIP の UI を許可しないアプリケーションで実行する場合、TIP では UI レス モードをサポートする必要があります。 UI レス対応にするには、TIP で ITfTextInputProcessorEx インターフェイスを実装する必要があります。 このインターフェイスが実装されていない場合、UI レス モード スレッドでは TIP がアクティブ化されません。 さらに、画面に表示される UI を表示する前に、TIP で ITFUIElementMgr::BeginUIElement を呼び出す必要があります。 このメソッドでは、ITfUIElementSink を呼び出すことでアプリケーションに通知します。 また、表示できるかどうかはアプリケーションによって決定されます。 TIP が BeginUIElement() を呼び出す場合、TIP は対応する UI の ITfUIElement インターフェイスを持っている必要があります。 UI を描画するための詳細情報を取得するために、アプリケーションでは別の UI 固有のインターフェイスを取得するためにインターフェイスを QI します。 システムでは、TIP の ITfCandidateListUIElementITfReadingInformationUIElement が事前に定義されています。 TIP で UI レス モード スレッドの下に候補リストを表示する場合、TIP では ITfCandidateListUIElement インターフェイスのインスタンスを作成し、ITFUIElementMgr::BeginUIElement を呼び出す必要があります。 ITfTextInputProcessorEx::ActivateEx が呼び出されると、TIP はスレッドが UI レスであることを既に認識しているため、追加のカスタム UI を排除できます。 ただし、もちろん、QI 可能な独自のインターフェイスを実装して通知を行うことができます。 したがって、TIP と appliITfUIElementcation は、TIP カスタム UI のネゴシエーションを持つことができます。

UIElement をサポートしている TIP

UIElement をサポートする TIP は、GUID_TFCAT_TIPCAP_UIELEMENTENABLED 別に分類する必要があります。 GUID_TFCAT_TIPCAP_UIELEMENTENABLED の TIP では、アプリケーションで UI の表示を制御できるように、ITfUIElementMgr を使用して任意の UI を表示する必要があります。

UIElement の表示/非表示ステータス: ITfUIElement::Show または ITfUIElement::IsShown メソッドによって示される表示/非表示ステータスは実際の表示ステータスです。 UIElement の利用の可否とは関係ありません。 表示ステータスが存在する場合は、UIElement を常に使用できるようにする必要があります。 表示ステータスはアプリケーションから制御できます。 FALSEITfUIElement::Show を呼び出して TIP のすべての UI を非表示にすることで、アプリケーションが突然 UILess モードに移行し、一部の UI を単独で描画し始める場合があります。 その後、TIP ではいくつかのオプションのいずれかを取ることができます。 1) TIP では UIElement を非表示ステータスに遷移させ、UpdateUIElement の生成を開始できます。 2) UI 要素では非表示ステータスをサポートしていないため、TIP では UIElement を終了して EndUIElement() を呼び出して終了できます。

定義済みの UI 要素

候補リスト: 候補リストは、EA 入力の主要な UI 要素の 1 つです。 この UI 要素は、候補リストと、描画の候補文字列の対応する数を提供します。

読み取り情報ウィンドウ 読み取り情報ウィンドウは中国語キーボード入力でよく使用されます。 構成文字列としてドキュメントに挿入できないステージがあります。 一部の中国語入力プロセッサでは、読み取り、音声、または入力の情報を示す小さな読み取り情報ウィンドウが開きます。

UILessMode のフロー チャート

U I LessMode フロー チャートを示した図。

TIP で ITfUIElementMgr::BeginUIElement によって *pbShown by で TRUE を受け取った後、TIP では UIElement の UpdateUIElement を呼び出す必要はありません。 ただし、TIP では EndUIElement() を呼び出して、ITfUIElementMgr とアプリケーションで UIElement のステータスを追跡できるようにする必要があります。 TIP では、BeginUIElement() が *pbShow で FALSE を返した後に UpdateUIElement() を呼び出す必要があります。 UI を描画するアプリケーションでは BeginUIElement() の内容をチェックせず、BeginUIElement() で表示ステータスを返し、UpdateUIElement() で内容のチェックを開始するだけです。 たとえば、候補リスト UIElement の更新フラグには、最初の UpdateUIElement() のすべてのビットがあります。 つまり、UIElement の内容を BeginUIElement() で準備する必要はありません。

TIPP が 'ITUIElementMgr::BeginUIElement()' と 'BeginUIElement of Application's UIElementSink' を呼び出すタイミングを示した図。*pbShow でアプリケーションから FALSE が返されることを示した図。uilessmode フロー チャート

候補リスト UIElement

PageIndex について: 候補リストを描画するアプリケーションでは、リストの内容が変更されたときに (TF_CLUIE_STRING が設定され)、ページあたりの文字列数を計算します。 候補リストが UILess モードで使用できる間は、ページ インデックスを変更しないことが推奨されています。 つまり、TIP の候補リストでは、選択範囲が次のページに移動されたときにスクロールするのではなく、ページングを動作させる必要があります。 選択範囲の移動時にスクロールが行われると、ページ インデックスが変更され、アプリケーションでページ インデックスを再計算する必要があります。 TIP では結果が期待できない場合があります。

選択範囲なし: 候補リストに選択範囲がない場合、ITfCandidateListUIElement::GetSelection は S_FALSE を返します。 最初のパラメーターの戻り値は無効です。