埋め込みオブジェクト (Text Services Framework)

Text Services Framework を使用すると、テキスト サービスでオブジェクトをアプリケーション テキスト ストリームに埋め込むことができます。 埋め込みオブジェクトは 、TS_CHAR_EMBEDDED値を使用してテキスト ストリームに挿入されます。 この値は、16 進表記を使用して Unicode オブジェクト置換文字 U+fffc に解決されます。 たとえば、次の図は、日本語の表意文字 hi を表す埋め込みオブジェクトのレンダリングを、"Sun" の英語翻訳を表す Unicode 文字のシーケンスと組み合わせて示しています。

埋め込みオブジェクトの文字エンコード

図の一番上の行には、"Sun" という単語の後に sun,hi の日本語文字が続く、翻訳されたテキストが含まれています。 図の中央の行は Unicode 文字を示しています。 U+fffc の場合、これはオブジェクト置換文字です。 図の一番下の行は、各文字の 16 進数の値を示しています。

アプリケーションでの埋め込みオブジェクトのサポート

TSF マネージャーは、ACP ベースのアプリケーションの 場合は ITextStoreACP::InsertEmbedded を呼び出し、アンカーベースのアプリケーションの場合は ITextStoreAnchor::InsertEmbedded を呼び出して、埋め込みオブジェクトをテキスト ストリームに挿入します。 埋め込みオブジェクトが挿入されると、アプリケーションは、オブジェクトが埋め込まれている文字位置 (またはアンカー位置) に TS_CHAR_EMBEDDED 値を配置し、埋め込みオブジェクトに関連付けられている IDataObject を格納する必要があります。 ITextStoreACP::GetText または ITextStoreAnchor::GetText が呼び出され、取得したテキスト内に埋め込みオブジェクトが含まれている場合、TS_CHAR_EMBEDDED値は埋め込みオブジェクトの存在と場所を示します。 埋め込みオブジェクトを取得するには、埋め込みオブジェクトの文字位置を指定して ITextStoreACP::GetEmbedded を呼び出すか、埋め込みオブジェクトのアンカー位置で ITextStoreAnchor::GetEmbedded を呼び出します。

アプリケーションは通常、埋め込みオブジェクトの内容を認識しません。 アプリケーションは、オブジェクト自体から表示情報の取得を試みることができます。 埋め込みオブジェクトが、アプリケーションが認識する形式 (CF_UNICODETEXTやCF_BITMAPなど) でデータを提供できる場合、アプリケーションはオブジェクトによって提供されるグラフィック情報を表示できます。

埋め込みオブジェクトの挿入

テキスト サービスは、 ITfRange::InsertEmbedded または ITfInsertAtSelection::InsertEmbeddedAtSelection を呼び出して、埋め込みオブジェクトをコンテキストに挿入します。 テキスト サービスは、埋め込み IDataObject を指定する必要があります。