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

IDWriteTextLayout

COM
IID53737037-6d14-410b-9bfe-0b182bb70961継承元IDWriteTextFormat自前メソッド開始 vtbl28

公式ドキュメント

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 オブジェクトで表される) を描画するために、Direct2DID2D1RenderTarget::DrawTextLayout メソッドを提供します。カスタムレンダラーを使用して描画するには、IDWriteTextRenderer インターフェイスを実装し、IDWriteTextLayout::Draw メソッドを呼び出します。

DirectWrite と Direct2D

IDWriteTextLayout オブジェクトで表される書式設定された文字列を描画するために、Direct2DID2D1RenderTarget::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。

vtbl 28 HRESULT SetMaxWidth(FLOAT maxWidth)

レイアウトの最大幅を設定します。

maxWidthFLOATinレイアウトボックスの最大幅を示す値。

戻り値

Type: HRESULT

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

vtbl 29 HRESULT SetMaxHeight(FLOAT maxHeight)

レイアウトの最大高さを設定します。

maxHeightFLOATinレイアウトボックスの最大高さを示す値。

戻り値

Type: HRESULT

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

vtbl 30 HRESULT SetFontCollection(IDWriteFontCollection* fontCollection, DWRITE_TEXT_RANGE textRange)

フォントコレクションを設定します。

fontCollectionIDWriteFontCollection*in設定するフォントコレクション。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 31 HRESULT SetFontFamilyName(LPWSTR fontFamilyName, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに対して、null 終端のフォントファミリー名を設定します。

fontFamilyNameLPWSTRintextRange で指定された範囲内のテキスト文字列全体に適用されるフォントファミリー名。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 32 HRESULT SetFontWeight(DWRITE_FONT_WEIGHT fontWeight, DWRITE_TEXT_RANGE textRange)

DWRITE_TEXT_RANGE 構造体で指定されたテキスト範囲内のテキストに対して、フォントの太さ (font weight) を設定します。

fontWeightDWRITE_FONT_WEIGHTintextRange で指定された範囲内のテキストに設定するフォントの太さ (font weight)。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

解説(Remarks)

フォントの太さ (font weight) には、DWRITE_FONT_WEIGHT 列挙型で提供される定義済みのフォント太さ値のいずれか、または 1 から 999 までの整数を設定できます。 この範囲外の値を指定すると、メソッドは E_INVALIDARG を返して失敗します。

次の図は、Palatino Linotype 書体の Normal と UltraBold の太さの例を示しています。

Illustration of the letter "W" in Normal and UltraBold weights

次のコードは、フォントの太さを 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);
}

vtbl 33 HRESULT SetFontStyle(DWRITE_FONT_STYLE fontStyle, DWRITE_TEXT_RANGE textRange)

DWRITE_TEXT_RANGE 構造体で指定されたテキスト範囲内のテキストに対して、フォントスタイル (font style) を設定します。

fontStyleDWRITE_FONT_STYLEintextRange で指定された範囲内のテキストに設定するフォントスタイル (font style)。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

解説(Remarks)

フォントスタイル (font style) には、Normal、Italic、Oblique のいずれかを設定できます。次の図は Palatino フォントの 3 つのスタイルを示しています。 詳細については、DWRITE_FONT_STYLE を参照してください。

Illustration of normal, italic, and oblique font styles for the Palatino font

次のコードは、フォントスタイルを 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);
}

vtbl 34 HRESULT SetFontStretch(DWRITE_FONT_STRETCH fontStretch, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに対して、フォントの伸縮 (font stretch) を設定します。

fontStretchDWRITE_FONT_STRETCHintextRange で指定された範囲内のテキストに対するフォントの伸縮 (font stretch) の種類を示す値。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 35 HRESULT SetFontSize(FLOAT fontSize, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに対して、DIP 単位のフォントサイズを設定します。

fontSizeFLOATintextRange で指定された範囲内のテキストに設定する DIP 単位のフォントサイズ。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 36 HRESULT SetUnderline(BOOL hasUnderline, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに下線を設定します。

hasUnderlineBOOLin指定されたテキスト範囲内に下線を引くかどうかを示すブール値フラグ。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 37 HRESULT SetStrikethrough(BOOL hasStrikethrough, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに取り消し線を設定します。

hasStrikethroughBOOLintextRange で指定された範囲内に取り消し線を引くかどうかを示すブール値フラグ。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 38 HRESULT SetDrawingEffect(IUnknown* drawingEffect, DWRITE_TEXT_RANGE textRange)

アプリケーション定義の描画エフェクトを設定します。

drawingEffectIUnknown*inこの範囲に適用されるアプリケーション定義の描画エフェクト。このデータオブジェクトは、最終的なレンダリングのためにアプリケーションの描画コールバックに渡し戻されます。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

解説(Remarks)

ID2D1RenderTarget::DrawTextLayout を使用してテキストを描画している場合、カラーブラシやグラデーションブラシなどの ID2D1Brush を描画エフェクトとして設定でき、そのブラシが指定されたテキスト範囲の描画に使用されます。

この描画エフェクトは指定された範囲に関連付けられ、 描画時にその範囲が描画される際に、コールバックを通じてアプリケーションに渡し戻されます。

vtbl 39 HRESULT SetInlineObject(IDWriteInlineObject* inlineObject, DWRITE_TEXT_RANGE textRange)

インラインオブジェクトを設定します。

inlineObjectIDWriteInlineObject*inアプリケーション定義のインラインオブジェクト。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

解説(Remarks)

アプリケーションはこの関数を呼び出して、特定の範囲に対するアプリケーション定義のインラインオブジェクトを記述するプロパティのセットを指定できます。

このインラインオブジェクトは指定された範囲に適用され、 その範囲が描画される際に DrawInlineObject コールバックを通じてアプリケーションに渡し戻されます。 その範囲内のテキストはすべて抑制されます。

vtbl 40 HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに対して、フォントのタイポグラフィ機能を設定します。

typographyIDWriteTypography*inフォントのタイポグラフィ設定へのポインター。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 41 HRESULT SetLocaleName(LPWSTR localeName, DWRITE_TEXT_RANGE textRange)

指定されたテキスト範囲内のテキストに対して、ロケール名を設定します。

localeNameLPWSTRinnull 終端のロケール名文字列。
textRangeDWRITE_TEXT_RANGEinこの変更が適用されるテキスト範囲。

戻り値

Type: HRESULT

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

vtbl 42 FLOAT GetMaxWidth()

レイアウトの最大幅を取得します。

戻り値

Type: FLOAT

レイアウトの最大幅を返します。

vtbl 43 FLOAT GetMaxHeight()

レイアウトの最大高さを取得します。

戻り値

Type: FLOAT

レイアウトの最大高さ。

vtbl 44 HRESULT GetFontCollection(DWORD currentPosition, IDWriteFontCollection** fontCollection, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストに関連付けられたフォントコレクションを取得します。

currentPositionDWORDin調査するテキストの位置。
fontCollectionIDWriteFontCollection**out現在のフォントコレクションへのポインターのアドレスが格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (下線 を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 45 HRESULT GetFontFamilyNameLength(DWORD currentPosition, DWORD* nameLength, DWRITE_TEXT_RANGE* textRange)

現在の位置におけるフォントファミリー名の長さを取得します。

currentPositionDWORDin現在のテキスト位置。
nameLengthDWORD*outこのメソッドが返るとき、フォントファミリー名を格納する文字配列のサイズが、終端の NULL 文字を含まない文字数で格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントファミリー を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 46 HRESULT GetFontFamilyName(DWORD currentPosition, LPWSTR fontFamilyName, DWORD nameSize, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのフォントファミリー名をコピーします。

currentPositionDWORDin調べるテキストの位置。
fontFamilyNameLPWSTRoutこのメソッドが返るとき、現在のフォントファミリー名を受け取る文字配列が格納されます。このパラメーターの領域は呼び出し側で確保する必要があります。
nameSizeDWORDin終端の NULL 文字を含む文字数での文字配列のサイズ。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントファミリー名 を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 47 HRESULT GetFontWeight(DWORD currentPosition, DWRITE_FONT_WEIGHT* fontWeight, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのフォントの太さ (font weight) を取得します。

currentPositionDWORDin調査するテキストの位置。
fontWeightDWRITE_FONT_WEIGHT*outこのメソッドが返るとき、指定された位置に適用されているフォントの太さ (font weight) の種類を示す値が格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントの太さ (font weight) を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 48 HRESULT GetFontStyle(DWORD currentPosition, DWRITE_FONT_STYLE* fontStyle, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのフォントスタイル (font style。傾斜 (slope) とも呼ばれます) を取得します。

currentPositionDWORDin調査するテキストの位置。
fontStyleDWRITE_FONT_STYLE*outこのメソッドが返るとき、指定された位置に適用されているフォントスタイル (font style。傾斜 (slope または incline) とも呼ばれます) の種類を示す値が格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントスタイル (font style) を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 49 HRESULT GetFontStretch(DWORD currentPosition, DWRITE_FONT_STRETCH* fontStretch, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのフォントの伸縮 (font stretch) を取得します。

currentPositionDWORDin調査するテキストの位置。
fontStretchDWRITE_FONT_STRETCH*outこのメソッドが返るとき、指定された位置に適用されているフォントの伸縮 (font stretch。幅 (width) とも呼ばれます) の種類を示す値が格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントの伸縮 (font stretch) を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 50 HRESULT GetFontSize(DWORD currentPosition, FLOAT* fontSize, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのフォントの em の高さを取得します。

currentPositionDWORDin調査するテキストの位置。
fontSizeFLOAT*outこのメソッドが返るとき、指定された位置のテキストのフォントサイズが em 単位で格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (フォントサイズ を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 51 HRESULT GetUnderline(DWORD currentPosition, BOOL* hasUnderline, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストに下線が存在するかどうかを取得します。

currentPositionDWORDin現在のテキスト位置。
hasUnderlineBOOL*outcurrentPosition で示される位置に下線が存在するかどうかを示すブール値フラグ。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (下線 を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 52 HRESULT GetStrikethrough(DWORD currentPosition, BOOL* hasStrikethrough, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストに取り消し線が存在するかどうかを取得します。

currentPositionDWORDin調査するテキストの位置。
hasStrikethroughBOOL*outcurrentPosition で示される位置に取り消し線が存在するかどうかを示すブール値フラグ。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲が格納されます。 つまり、この run は指定された位置とまったく同じ書式 (取り消し線 を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 53 HRESULT GetDrawingEffect(DWORD currentPosition, IUnknown** drawingEffect, DWRITE_TEXT_RANGE* textRange)

指定されたテキスト位置におけるアプリケーション定義の描画エフェクトを取得します。

currentPositionDWORDin描画エフェクトを取得する対象のテキストの位置。
drawingEffectIUnknown**outこのメソッドが返るとき、現在のアプリケーション定義の描画エフェクトへのポインターのアドレスが格納されます。通常、このエフェクトはグリフの描画に使用される前景ブラシです。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲が格納されます。 つまり、この run は指定された位置とまったく同じ書式 (描画エフェクト を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 54 HRESULT GetInlineObject(DWORD currentPosition, IDWriteInlineObject** inlineObject, DWRITE_TEXT_RANGE* textRange)

指定された位置のインラインオブジェクトを取得します。

currentPositionDWORDin指定されたテキスト位置。
inlineObjectIDWriteInlineObject**outアプリケーション定義のインラインオブジェクトが格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (インラインオブジェクト を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 55 HRESULT GetTypography(DWORD currentPosition, IDWriteTypography** typography, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのタイポグラフィ設定を取得します。

currentPositionDWORDin調査するテキストの位置。
typographyIDWriteTypography**outこのメソッドが返るとき、現在のタイポグラフィ設定へのポインターのアドレスが格納されます。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (タイポグラフィ を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 56 HRESULT GetLocaleNameLength(DWORD currentPosition, DWORD* nameLength, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのロケール名の長さを取得します。

currentPositionDWORDin調査するテキストの位置。
nameLengthDWORD*out終端の NULL 文字を含まない文字数での文字配列のサイズ。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (ロケール名 を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 57 HRESULT GetLocaleName(DWORD currentPosition, LPWSTR localeName, DWORD nameSize, DWRITE_TEXT_RANGE* textRange)

指定された位置のテキストのロケール名を取得します。

currentPositionDWORDin調査するテキストの位置。
localeNameLPWSTRoutこのメソッドが返るとき、現在のロケール名を受け取る文字配列が格納されます。
nameSizeDWORDin終端の NULL 文字を含む文字数での文字配列のサイズ。
textRangeDWRITE_TEXT_RANGE*outoptionalcurrentPosition で指定された位置のテキストと同じ書式を持つテキストの範囲。 つまり、この run は指定された位置とまったく同じ書式 (ロケール名 を含みますがそれに限定されません) を持ちます。

戻り値

Type: HRESULT

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

vtbl 58 HRESULT Draw(void* clientDrawingContext, IDWriteTextRenderer* renderer, FLOAT originX, FLOAT originY)

指定されたクライアント描画コンテキストを使用してテキストを描画します。

clientDrawingContextvoid*inoptionalアプリケーション定義の描画コンテキスト。
rendererIDWriteTextRenderer*inテキスト文字列の各部分の描画に使用されるコールバック関数のセットへのポインター。
originXFLOATinレイアウトの左辺の x 座標。
originYFLOATinレイアウトの上辺の 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 エラーが発生します。

vtbl 59 HRESULT GetLineMetrics(DWRITE_LINE_METRICS* lineMetrics, DWORD maxLineCount, DWORD* actualLineCount)

テキスト文字列の個々のテキスト行に関する情報を取得します。

lineMetricsDWRITE_LINE_METRICS*outoptionalこのメソッドが返るとき、個々のテキスト行のさまざまな計算済み長さ値を含む構造体の配列へのポインターが格納されます。
maxLineCountDWORDinlineMetrics 配列の最大サイズ。
actualLineCountDWORD*outこのメソッドが返るとき、必要となる lineMetrics 配列の実際のサイズが格納されます。

戻り値

Type: HRESULT

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

解説(Remarks)

maxLineCount が十分な大きさでない場合は、HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) と等価な E_NOT_SUFFICIENT_BUFFER が 返され、*actualLineCount には必要な行数が 設定されます。

vtbl 60 HRESULT GetMetrics(DWRITE_TEXT_METRICS* textMetrics)

書式設定された文字列の全体的なメトリックを取得します。(IDWriteTextLayout.GetMetrics)

textMetricsDWRITE_TEXT_METRICS*outこのメソッドが返るとき、書式設定後のテキストおよび関連コンテンツの測定された距離が格納されます。

戻り値

Type: HRESULT

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

vtbl 61 HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS* overhangs)

レイアウト、およびテキストグリフやインラインオブジェクトを含む、レイアウトに含まれるすべてのオブジェクトのオーバーハング (DIP 単位) を返します。

overhangsDWRITE_OVERHANG_METRICS*outレイアウト外にはみ出す可視範囲のオーバーシュート (DIP 単位)。

戻り値

Type: HRESULT

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

解説(Remarks)

下線と取り消し線はブラックボックスの判定には寄与しません。これらは実際にはレンダラーによって描画され、レンダラーはさまざまなスタイルでこれらを描画できるためです。

vtbl 62 HRESULT GetClusterMetrics(DWRITE_CLUSTER_METRICS* clusterMetrics, DWORD maxClusterCount, DWORD* actualClusterCount)

各グリフクラスターの論理的なプロパティと測定値を取得します。

clusterMetricsDWRITE_CLUSTER_METRICS*outoptionalこのメソッドが返るとき、グリフクラスターに関する、改行や合計送り幅 (advance width) などのメトリックが格納されます。
maxClusterCountDWORDinclusterMetrics 配列の最大サイズ。
actualClusterCountDWORD*outこのメソッドが返るとき、必要となる clusterMetrics 配列の実際のサイズが格納されます。

戻り値

Type: HRESULT

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

解説(Remarks)

maxClusterCount が十分な大きさでない場合は、HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) と等価な E_NOT_SUFFICIENT_BUFFER が 返され、actualClusterCount には必要なクラスター数が 設定されます。

vtbl 63 HRESULT DetermineMinWidth(FLOAT* minWidth)

単語全体を構成する文字の間で緊急改行 (emergency breaking) を発生させることなくレイアウトに設定できる、可能な最小幅を決定します。

minWidthFLOAT*out最小幅。

戻り値

Type: HRESULT

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

vtbl 64 HRESULT HitTestPoint(FLOAT pointX, FLOAT pointY, BOOL* isTrailingHit, BOOL* isInside, DWRITE_HIT_TEST_METRICS* hitTestMetrics)

アプリケーションは、レイアウトボックスの左上位置を基準とした特定のピクセル位置を渡してこの関数を呼び出し、ヒットテストが発生したテキスト文字列の対応するヒットテストメトリックに関する情報を取得します。

pointXFLOATinヒットテストするピクセル位置 X。レイアウトボックスの左上位置を基準とします。
pointYFLOATinヒットテストするピクセル位置 Y。レイアウトボックスの左上位置を基準とします。
isTrailingHitBOOL*outヒットテスト位置が文字の先端 (leading) 側と終端 (trailing) 側の どちらにあるかを示す出力フラグ。出力 *isInside 値が FALSE に設定されている場合、この値は出力 hitTestMetrics->textPosition 値に従って、ヒットテスト位置に最も近いエッジを表すように設定されます。
isInsideBOOL*outヒットテスト位置がテキスト文字列の内部にあるかどうかを示す出力フラグ。 FALSE の場合、テキストのエッジに最も近い位置が返されます。
hitTestMetricsDWRITE_HIT_TEST_METRICS*outヒットテスト位置を完全に囲む出力ジオメトリ。出力 *isInside 値が FALSE に設定されている場合、この構造体はヒットテスト位置に最も近いエッジを囲むジオメトリを表します。

戻り値

Type: HRESULT

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

vtbl 65 HRESULT HitTestTextPosition(DWORD textPosition, BOOL isTrailingHit, FLOAT* pointX, FLOAT* pointY, DWRITE_HIT_TEST_METRICS* hitTestMetrics)

アプリケーションは、テキスト位置とその位置の論理的な側を指定して、レイアウトボックスの左上を基準としたピクセル位置を取得するためにこの関数を呼び出します。

textPositionDWORDinピクセル位置を取得するために使用するテキスト位置。
isTrailingHitBOOLinピクセル位置が指定されたテキスト位置の先端 (leading) 側と終端 (trailing) 側のどちらであるかを示すブール値フラグ。
pointXFLOAT*outこのメソッドが返るとき、レイアウトボックスの左上位置を基準とした出力ピクセル位置 X が格納されます。
pointYFLOAT*outこのメソッドが返るとき、レイアウトボックスの左上位置を基準とした出力ピクセル位置 Y が格納されます。
hitTestMetricsDWRITE_HIT_TEST_METRICS*outこのメソッドが返るとき、指定されたテキスト位置を完全に囲む出力ジオメトリが格納されます。

戻り値

Type: HRESULT

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

vtbl 66 HRESULT HitTestTextRange(DWORD textPosition, DWORD textLength, FLOAT originX, FLOAT originY, DWRITE_HIT_TEST_METRICS* hitTestMetrics, DWORD maxHitTestMetricsCount, DWORD* actualHitTestMetricsCount)

アプリケーションは、テキスト位置の範囲に対応するヒットテストメトリックのセットを取得するためにこの関数を呼び出します。主な用途の 1 つは、テキスト文字列のハイライト選択を実装することです。

textPositionDWORDin指定された範囲の最初のテキスト位置。
textLengthDWORDin指定された範囲の位置の数。
originXFLOATinレイアウトボックスの左側における原点ピクセル位置 X。このオフセットは、返されるヒットテストメトリックに加算されます。
originYFLOATinレイアウトボックスの上部における原点ピクセル位置 Y。このオフセットは、返されるヒットテストメトリックに加算されます。
hitTestMetricsDWRITE_HIT_TEST_METRICS*outoptionalこのメソッドが返るとき、指定された位置範囲を完全に囲む出力ジオメトリのバッファーへのポインターが格納されます。 バッファーは少なくとも maxHitTestMetricsCount 以上のサイズである必要があります。
maxHitTestMetricsCountDWORDinhitTestMetrics がバッファーメモリ内に保持できるボックスの最大数。
actualHitTestMetricsCountDWORD*outhitTestMetrics がバッファーメモリ内に保持するジオメトリの実際の数。

戻り値

Type: 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_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 指定が可能。