IDWriteFont1
COM公式ドキュメント
フォントコレクション内の物理フォントを表します。(IDWriteFont1)
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フォントフェイスのデザイン単位および共通メトリックを取得します。これらのメトリックはフォントフェイス内のすべてのグリフに適用され、アプリケーションがレイアウト計算に使用します。(IDWriteFont1.GetMetrics)
| fontMetrics | DWRITE_FONT_METRICS1* | out | 現在のフォントフェイスのフォントメトリックを格納した DWRITE_FONT_METRICS1 構造体。このメソッドが返すメトリックはフォントのデザイン単位です。 |
フォントから PANOSE 値を取得します。この値はフォントの選択とマッチングに使用されます。
| panose | DWRITE_PANOSE* | out | 値を格納する DWRITE_PANOSE 構造体へのポインター。 |
解説(Remarks)
フォントに PANOSE 値がない場合、 それらは 'any' (0) に設定され、DirectWrite はそれらの値をシミュレートしません。
フォントがサポートする文字範囲の一覧を取得します。
| maxRangeCount | DWORD | in | クライアントから渡される文字範囲の 最大数。 |
| unicodeRanges | DWRITE_UNICODE_RANGE* | outoptional | 文字範囲が格納される DWRITE_UNICODE_RANGE 構造体の配列。 |
| actualRangeCount | DWORD* | out | 最大数に関係なく、実際の文字範囲の数への ポインター。 |
戻り値
Type: HRESULT
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に実行されました。 | |
|
バッファーが小さすぎます。actualRangeCount が maxRangeCount より大きくなっています。 |
解説(Remarks)
フォントがサポートする文字範囲の一覧は、 文字の選択、グリフの表示、効率的なフォント選択の検索 といったシナリオで役立ちます。GetUnicodeRanges は GDI の GetFontUnicodeRanges に似ていますが、16 ビットの UCS-2 だけでなく 完全な Unicode 範囲を返す点が異なります。
これらの範囲は OS/2::ulCodePageRange1 ではなく cmap から取得されます。
このメソッドが利用できない場合は、IDWriteFontFace::GetGlyphIndices メソッドを使用して欠落しているグリフを確認できます。このメソッドは、フォントに存在しないグリフに対して 0 のインデックスを返します。
フォントフォールバックのように、単一の文字または連続する一連の単一文字を確認する必要がある場合は、IDWriteFont::HasCharacter メソッドの方が簡単なことが多いです。
フォントが等幅かどうか、つまり文字がすべて同じ固定ピッチ幅(非プロポーショナル)であるかどうかを判定します。
戻り値
Type: BOOL
フォントが等幅の場合は true を、そうでない場合は false を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteFont1 "{ACD16696-8C14-4F5D-877E-FE3FC1D32738}" #usecom global IDWriteFont1 IID_IDWriteFont1 "{}" #comfunc global IDWriteFont1_GetMetrics 14 var #comfunc global IDWriteFont1_GetPanose 15 var #comfunc global IDWriteFont1_GetUnicodeRanges 16 int,var,var #comfunc global IDWriteFont1_IsMonospacedFont 17 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDWriteFont1 "{ACD16696-8C14-4F5D-877E-FE3FC1D32738}" #usecom global IDWriteFont1 IID_IDWriteFont1 "{}" #comfunc global IDWriteFont1_GetMetrics 14 sptr #comfunc global IDWriteFont1_GetPanose 15 sptr #comfunc global IDWriteFont1_GetUnicodeRanges 16 int,sptr,sptr #comfunc global IDWriteFont1_IsMonospacedFont 17 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。