CreateTextFormatのドキュメントには、フォント フォールバックの選択については何も記載されていませんが、デフォルト (NULL = システム) コレクションが選択されている場合、DirectWrite はフォント フォールバックを明確に実装します。たとえば、Gabriola フォントにない 2 つのグリフを DirectWrite SDK デモ アプリで使用するテスト文字列に追加すると、DirectWrite は Segoe UI シンボル フォントから不足しているグリフを選択します。これは、以下に示すように、基本的なDrawText
呼び出しとカスタム レンダラー (フォント フォールバックのカスタムは何も行わない) で発生します (唯一の変更はテスト文字列です)。
デモ アプリでは Gabriola のみが指定されていますが、チェックマークと星形は Gabriola ではなく Segoe UI Symbol から取得されています。では、フォールバック フォントが DirectWrite (CreateTextFormat) によってどのように選択されているかを知っている人はいますか?
更新します。フォールバック フォントを一覧表示できるGetSystemFontFallbackがあるようですが、Windows 8.1 でのみ使用できます (IDWriteFactory2 にあるため)。フォールバック フォントの列挙に関する API のギャップに気付いたようです。したがって、Windows 8.1 より前にこれを行う方法はないと思いますが、誰かがハック/回避策を知っていれば...
Update2 . MSFTの従業員の引用:
DirectWrite には、レジストリから読み取られない、または構成可能な方法ではないフォールバック データがあります。ただし、Windows 8.1 では、アプリが独自のフォールバックを指定できるようにする API が導入されました。(これは、複合フォント定義を作成するための WPF API に似ています。)
ハードコードされたアルゴリズム/置換スキームが実際に何であるかをまだ正確に説明していません。