Win32 API 日本語リファレンス
ホームGraphics.DirectWrite › IDWriteTextFormat

IDWriteTextFormat

COM
IID9c906818-31d7-4fd3-a151-7c5e225db55a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IDWriteTextFormat インターフェイスは、テキストの書式設定に使用するフォントおよび段落のプロパティと、ロケール情報を記述します。

解説(Remarks)

IDWriteTextFormat インターフェイスへの参照を取得するには、アプリケーションは次のコードに示すように IDWriteFactory::CreateTextFormat メソッドを呼び出す必要があります。


if (SUCCEEDED(hr))
{
    hr = pDWriteFactory_->CreateTextFormat(
        L"Gabriola",
        NULL,
        DWRITE_FONT_WEIGHT_REGULAR,
        DWRITE_FONT_STYLE_NORMAL,
        DWRITE_FONT_STRETCH_NORMAL,
        72.0f,
        L"en-us",
        &pTextFormat_
        );
}

CreateTextFormat 関数を使用して IDWriteTextFormat オブジェクトを作成する際、アプリケーションはそのテキスト書式のフォントファミリー、フォントコレクション、フォントの太さ、フォントサイズ、およびロケール名を指定します。

これらのプロパティは、IDWriteTextFormat オブジェクトの作成後は変更できません。これらのプロパティを変更するには、目的のプロパティを持つ新しい IDWriteTextFormat オブジェクトを作成する必要があります。

IDWriteTextFormat インターフェイスは、単一の書式でテキストを描画するために使用します。

複数の書式でテキストを描画する場合や、カスタムのテキストレンダラーを使用する場合は、IDWriteTextLayout インターフェイスを使用します。IDWriteTextLayout を使用すると、アプリケーションは文字列内のテキスト範囲ごとに書式を変更できます。IDWriteFactory::CreateTextLayoutIDWriteTextFormat オブジェクトをパラメーターとして受け取り、最初は書式情報を文字列全体に適用します。

このオブジェクトはスレッドセーフでない場合があり、テキスト書式の変更状態を保持することがあります。

DirectWrite と Direct2D

単一の書式で単純なテキストを描画する場合、Direct2DID2D1RenderTarget::DrawText メソッドを提供します。このメソッドは、IDWriteTextFormat オブジェクトによって提供される書式情報を使用して文字列を描画します。

メソッド 25

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT textAlignment)

IDWriteTextFormat インターフェイスのレイアウトボックスの先頭端および末尾端を基準として、段落内のテキストの配置を設定します。

textAlignmentDWRITE_TEXT_ALIGNMENTin段落に設定する DWRITE_TEXT_ALIGNMENT 型のテキスト配置オプション。詳細については「解説」を参照してください。

戻り値

型: HRESULT

このメソッドは、次のいずれかの値を返すことがあります。

Return code Description
S_OK
メソッドは成功しました。
E_INVALIDARG
textAlignment 引数が無効です。

解説(Remarks)

テキストは、レイアウトボックスの先頭端または末尾端に揃えたり、中央に配置したりできます。次の図は、配置をそれぞれ DWRITE_TEXT_ALIGNMENT_LEADINGDWRITE_TEXT_ALIGNMENT_CENTERDWRITE_TEXT_ALIGNMENT_TRAILING に設定したテキストを示しています。

Illustration of text paragraphs with leading, centered, and trailing alignment
注意 配置は読み取り方向に依存します。上記は左から右への読み取り方向の場合です。右から左への読み取り方向の場合は逆になります。
詳細については DWRITE_TEXT_ALIGNMENT を参照してください。

if (SUCCEEDED(hr))
{
    hr = pTextFormat_->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);
}
vtbl 4 HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT paragraphAlignment)

レイアウトボックスの上端および下端を基準とした段落の配置オプションを設定します。

paragraphAlignmentDWRITE_PARAGRAPH_ALIGNMENTin段落に設定する段落配置オプション。詳細については DWRITE_PARAGRAPH_ALIGNMENT を参照してください。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 5 HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wordWrapping)

折り返しオプションを設定します。

wordWrappingDWRITE_WORD_WRAPPINGin段落に設定する折り返しオプション。詳細については DWRITE_WORD_WRAPPING を参照してください。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 6 HRESULT SetReadingDirection(DWRITE_READING_DIRECTION readingDirection)

段落の読み取り方向を設定します。

readingDirectionDWRITE_READING_DIRECTIONin段落のテキスト読み取り方向(例: アラビア語など右から左へ読む言語の場合は DWRITE_READING_DIRECTION_RIGHT_TO_LEFT)。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

読み取り方向とフロー方向は、常に互いに 90 度直交するように設定する必要があります。そうしないと、Draw や GetMetrics などのレイアウト関数を使用したときに DWRITE_E_FLOWDIRECTIONCONFLICTS エラーが発生します。したがって、縦方向の読み取り方向を設定した場合(例: DWRITE_READING_DIRECTION_TOP_TO_BOTTOM)は、SetFlowDirection を使用してフロー方向も適切に設定する必要があります(例: DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT)。

vtbl 7 HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION flowDirection)

段落のフロー方向を設定します。

flowDirectionDWRITE_FLOW_DIRECTIONin段落のフロー方向。詳細については DWRITE_FLOW_DIRECTION を参照してください。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 8 HRESULT SetIncrementalTabStop(FLOAT incrementalTabStop)

隣接する2つのタブストップ間の固定距離を設定します。

incrementalTabStopFLOATin隣接する2つのタブストップ間の固定距離。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 9 HRESULT SetTrimming(DWRITE_TRIMMING* trimmingOptions, IDWriteInlineObject* trimmingSign)

レイアウト幅を超えてあふれるテキストに対するトリミングオプションを設定します。

trimmingOptionsDWRITE_TRIMMING*inテキストのトリミングオプション。
trimmingSignIDWriteInlineObject*inoptionalアプリケーション定義の省略記号。このパラメーターは NULL でもかまいません。詳細については IDWriteInlineObject を参照してください。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 10 HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD lineSpacingMethod, FLOAT lineSpacing, FLOAT baseline)

行間隔を設定します。

lineSpacingMethodDWRITE_LINE_SPACING_METHODin行の高さをどのように決定するかを指定します。詳細については DWRITE_LINE_SPACING_METHOD を参照してください。
lineSpacingFLOATin行の高さ、すなわちあるベースラインから別のベースラインまでの距離。
baselineFLOATin行の上端からベースラインまでの距離。lineSpacing に対する妥当な比率は 80 パーセントです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定の方式では、間隔はコンテンツのみに依存します。 均等な間隔の場合、指定した行の高さがコンテンツより優先されます。

vtbl 11 DWRITE_TEXT_ALIGNMENT GetTextAlignment()

レイアウトボックスの先頭端および末尾端を基準としたテキストの配置オプションを取得します。

戻り値

型: DWRITE_TEXT_ALIGNMENT

現在の段落のテキスト配置オプションを返します。

vtbl 12 DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment()

レイアウトボックスの上端および下端を基準とした段落の配置オプションを取得します。

戻り値

型: DWRITE_PARAGRAPH_ALIGNMENT

現在の段落配置オプションを示す値。

vtbl 13 DWRITE_WORD_WRAPPING GetWordWrapping()

折り返しオプションを取得します。

戻り値

型: DWRITE_WORD_WRAPPING

折り返しオプションを返します。詳細については DWRITE_WORD_WRAPPING を参照してください。

vtbl 14 DWRITE_READING_DIRECTION GetReadingDirection()

段落内のテキストの現在の読み取り方向を取得します。

戻り値

型: DWRITE_READING_DIRECTION

段落内のテキストの現在の読み取り方向を示す値。

vtbl 15 DWRITE_FLOW_DIRECTION GetFlowDirection()

テキスト行が流れる方向を取得します。

戻り値

型: DWRITE_FLOW_DIRECTION

親コンテナー内でテキスト行が流れる方向。たとえば DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM は、テキスト行が上から下に配置されることを示します。

vtbl 16 FLOAT GetIncrementalTabStop()

増分タブストップの位置を取得します。

戻り値

型: FLOAT

増分タブストップの値。

vtbl 17 HRESULT GetTrimming(DWRITE_TRIMMING* trimmingOptions, IDWriteInlineObject** trimmingSign)

レイアウトボックスを超えてあふれるテキストに対するトリミングオプションを取得します。

trimmingOptionsDWRITE_TRIMMING*outこのメソッドが返るとき、あふれるテキストのトリミングオプションを保持する DWRITE_TRIMMING 構造体へのポインターを格納します。
trimmingSignIDWriteInlineObject**outこのメソッドが返るとき、トリミング省略記号へのポインターのアドレスを格納します。このパラメーターは NULL でもかまいません。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 18 HRESULT GetLineSpacing(DWRITE_LINE_SPACING_METHOD* lineSpacingMethod, FLOAT* lineSpacing, FLOAT* baseline)

複数行のテキスト段落に設定された行間隔の調整値を取得します。(IDWriteTextFormat.GetLineSpacing)

lineSpacingMethodDWRITE_LINE_SPACING_METHOD*out行の高さがどのように決定されるかを示す値。
lineSpacingFLOAT*outこのメソッドが返るとき、行の高さ、すなわちあるベースラインから別のベースラインまでの距離を格納します。
baselineFLOAT*outこのメソッドが返るとき、行の上端からベースラインまでの距離を格納します。lineSpacing に対する妥当な比率は 80 パーセントです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 19 HRESULT GetFontCollection(IDWriteFontCollection** fontCollection)

現在のフォントコレクションを取得します。

fontCollectionIDWriteFontCollection**outこのメソッドが返るとき、現在のテキストに使用されているフォントコレクションへのポインターのアドレスを格納します。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 20 DWORD GetFontFamilyNameLength()

フォントファミリー名の長さを取得します。

戻り値

型: UINT32

文字配列のサイズ(終端の NULL 文字を含まない文字数)。

vtbl 21 HRESULT GetFontFamilyName(LPWSTR fontFamilyName, DWORD nameSize)

フォントファミリー名のコピーを取得します。

fontFamilyNameLPWSTRoutこのメソッドが返るとき、現在のフォントファミリー名を受け取る null 終端の文字配列へのポインターを格納します。この配列に割り当てるバッファーは、少なくとも nameSize の要素数分のサイズが必要です。
nameSizeDWORDinfontFamilyName 文字配列のサイズ(終端の NULL 文字を含む文字数)。fontFamilyName のサイズを調べるには、GetFontFamilyNameLength を使用します。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 22 DWRITE_FONT_WEIGHT GetFontWeight()

テキストのフォントの太さを取得します。

戻り値

型: DWRITE_FONT_WEIGHT

太さの種類(normal、bold、black など)を示す値。

vtbl 23 DWRITE_FONT_STYLE GetFontStyle()

テキストのフォントスタイルを取得します。

戻り値

型: DWRITE_FONT_STYLE

フォントスタイルの種類(傾斜など)を示す値。

vtbl 24 DWRITE_FONT_STRETCH GetFontStretch()

テキストのフォントの伸縮を取得します。

戻り値

型: DWRITE_FONT_STRETCH

フォントの伸縮の種類(normal、condensed など)を示す値。

vtbl 25 FLOAT GetFontSize()

フォントサイズを DIP 単位で取得します。

戻り値

型: FLOAT

現在のフォントサイズ(DIP 単位)。

vtbl 26 DWORD GetLocaleNameLength()

ロケール名の長さを取得します。

戻り値

型: UINT32

文字配列のサイズ(終端の NULL 文字を含まない文字数)。

vtbl 27 HRESULT GetLocaleName(LPWSTR localeName, DWORD nameSize)

ロケール名のコピーを取得します。

localeNameLPWSTRout現在のロケール名を受け取る文字配列を格納します。
nameSizeDWORDin文字配列のサイズ(終端の NULL 文字を含む文字数)。ロケール名の文字配列のサイズを取得するには、GetLocaleNameLength を使用します。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDWriteTextFormat "{9C906818-31D7-4FD3-A151-7C5E225DB55A}"
#usecom global IDWriteTextFormat IID_IDWriteTextFormat "{}"
#comfunc global IDWriteTextFormat_SetTextAlignment         3 int
#comfunc global IDWriteTextFormat_SetParagraphAlignment    4 int
#comfunc global IDWriteTextFormat_SetWordWrapping          5 int
#comfunc global IDWriteTextFormat_SetReadingDirection      6 int
#comfunc global IDWriteTextFormat_SetFlowDirection         7 int
#comfunc global IDWriteTextFormat_SetIncrementalTabStop    8 float
#comfunc global IDWriteTextFormat_SetTrimming              9 var,sptr
#comfunc global IDWriteTextFormat_SetLineSpacing           10 int,float,float
#comfunc global IDWriteTextFormat_GetTextAlignment         11
#comfunc global IDWriteTextFormat_GetParagraphAlignment    12
#comfunc global IDWriteTextFormat_GetWordWrapping          13
#comfunc global IDWriteTextFormat_GetReadingDirection      14
#comfunc global IDWriteTextFormat_GetFlowDirection         15
#comfunc global IDWriteTextFormat_GetIncrementalTabStop    16
#comfunc global IDWriteTextFormat_GetTrimming              17 var,sptr
#comfunc global IDWriteTextFormat_GetLineSpacing           18 var,var,var
#comfunc global IDWriteTextFormat_GetFontCollection        19 sptr
#comfunc global IDWriteTextFormat_GetFontFamilyNameLength  20
#comfunc global IDWriteTextFormat_GetFontFamilyName        21 var,int
#comfunc global IDWriteTextFormat_GetFontWeight            22
#comfunc global IDWriteTextFormat_GetFontStyle             23
#comfunc global IDWriteTextFormat_GetFontStretch           24
#comfunc global IDWriteTextFormat_GetFontSize              25
#comfunc global IDWriteTextFormat_GetLocaleNameLength      26
#comfunc global IDWriteTextFormat_GetLocaleName            27 var,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。