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

IDWriteFontFamily

COM
IIDda20d8ef-812a-4c43-9802-62ec4abd7add継承元IDWriteFontList自前メソッド開始 vtbl6

公式ドキュメント

関連するフォントのファミリーを表します。(IDWriteFontFamily)

解説(Remarks)

フォントファミリーとは、"Times New Roman" のように同じファミリー名を共有しながらも、特徴が異なるフォントの集合です。こうした特徴の違いには、italic のようなスタイルや、bold のような太さ (weight) が含まれます。

次の図は、"Times New Roman" フォントファミリーに属するフォントの例を示しています。

Illustration of italic, bold, and bold italic text from the Times New Roman font family IDWriteFontFamily オブジェクトは、次の例に示す IDWriteFontCollection::GetFontFamily メソッドを使用して、フォントコレクションから取得できます。 GetFontFamilyUINT32 のインデックスを受け取り、そのインデックスにあるフォントのフォントファミリーを返します。
IDWriteFontFamily* pFontFamily = NULL;

// Get the font family.
if (SUCCEEDED(hr))
{
    hr = pFontCollection->GetFontFamily(i, &pFontFamily);
}

フォントファミリー名は、テキストレイアウトオブジェクトやテキストフォーマットオブジェクトのフォントファミリーを指定するために使用されます。 IDWriteFontFamily::GetFamilyNames メソッドを使用すると、次のコードに示すように、IDWriteFontFamily オブジェクトからローカライズされたフォントファミリー名の一覧を IDWriteLocalizedStrings オブジェクトの形で取得できます。

IDWriteLocalizedStrings* pFamilyNames = NULL;

// Get a list of localized strings for the family name.
if (SUCCEEDED(hr))
{
    hr = pFontFamily->GetFamilyNames(&pFamilyNames);
}

メソッド 3

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

vtbl 6 HRESULT GetFamilyNames(IDWriteLocalizedStrings** names)

フォントファミリーのファミリー名を、ロケール名をインデックスとして格納したローカライズ文字列オブジェクトを作成します。(IDWriteFontFamily.GetFamilyNames)

namesIDWriteLocalizedStrings**out新しく作成された IDWriteLocalizedStrings オブジェクトへのポインターのアドレス。

戻り値

Type: HRESULT

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

解説(Remarks)

次のコード例は、IDWriteFontFamily オブジェクトからフォントファミリー名を取得する方法を示しています。

IDWriteLocalizedStrings* pFamilyNames = NULL;

// Get a list of localized strings for the family name.
if (SUCCEEDED(hr))
{
    hr = pFontFamily->GetFamilyNames(&pFamilyNames);
}

UINT32 index = 0;
BOOL exists = false;

wchar_t localeName[LOCALE_NAME_MAX_LENGTH];

if (SUCCEEDED(hr))
{
    // Get the default locale for this user.
    int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH);

    // If the default locale is returned, find that locale name, otherwise use "en-us".
    if (defaultLocaleSuccess)
    {
        hr = pFamilyNames->FindLocaleName(localeName, &index, &exists);
    }
    if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English
    {
        hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists);
    }
}

// If the specified locale doesn't exist, select the first on the list.
if (!exists)
    index = 0;

UINT32 length = 0;

// Get the string length.
if (SUCCEEDED(hr))
{
    hr = pFamilyNames->GetStringLength(index, &length);
}

// Allocate a string big enough to hold the name.
wchar_t* name = new (std::nothrow) wchar_t[length+1];
if (name == NULL)
{
    hr = E_OUTOFMEMORY;
}

// Get the family name.
if (SUCCEEDED(hr))
{
    hr = pFamilyNames->GetString(index, name, length+1);
}
vtbl 7 HRESULT GetFirstMatchingFont(DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch, DWRITE_FONT_STYLE style, IDWriteFont** matchingFont)

指定したプロパティに最も一致するフォントを取得します。

weightDWRITE_FONT_WEIGHTin要求されたフォントの太さ (weight) を一致させるために使用される値。
stretchDWRITE_FONT_STRETCHin要求されたフォントの幅 (stretch) を一致させるために使用される値。
styleDWRITE_FONT_STYLEin要求されたフォントのスタイルを一致させるために使用される値。
matchingFontIDWriteFont**outこのメソッドが返るときに、新しく作成された IDWriteFont オブジェクトへのポインターのアドレスが格納されます。

戻り値

Type: HRESULT

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

vtbl 8 HRESULT GetMatchingFonts(DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch, DWRITE_FONT_STYLE style, IDWriteFontList** matchingFonts)

フォントファミリー内のフォントを、指定したプロパティにどれだけ一致するかの順にランク付けした一覧を取得します。

weightDWRITE_FONT_WEIGHTin要求されたフォントの太さ (weight) を一致させるために使用される値。
stretchDWRITE_FONT_STRETCHin要求されたフォントの幅 (stretch) を一致させるために使用される値。
styleDWRITE_FONT_STYLEin要求されたフォントのスタイルを一致させるために使用される値。
matchingFontsIDWriteFontList**out新しく作成された IDWriteFontList オブジェクトへのポインターのアドレス。

戻り値

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_IDWriteFontFamily "{DA20D8EF-812A-4C43-9802-62EC4ABD7ADD}"
#usecom global IDWriteFontFamily IID_IDWriteFontFamily "{}"
#comfunc global IDWriteFontFamily_GetFamilyNames        6 sptr
#comfunc global IDWriteFontFamily_GetFirstMatchingFont  7 int,int,int,sptr
#comfunc global IDWriteFontFamily_GetMatchingFonts      8 int,int,int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。