IDWriteTextFormat
COM公式ドキュメント
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::CreateTextLayout は IDWriteTextFormat オブジェクトをパラメーターとして受け取り、最初は書式情報を文字列全体に適用します。
このオブジェクトはスレッドセーフでない場合があり、テキスト書式の変更状態を保持することがあります。
DirectWrite と Direct2D
単一の書式で単純なテキストを描画する場合、Direct2D は ID2D1RenderTarget::DrawText メソッドを提供します。このメソッドは、IDWriteTextFormat オブジェクトによって提供される書式情報を使用して文字列を描画します。メソッド 25
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDWriteTextFormat インターフェイスのレイアウトボックスの先頭端および末尾端を基準として、段落内のテキストの配置を設定します。
| textAlignment | DWRITE_TEXT_ALIGNMENT | in | 段落に設定する DWRITE_TEXT_ALIGNMENT 型のテキスト配置オプション。詳細については「解説」を参照してください。 |
戻り値
型: HRESULT
このメソッドは、次のいずれかの値を返すことがあります。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| textAlignment 引数が無効です。 |
解説(Remarks)
テキストは、レイアウトボックスの先頭端または末尾端に揃えたり、中央に配置したりできます。次の図は、配置をそれぞれ DWRITE_TEXT_ALIGNMENT_LEADING、DWRITE_TEXT_ALIGNMENT_CENTER、DWRITE_TEXT_ALIGNMENT_TRAILING に設定したテキストを示しています。
例
if (SUCCEEDED(hr))
{
hr = pTextFormat_->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);
}
レイアウトボックスの上端および下端を基準とした段落の配置オプションを設定します。
| paragraphAlignment | DWRITE_PARAGRAPH_ALIGNMENT | in | 段落に設定する段落配置オプション。詳細については DWRITE_PARAGRAPH_ALIGNMENT を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
折り返しオプションを設定します。
| wordWrapping | DWRITE_WORD_WRAPPING | in | 段落に設定する折り返しオプション。詳細については DWRITE_WORD_WRAPPING を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
段落の読み取り方向を設定します。
| readingDirection | DWRITE_READING_DIRECTION | in | 段落のテキスト読み取り方向(例: アラビア語など右から左へ読む言語の場合は 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)。
段落のフロー方向を設定します。
| flowDirection | DWRITE_FLOW_DIRECTION | in | 段落のフロー方向。詳細については DWRITE_FLOW_DIRECTION を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
隣接する2つのタブストップ間の固定距離を設定します。
| incrementalTabStop | FLOAT | in | 隣接する2つのタブストップ間の固定距離。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
レイアウト幅を超えてあふれるテキストに対するトリミングオプションを設定します。
| trimmingOptions | DWRITE_TRIMMING* | in | テキストのトリミングオプション。 |
| trimmingSign | IDWriteInlineObject* | inoptional | アプリケーション定義の省略記号。このパラメーターは NULL でもかまいません。詳細については IDWriteInlineObject を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
行間隔を設定します。
| lineSpacingMethod | DWRITE_LINE_SPACING_METHOD | in | 行の高さをどのように決定するかを指定します。詳細については DWRITE_LINE_SPACING_METHOD を参照してください。 |
| lineSpacing | FLOAT | in | 行の高さ、すなわちあるベースラインから別のベースラインまでの距離。 |
| baseline | FLOAT | in | 行の上端からベースラインまでの距離。lineSpacing に対する妥当な比率は 80 パーセントです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定の方式では、間隔はコンテンツのみに依存します。 均等な間隔の場合、指定した行の高さがコンテンツより優先されます。
レイアウトボックスの先頭端および末尾端を基準としたテキストの配置オプションを取得します。
戻り値
現在の段落のテキスト配置オプションを返します。
レイアウトボックスの上端および下端を基準とした段落の配置オプションを取得します。
戻り値
現在の段落配置オプションを示す値。
折り返しオプションを取得します。
戻り値
折り返しオプションを返します。詳細については DWRITE_WORD_WRAPPING を参照してください。
段落内のテキストの現在の読み取り方向を取得します。
戻り値
段落内のテキストの現在の読み取り方向を示す値。
テキスト行が流れる方向を取得します。
戻り値
親コンテナー内でテキスト行が流れる方向。たとえば DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM は、テキスト行が上から下に配置されることを示します。
増分タブストップの位置を取得します。
戻り値
型: FLOAT
増分タブストップの値。
レイアウトボックスを超えてあふれるテキストに対するトリミングオプションを取得します。
| trimmingOptions | DWRITE_TRIMMING* | out | このメソッドが返るとき、あふれるテキストのトリミングオプションを保持する DWRITE_TRIMMING 構造体へのポインターを格納します。 |
| trimmingSign | IDWriteInlineObject** | out | このメソッドが返るとき、トリミング省略記号へのポインターのアドレスを格納します。このパラメーターは NULL でもかまいません。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
複数行のテキスト段落に設定された行間隔の調整値を取得します。(IDWriteTextFormat.GetLineSpacing)
| lineSpacingMethod | DWRITE_LINE_SPACING_METHOD* | out | 行の高さがどのように決定されるかを示す値。 |
| lineSpacing | FLOAT* | out | このメソッドが返るとき、行の高さ、すなわちあるベースラインから別のベースラインまでの距離を格納します。 |
| baseline | FLOAT* | out | このメソッドが返るとき、行の上端からベースラインまでの距離を格納します。lineSpacing に対する妥当な比率は 80 パーセントです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在のフォントコレクションを取得します。
| fontCollection | IDWriteFontCollection** | out | このメソッドが返るとき、現在のテキストに使用されているフォントコレクションへのポインターのアドレスを格納します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
フォントファミリー名の長さを取得します。
戻り値
型: UINT32
文字配列のサイズ(終端の NULL 文字を含まない文字数)。
フォントファミリー名のコピーを取得します。
| fontFamilyName | LPWSTR | out | このメソッドが返るとき、現在のフォントファミリー名を受け取る null 終端の文字配列へのポインターを格納します。この配列に割り当てるバッファーは、少なくとも nameSize の要素数分のサイズが必要です。 |
| nameSize | DWORD | in | fontFamilyName 文字配列のサイズ(終端の NULL 文字を含む文字数)。fontFamilyName のサイズを調べるには、GetFontFamilyNameLength を使用します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
テキストのフォントの太さを取得します。
戻り値
太さの種類(normal、bold、black など)を示す値。
テキストのフォントスタイルを取得します。
戻り値
フォントスタイルの種類(傾斜など)を示す値。
テキストのフォントの伸縮を取得します。
戻り値
フォントの伸縮の種類(normal、condensed など)を示す値。
フォントサイズを DIP 単位で取得します。
戻り値
型: FLOAT
現在のフォントサイズ(DIP 単位)。
ロケール名の長さを取得します。
戻り値
型: UINT32
文字配列のサイズ(終端の NULL 文字を含まない文字数)。
ロケール名のコピーを取得します。
| localeName | LPWSTR | out | 現在のロケール名を受け取る文字配列を格納します。 |
| nameSize | DWORD | in | 文字配列のサイズ(終端の NULL 文字を含む文字数)。ロケール名の文字配列のサイズを取得するには、GetLocaleNameLength を使用します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
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 指定が可能。#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 sptr,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 sptr,sptr #comfunc global IDWriteTextFormat_GetLineSpacing 18 sptr,sptr,sptr #comfunc global IDWriteTextFormat_GetFontCollection 19 sptr #comfunc global IDWriteTextFormat_GetFontFamilyNameLength 20 #comfunc global IDWriteTextFormat_GetFontFamilyName 21 sptr,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 sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。