IDWriteTextLayout
COM公式ドキュメント
IDWriteTextLayout インターフェイスは、完全に解析および書式設定された後のテキストのブロックを表します。
解説(Remarks)
IDWriteTextLayout インターフェイスへの参照を取得するには、次のコードに示すように、アプリケーションから IDWriteFactory::CreateTextLayout メソッドを呼び出す必要があります。
// Create a text layout using the text format.
if (SUCCEEDED(hr))
{
RECT rect;
GetClientRect(hwnd_, &rect);
float width = rect.right / dpiScaleX_;
float height = rect.bottom / dpiScaleY_;
hr = pDWriteFactory_->CreateTextLayout(
wszText_, // The string to be laid out and formatted.
cTextLength_, // The length of the string.
pTextFormat_, // The text format to apply to the string (contains font information, etc).
width, // The width of the layout box.
height, // The height of the layout box.
&pTextLayout_ // The IDWriteTextLayout interface pointer.
);
}
IDWriteTextLayout インターフェイスを使用すると、アプリケーションは、DWRITE_TEXT_RANGE 構造体で指定された、表現するテキストの範囲に対して書式を変更できます。 次の例は、テキスト範囲にフォントの太さ (font weight) を設定する方法を示しています。
// Set the font weight to bold for the first 5 letters.
DWRITE_TEXT_RANGE textRange = {0, 4};
if (SUCCEEDED(hr))
{
hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}
IDWriteTextLayout は、テキストに取り消し線、下線、およびインラインオブジェクトを追加するためのメソッドも提供します。
テキストのブロック (IDWriteTextLayout オブジェクトで表される) を描画するために、Direct2D は ID2D1RenderTarget::DrawTextLayout メソッドを提供します。カスタムレンダラーを使用して描画するには、IDWriteTextRenderer インターフェイスを実装し、IDWriteTextLayout::Draw メソッドを呼び出します。
DirectWrite と Direct2D
IDWriteTextLayout オブジェクトで表される書式設定された文字列を描画するために、Direct2D は ID2D1RenderTarget::DrawTextLayout メソッドを提供します。その他のレンダリングオプション
カスタムレンダラーを使用してレンダリングするには、IDWriteTextLayout::Draw メソッドを使用します。このメソッドは、次のコードに示すように、IDWriteTextRenderer から派生したコールバックインターフェイスを引数として受け取ります。
// Draw the text layout using DirectWrite and the CustomTextRenderer class.
hr = pTextLayout_->Draw(
NULL,
pTextRenderer_, // Custom text renderer.
origin.x,
origin.y
);
IDWriteTextRenderer は、グリフラン (glyph run)、下線、取り消し線、およびインラインオブジェクトを描画するためのメソッドを宣言します。 これらのメソッドの実装はアプリケーションに委ねられています。 カスタムテキストレンダラーを作成すると、アプリケーションはテキストのレンダリング時に、カスタムの塗りつぶしやアウトラインなどの追加のエフェクトを適用できます。
カスタムテキストレンダラーを使用すると、GDI などの別のテクノロジを使用してレンダリングすることもできます。
メソッド 39
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
レイアウトの最大幅を設定します。
| maxWidth | FLOAT | in | レイアウトボックスの最大幅を示す値。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
レイアウトの最大高さを設定します。
| maxHeight | FLOAT | in | レイアウトボックスの最大高さを示す値。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
フォントコレクションを設定します。
| fontCollection | IDWriteFontCollection* | in | 設定するフォントコレクション。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたテキスト範囲内のテキストに対して、null 終端のフォントファミリー名を設定します。
| fontFamilyName | LPWSTR | in | textRange で指定された範囲内のテキスト文字列全体に適用されるフォントファミリー名。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
DWRITE_TEXT_RANGE 構造体で指定されたテキスト範囲内のテキストに対して、フォントの太さ (font weight) を設定します。
| fontWeight | DWRITE_FONT_WEIGHT | in | textRange で指定された範囲内のテキストに設定するフォントの太さ (font weight)。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フォントの太さ (font weight) には、DWRITE_FONT_WEIGHT 列挙型で提供される定義済みのフォント太さ値のいずれか、または 1 から 999 までの整数を設定できます。 この範囲外の値を指定すると、メソッドは E_INVALIDARG を返して失敗します。
次の図は、Palatino Linotype 書体の Normal と UltraBold の太さの例を示しています。
例
次のコードは、フォントの太さを bold に設定する方法を示しています。
// Set the font weight to bold for the entire string.
DWRITE_TEXT_RANGE textRange = {0, cTextLength_};
if (SUCCEEDED(hr))
{
hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}
DWRITE_TEXT_RANGE 構造体で指定されたテキスト範囲内のテキストに対して、フォントスタイル (font style) を設定します。
| fontStyle | DWRITE_FONT_STYLE | in | textRange で指定された範囲内のテキストに設定するフォントスタイル (font style)。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フォントスタイル (font style) には、Normal、Italic、Oblique のいずれかを設定できます。次の図は Palatino フォントの 3 つのスタイルを示しています。 詳細については、DWRITE_FONT_STYLE を参照してください。
例
次のコードは、フォントスタイルを italic に設定する方法を示しています。
// Set the font style to italic for the entire string.
DWRITE_TEXT_RANGE textRange = {0, cTextLength_};
if (SUCCEEDED(hr))
{
hr = pTextLayout_->SetFontStyle(DWRITE_FONT_STYLE_ITALIC, textRange);
}
指定されたテキスト範囲内のテキストに対して、フォントの伸縮 (font stretch) を設定します。
| fontStretch | DWRITE_FONT_STRETCH | in | textRange で指定された範囲内のテキストに対するフォントの伸縮 (font stretch) の種類を示す値。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたテキスト範囲内のテキストに対して、DIP 単位のフォントサイズを設定します。
| fontSize | FLOAT | in | textRange で指定された範囲内のテキストに設定する DIP 単位のフォントサイズ。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたテキスト範囲内のテキストに下線を設定します。
| hasUnderline | BOOL | in | 指定されたテキスト範囲内に下線を引くかどうかを示すブール値フラグ。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたテキスト範囲内のテキストに取り消し線を設定します。
| hasStrikethrough | BOOL | in | textRange で指定された範囲内に取り消し線を引くかどうかを示すブール値フラグ。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アプリケーション定義の描画エフェクトを設定します。
| drawingEffect | IUnknown* | in | この範囲に適用されるアプリケーション定義の描画エフェクト。このデータオブジェクトは、最終的なレンダリングのためにアプリケーションの描画コールバックに渡し戻されます。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ID2D1RenderTarget::DrawTextLayout を使用してテキストを描画している場合、カラーブラシやグラデーションブラシなどの ID2D1Brush を描画エフェクトとして設定でき、そのブラシが指定されたテキスト範囲の描画に使用されます。
この描画エフェクトは指定された範囲に関連付けられ、 描画時にその範囲が描画される際に、コールバックを通じてアプリケーションに渡し戻されます。
インラインオブジェクトを設定します。
| inlineObject | IDWriteInlineObject* | in | アプリケーション定義のインラインオブジェクト。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
アプリケーションはこの関数を呼び出して、特定の範囲に対するアプリケーション定義のインラインオブジェクトを記述するプロパティのセットを指定できます。
このインラインオブジェクトは指定された範囲に適用され、 その範囲が描画される際に DrawInlineObject コールバックを通じてアプリケーションに渡し戻されます。 その範囲内のテキストはすべて抑制されます。
指定されたテキスト範囲内のテキストに対して、フォントのタイポグラフィ機能を設定します。
| typography | IDWriteTypography* | in | フォントのタイポグラフィ設定へのポインター。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたテキスト範囲内のテキストに対して、ロケール名を設定します。
| localeName | LPWSTR | in | null 終端のロケール名文字列。 |
| textRange | DWRITE_TEXT_RANGE | in | この変更が適用されるテキスト範囲。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
レイアウトの最大幅を取得します。
戻り値
Type: FLOAT
レイアウトの最大幅を返します。
レイアウトの最大高さを取得します。
戻り値
Type: FLOAT
レイアウトの最大高さ。
指定された位置のテキストに関連付けられたフォントコレクションを取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| fontCollection | IDWriteFontCollection** | out | 現在のフォントコレクションへのポインターのアドレスが格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (下線 を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在の位置におけるフォントファミリー名の長さを取得します。
| currentPosition | DWORD | in | 現在のテキスト位置。 |
| nameLength | DWORD* | out | このメソッドが返るとき、フォントファミリー名を格納する文字配列のサイズが、終端の NULL 文字を含まない文字数で格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントファミリー を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのフォントファミリー名をコピーします。
| currentPosition | DWORD | in | 調べるテキストの位置。 |
| fontFamilyName | LPWSTR | out | このメソッドが返るとき、現在のフォントファミリー名を受け取る文字配列が格納されます。このパラメーターの領域は呼び出し側で確保する必要があります。 |
| nameSize | DWORD | in | 終端の NULL 文字を含む文字数での文字配列のサイズ。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントファミリー名 を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのフォントの太さ (font weight) を取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| fontWeight | DWRITE_FONT_WEIGHT* | out | このメソッドが返るとき、指定された位置に適用されているフォントの太さ (font weight) の種類を示す値が格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントの太さ (font weight) を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのフォントスタイル (font style。傾斜 (slope) とも呼ばれます) を取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| fontStyle | DWRITE_FONT_STYLE* | out | このメソッドが返るとき、指定された位置に適用されているフォントスタイル (font style。傾斜 (slope または incline) とも呼ばれます) の種類を示す値が格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントスタイル (font style) を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのフォントの伸縮 (font stretch) を取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| fontStretch | DWRITE_FONT_STRETCH* | out | このメソッドが返るとき、指定された位置に適用されているフォントの伸縮 (font stretch。幅 (width) とも呼ばれます) の種類を示す値が格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントの伸縮 (font stretch) を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのフォントの em の高さを取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| fontSize | FLOAT* | out | このメソッドが返るとき、指定された位置のテキストのフォントサイズが em 単位で格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントサイズ を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストに下線が存在するかどうかを取得します。
| currentPosition | DWORD | in | 現在のテキスト位置。 |
| hasUnderline | BOOL* | out | currentPosition で示される位置に下線が存在するかどうかを示すブール値フラグ。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (下線 を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストに取り消し線が存在するかどうかを取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| hasStrikethrough | BOOL* | out | currentPosition で示される位置に取り消し線が存在するかどうかを示すブール値フラグ。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲が格納されます。 つまり、この run は指定された位置とまったく同じ書式 (取り消し線 を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたテキスト位置におけるアプリケーション定義の描画エフェクトを取得します。
| currentPosition | DWORD | in | 描画エフェクトを取得する対象のテキストの位置。 |
| drawingEffect | IUnknown** | out | このメソッドが返るとき、現在のアプリケーション定義の描画エフェクトへのポインターのアドレスが格納されます。通常、このエフェクトはグリフの描画に使用される前景ブラシです。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲が格納されます。 つまり、この run は指定された位置とまったく同じ書式 (描画エフェクト を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のインラインオブジェクトを取得します。
| currentPosition | DWORD | in | 指定されたテキスト位置。 |
| inlineObject | IDWriteInlineObject** | out | アプリケーション定義のインラインオブジェクトが格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (インラインオブジェクト を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのタイポグラフィ設定を取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| typography | IDWriteTypography** | out | このメソッドが返るとき、現在のタイポグラフィ設定へのポインターのアドレスが格納されます。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (タイポグラフィ を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのロケール名の長さを取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| nameLength | DWORD* | out | 終端の NULL 文字を含まない文字数での文字配列のサイズ。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (ロケール名 を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定された位置のテキストのロケール名を取得します。
| currentPosition | DWORD | in | 調査するテキストの位置。 |
| localeName | LPWSTR | out | このメソッドが返るとき、現在のロケール名を受け取る文字配列が格納されます。 |
| nameSize | DWORD | in | 終端の NULL 文字を含む文字数での文字配列のサイズ。 |
| textRange | DWRITE_TEXT_RANGE* | outoptional | currentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (ロケール名 を含みますがそれに限定されません) を持ちます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたクライアント描画コンテキストを使用してテキストを描画します。
| clientDrawingContext | void* | inoptional | アプリケーション定義の描画コンテキスト。 |
| renderer | IDWriteTextRenderer* | in | テキスト文字列の各部分の描画に使用されるコールバック関数のセットへのポインター。 |
| originX | FLOAT | in | レイアウトの左辺の x 座標。 |
| originY | FLOAT | in | レイアウトの上辺の y 座標。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドでテキストを描画するには、アプリケーションが IDWriteFactory::CreateTextLayout を使用して textLayout オブジェクトを作成する必要があります。
textLayout オブジェクトを取得した後、アプリケーションは IDWriteTextLayout::Draw メソッドを呼び出して、テキスト、装飾、およびインラインオブジェクトを描画します。実際の描画は、textRenderer 引数として渡されるコールバックインターフェイスを通じて行われ、そこで対応する DrawGlyphRun API が呼び出されます。
SetReadingDirection で DWRITE_READING_DIRECTION_TOP_TO_BOTTOM (または下から上) を指定して IDWriteTextLayout に縦書きの読み取り方向を設定した場合は、IDWriteTextRenderer1 を実装するインターフェイスを渡す必要があります。そうしないと、元の IDWriteTextRenderer インターフェイスは横書きのテキストのみをサポートしていたため、DWRITE_E_TEXTRENDERERINCOMPATIBLE エラーが発生します。
テキスト文字列の個々のテキスト行に関する情報を取得します。
| lineMetrics | DWRITE_LINE_METRICS* | outoptional | このメソッドが返るとき、個々のテキスト行のさまざまな計算済み長さ値を含む構造体の配列へのポインターが格納されます。 |
| maxLineCount | DWORD | in | lineMetrics 配列の最大サイズ。 |
| actualLineCount | DWORD* | out | このメソッドが返るとき、必要となる lineMetrics 配列の実際のサイズが格納されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
maxLineCount が十分な大きさでない場合は、HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) と等価な E_NOT_SUFFICIENT_BUFFER が 返され、*actualLineCount には必要な行数が 設定されます。
書式設定された文字列の全体的なメトリックを取得します。(IDWriteTextLayout.GetMetrics)
| textMetrics | DWRITE_TEXT_METRICS* | out | このメソッドが返るとき、書式設定後のテキストおよび関連コンテンツの測定された距離が格納されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
レイアウト、およびテキストグリフやインラインオブジェクトを含む、レイアウトに含まれるすべてのオブジェクトのオーバーハング (DIP 単位) を返します。
| overhangs | DWRITE_OVERHANG_METRICS* | out | レイアウト外にはみ出す可視範囲のオーバーシュート (DIP 単位)。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
下線と取り消し線はブラックボックスの判定には寄与しません。これらは実際にはレンダラーによって描画され、レンダラーはさまざまなスタイルでこれらを描画できるためです。
各グリフクラスターの論理的なプロパティと測定値を取得します。
| clusterMetrics | DWRITE_CLUSTER_METRICS* | outoptional | このメソッドが返るとき、グリフクラスターに関する、改行や合計送り幅 (advance width) などのメトリックが格納されます。 |
| maxClusterCount | DWORD | in | clusterMetrics 配列の最大サイズ。 |
| actualClusterCount | DWORD* | out | このメソッドが返るとき、必要となる clusterMetrics 配列の実際のサイズが格納されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
maxClusterCount が十分な大きさでない場合は、HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) と等価な E_NOT_SUFFICIENT_BUFFER が 返され、actualClusterCount には必要なクラスター数が 設定されます。
単語全体を構成する文字の間で緊急改行 (emergency breaking) を発生させることなくレイアウトに設定できる、可能な最小幅を決定します。
| minWidth | FLOAT* | out | 最小幅。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アプリケーションは、レイアウトボックスの左上位置を基準とした特定のピクセル位置を渡してこの関数を呼び出し、ヒットテストが発生したテキスト文字列の対応するヒットテストメトリックに関する情報を取得します。
| pointX | FLOAT | in | ヒットテストするピクセル位置 X。レイアウトボックスの左上位置を基準とします。 |
| pointY | FLOAT | in | ヒットテストするピクセル位置 Y。レイアウトボックスの左上位置を基準とします。 |
| isTrailingHit | BOOL* | out | ヒットテスト位置が文字の先端 (leading) 側と終端 (trailing) 側の どちらにあるかを示す出力フラグ。出力 *isInside 値が FALSE に設定されている場合、この値は出力 hitTestMetrics->textPosition 値に従って、ヒットテスト位置に最も近いエッジを表すように設定されます。 |
| isInside | BOOL* | out | ヒットテスト位置がテキスト文字列の内部にあるかどうかを示す出力フラグ。 FALSE の場合、テキストのエッジに最も近い位置が返されます。 |
| hitTestMetrics | DWRITE_HIT_TEST_METRICS* | out | ヒットテスト位置を完全に囲む出力ジオメトリ。出力 *isInside 値が FALSE に設定されている場合、この構造体はヒットテスト位置に最も近いエッジを囲むジオメトリを表します。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アプリケーションは、テキスト位置とその位置の論理的な側を指定して、レイアウトボックスの左上を基準としたピクセル位置を取得するためにこの関数を呼び出します。
| textPosition | DWORD | in | ピクセル位置を取得するために使用するテキスト位置。 |
| isTrailingHit | BOOL | in | ピクセル位置が指定されたテキスト位置の先端 (leading) 側と終端 (trailing) 側のどちらであるかを示すブール値フラグ。 |
| pointX | FLOAT* | out | このメソッドが返るとき、レイアウトボックスの左上位置を基準とした出力ピクセル位置 X が格納されます。 |
| pointY | FLOAT* | out | このメソッドが返るとき、レイアウトボックスの左上位置を基準とした出力ピクセル位置 Y が格納されます。 |
| hitTestMetrics | DWRITE_HIT_TEST_METRICS* | out | このメソッドが返るとき、指定されたテキスト位置を完全に囲む出力ジオメトリが格納されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アプリケーションは、テキスト位置の範囲に対応するヒットテストメトリックのセットを取得するためにこの関数を呼び出します。主な用途の 1 つは、テキスト文字列のハイライト選択を実装することです。
| textPosition | DWORD | in | 指定された範囲の最初のテキスト位置。 |
| textLength | DWORD | in | 指定された範囲の位置の数。 |
| originX | FLOAT | in | レイアウトボックスの左側における原点ピクセル位置 X。このオフセットは、返されるヒットテストメトリックに加算されます。 |
| originY | FLOAT | in | レイアウトボックスの上部における原点ピクセル位置 Y。このオフセットは、返されるヒットテストメトリックに加算されます。 |
| hitTestMetrics | DWRITE_HIT_TEST_METRICS* | outoptional | このメソッドが返るとき、指定された位置範囲を完全に囲む出力ジオメトリのバッファーへのポインターが格納されます。 バッファーは少なくとも maxHitTestMetricsCount 以上のサイズである必要があります。 |
| maxHitTestMetricsCount | DWORD | in | hitTestMetrics がバッファーメモリ内に保持できるボックスの最大数。 |
| actualHitTestMetricsCount | DWORD* | out | hitTestMetrics がバッファーメモリ内に保持するジオメトリの実際の数。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteTextLayout "{53737037-6D14-410B-9BFE-0B182BB70961}" #usecom global IDWriteTextLayout IID_IDWriteTextLayout "{}" #comfunc global IDWriteTextLayout_SetMaxWidth 28 float #comfunc global IDWriteTextLayout_SetMaxHeight 29 float #comfunc global IDWriteTextLayout_SetFontCollection 30 sptr,int #comfunc global IDWriteTextLayout_SetFontFamilyName 31 wstr,int #comfunc global IDWriteTextLayout_SetFontWeight 32 int,int #comfunc global IDWriteTextLayout_SetFontStyle 33 int,int #comfunc global IDWriteTextLayout_SetFontStretch 34 int,int #comfunc global IDWriteTextLayout_SetFontSize 35 float,int #comfunc global IDWriteTextLayout_SetUnderline 36 int,int #comfunc global IDWriteTextLayout_SetStrikethrough 37 int,int #comfunc global IDWriteTextLayout_SetDrawingEffect 38 sptr,int #comfunc global IDWriteTextLayout_SetInlineObject 39 sptr,int #comfunc global IDWriteTextLayout_SetTypography 40 sptr,int #comfunc global IDWriteTextLayout_SetLocaleName 41 wstr,int #comfunc global IDWriteTextLayout_GetMaxWidth 42 #comfunc global IDWriteTextLayout_GetMaxHeight 43 #comfunc global IDWriteTextLayout_GetFontCollection 44 int,sptr,var #comfunc global IDWriteTextLayout_GetFontFamilyNameLength 45 int,var,var #comfunc global IDWriteTextLayout_GetFontFamilyName 46 int,var,int,var #comfunc global IDWriteTextLayout_GetFontWeight 47 int,var,var #comfunc global IDWriteTextLayout_GetFontStyle 48 int,var,var #comfunc global IDWriteTextLayout_GetFontStretch 49 int,var,var #comfunc global IDWriteTextLayout_GetFontSize 50 int,var,var #comfunc global IDWriteTextLayout_GetUnderline 51 int,var,var #comfunc global IDWriteTextLayout_GetStrikethrough 52 int,var,var #comfunc global IDWriteTextLayout_GetDrawingEffect 53 int,sptr,var #comfunc global IDWriteTextLayout_GetInlineObject 54 int,sptr,var #comfunc global IDWriteTextLayout_GetTypography 55 int,sptr,var #comfunc global IDWriteTextLayout_GetLocaleNameLength 56 int,var,var #comfunc global IDWriteTextLayout_GetLocaleName 57 int,var,int,var #comfunc global IDWriteTextLayout_Draw 58 sptr,sptr,float,float #comfunc global IDWriteTextLayout_GetLineMetrics 59 var,int,var #comfunc global IDWriteTextLayout_GetMetrics 60 var #comfunc global IDWriteTextLayout_GetOverhangMetrics 61 var #comfunc global IDWriteTextLayout_GetClusterMetrics 62 var,int,var #comfunc global IDWriteTextLayout_DetermineMinWidth 63 var #comfunc global IDWriteTextLayout_HitTestPoint 64 float,float,var,var,var #comfunc global IDWriteTextLayout_HitTestTextPosition 65 int,int,var,var,var #comfunc global IDWriteTextLayout_HitTestTextRange 66 int,int,float,float,var,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDWriteTextLayout "{53737037-6D14-410B-9BFE-0B182BB70961}" #usecom global IDWriteTextLayout IID_IDWriteTextLayout "{}" #comfunc global IDWriteTextLayout_SetMaxWidth 28 float #comfunc global IDWriteTextLayout_SetMaxHeight 29 float #comfunc global IDWriteTextLayout_SetFontCollection 30 sptr,int #comfunc global IDWriteTextLayout_SetFontFamilyName 31 wstr,int #comfunc global IDWriteTextLayout_SetFontWeight 32 int,int #comfunc global IDWriteTextLayout_SetFontStyle 33 int,int #comfunc global IDWriteTextLayout_SetFontStretch 34 int,int #comfunc global IDWriteTextLayout_SetFontSize 35 float,int #comfunc global IDWriteTextLayout_SetUnderline 36 int,int #comfunc global IDWriteTextLayout_SetStrikethrough 37 int,int #comfunc global IDWriteTextLayout_SetDrawingEffect 38 sptr,int #comfunc global IDWriteTextLayout_SetInlineObject 39 sptr,int #comfunc global IDWriteTextLayout_SetTypography 40 sptr,int #comfunc global IDWriteTextLayout_SetLocaleName 41 wstr,int #comfunc global IDWriteTextLayout_GetMaxWidth 42 #comfunc global IDWriteTextLayout_GetMaxHeight 43 #comfunc global IDWriteTextLayout_GetFontCollection 44 int,sptr,sptr #comfunc global IDWriteTextLayout_GetFontFamilyNameLength 45 int,sptr,sptr #comfunc global IDWriteTextLayout_GetFontFamilyName 46 int,sptr,int,sptr #comfunc global IDWriteTextLayout_GetFontWeight 47 int,sptr,sptr #comfunc global IDWriteTextLayout_GetFontStyle 48 int,sptr,sptr #comfunc global IDWriteTextLayout_GetFontStretch 49 int,sptr,sptr #comfunc global IDWriteTextLayout_GetFontSize 50 int,sptr,sptr #comfunc global IDWriteTextLayout_GetUnderline 51 int,sptr,sptr #comfunc global IDWriteTextLayout_GetStrikethrough 52 int,sptr,sptr #comfunc global IDWriteTextLayout_GetDrawingEffect 53 int,sptr,sptr #comfunc global IDWriteTextLayout_GetInlineObject 54 int,sptr,sptr #comfunc global IDWriteTextLayout_GetTypography 55 int,sptr,sptr #comfunc global IDWriteTextLayout_GetLocaleNameLength 56 int,sptr,sptr #comfunc global IDWriteTextLayout_GetLocaleName 57 int,sptr,int,sptr #comfunc global IDWriteTextLayout_Draw 58 sptr,sptr,float,float #comfunc global IDWriteTextLayout_GetLineMetrics 59 sptr,int,sptr #comfunc global IDWriteTextLayout_GetMetrics 60 sptr #comfunc global IDWriteTextLayout_GetOverhangMetrics 61 sptr #comfunc global IDWriteTextLayout_GetClusterMetrics 62 sptr,int,sptr #comfunc global IDWriteTextLayout_DetermineMinWidth 63 sptr #comfunc global IDWriteTextLayout_HitTestPoint 64 float,float,sptr,sptr,sptr #comfunc global IDWriteTextLayout_HitTestTextPosition 65 int,int,sptr,sptr,sptr #comfunc global IDWriteTextLayout_HitTestTextRange 66 int,int,float,float,sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。