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

IDWriteFontFace5

COM
IID98eff3a5-b667-479a-b145-e2fa5b9fdc29継承元IDWriteFontFace4自前メソッド開始 vtbl53

公式ドキュメント

フォントフェイスの種類、適切なファイル参照、およびフェイス識別データを含みます。(IDWriteFontFace5)

メソッド 5

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

vtbl 53 DWORD GetFontAxisValueCount()

フォントで定義された軸の数を取得します。これには静的軸と可変軸の両方が含まれます。

戻り値

Type: UINT32

フォントフェイスで定義された軸の数。

vtbl 54 HRESULT GetFontAxisValues(DWRITE_FONT_AXIS_VALUE* fontAxisValues, DWORD fontAxisValueCount)

フォントで使用される軸値のリストを取得します。

fontAxisValuesDWRITE_FONT_AXIS_VALUE*outGetFontAxisValues がフォント軸値のリストを書き込む DWRITE_FONT_AXIS_VALUE 構造体の配列へのポインター。この配列のサイズと有効期間の管理は呼び出し側の責任です。割り当てる配列のサイズを決定するには、GetFontAxisValueCount を呼び出してください。
fontAxisValueCountDWORDinfontAxisValues が指すメモリブロックに書き込むフォント軸値の最大数。

戻り値

Type: HRESULT

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

戻り値 説明
E_INVALIDARG fontAxisValueCountGetFontAxisValueCount から返された値と一致しません。

解説(Remarks)

値はフォントで定義された正規の順序で返され、実際にサポートされる範囲にクランプされます。これは必ずしも CreateFontFace に渡した軸値の配列と同じであるとは限りません。

// main.cpp
#include <unknwn.h>
#include <winrt/base.h>
#include <dwrite_3.h>

int main()
{
    winrt::init_apartment();

    winrt::com_ptr<IDWriteFactory> factory;

    winrt::check_hresult(::DWriteCreateFactory(
        DWRITE_FACTORY_TYPE_SHARED,
        __uuidof(factory),
        reinterpret_cast<IUnknown**>(factory.put())));

    std::wstring filePath{ L"C:\\WINDOWS\\FONTS\\AGENCYB.TTF" };

    winrt::com_ptr<IDWriteFontFile> fontFile;

    factory->CreateFontFileReference(
        filePath.c_str(),
        nullptr,
        fontFile.put());

    std::array<IDWriteFontFile*, 1> fontFiles{ fontFile.get() };

    winrt::com_ptr<IDWriteFontFace> fontFace;

    winrt::check_hresult(factory->CreateFontFace(
        DWRITE_FONT_FACE_TYPE_TRUETYPE,
        1,
        fontFiles.data(),
        0,
        DWRITE_FONT_SIMULATIONS_NONE,
        fontFace.put()
    ));

    winrt::com_ptr<IDWriteFontFace5> fontFace5{ fontFace.as<IDWriteFontFace5>() };
    
    UINT32 axisValueCount{ fontFace5->GetFontAxisValueCount() };

    DWRITE_FONT_AXIS_VALUE* axisValues{ new DWRITE_FONT_AXIS_VALUE[axisValueCount] };

    winrt::check_hresult(
        fontFace5->GetFontAxisValues(axisValues, axisValueCount));

    DWRITE_FONT_AXIS_VALUE* eachAxisValue{ axisValues };

    for (int ix = 0; ix < axisValueCount; ++ix, ++eachAxisValue)
    {
        printf("%zu,%f\n\r", eachAxisValue->axisTag, eachAxisValue->value);
    }

    delete[] axisValues;
}
vtbl 55 BOOL HasVariations()

このフォントフェイスのリソースが可変軸をサポートするかどうかを判定します。(IDWriteFontFace5::HasVariations)

戻り値

Type: BOOL

フォントフェイスのリソースが可変軸をサポートする場合は true。それ以外の場合は false

vtbl 56 HRESULT GetFontResource(IDWriteFontResource** fontResource)

このフォントフェイスの基になるフォントリソースを取得します。

fontResourceIDWriteFontResource**outIDWriteFontResource インターフェイスへのポインターのアドレス。正常に完了すると、この関数はポインターに新しく作成されたフォントリソースオブジェクトを設定します。

戻り値

Type: HRESULT

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

vtbl 57 BOOL Equals(IDWriteFontFace* fontFace)

Equals が呼び出されているフォントフェイスオブジェクトと、パラメーターとして渡されたフォントフェイスオブジェクトとの等価比較を実行します。

fontFaceIDWriteFontFace*inEquals が呼び出されているフォントフェイスオブジェクトと比較するフォントフェイスオブジェクトへのポインター。

戻り値

Type: BOOL

フォントフェイスオブジェクトが等しい場合は true。それ以外の場合は false

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDWriteFontFace5 "{98EFF3A5-B667-479A-B145-E2FA5B9FDC29}"
#usecom global IDWriteFontFace5 IID_IDWriteFontFace5 "{}"
#comfunc global IDWriteFontFace5_GetFontAxisValueCount  53
#comfunc global IDWriteFontFace5_GetFontAxisValues      54 var,int
#comfunc global IDWriteFontFace5_HasVariations          55
#comfunc global IDWriteFontFace5_GetFontResource        56 sptr
#comfunc global IDWriteFontFace5_Equals                 57 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。