2012年2月9日木曜日

[Windows]フォントをインストールせずに使うには

AddFontResourceEx() API を使えば、フォントをインストールせずに呼び出したアプリ内で利用できます。

int AddFontResourceEx(
   LPCTSTR lpszFilename,   // フォントリソースファイル名
   DWORD fl, // フラグ
   DESIGNVECTOR *pdv    // Multiple Master フォントを指定する
                                     // 軸値の組へのポインタ
);

パラメータ

lpszFilename
    有効なフォントファイル名が入る、NULL で終わる文字列へのポインタを指定します。
    ファイル名は次のいずれかを指定します。
ファイル名拡張子ファイルタイプ
.fonフォントリソースファイルを指定します。
.fntRaw ビットマップフォントファイルを指定します。
.ttfRaw TrueType ファイルを指定します。
.ttcTrue Type フォントコレクションを指定します。
.fotTrueType リソースファイルを指定します。
.otfPostScript OpenType フォントを指定します。
.mmmMultiple Master Type1 フォントリソースファイルを指定します。.pfm および .pfb ファイルと共に使ってください。
.pfbType 1 フォントビットファイルを指定します。.pfm ファイルと共に使います。
.pfmType 1 フォントメトリックスファイルを指定します。.pfb ファイルと共に使います。
   情報が複数のリソースファイルに分かれているフォントを追加するには、abcxxxxx.pfm | abcxxxxx.pfb のようにファイル名を | で区切り、lpszFileName パラメータを使って指します。

fl
    システムに追加されるフォントの特性を指定します。次の値が定義されています。
意味
FR_PRIVATEAddFontResourceEx 関数を呼び出したプロセスだけがこのフォントを使うことができます。そのフォントの名前とパブリックフォントが一致する場合は、プライベートフォントが選ばれます。プロセスが終了すると、システムは、そのプロセスが AddFontResourceEx 関数を使ってインストールしたすべてのフォントを削除します。
FR_NOT_ENUMAddFontResourceEx 関数を呼び出したプロセスも含め、いずれのプロセスもこのフォントを列挙できません。

pdv
    DESIGNVECTOR 構造体へのポインタを指定します。そのフォントが Multiple Master OpenType フォントでない場合は NULL になります。

戻り値

関数が成功すると、追加されたフォント数が返ります。
関数が失敗すると、0 が返ります。


[使ってみて]
※lpszFilenameにはパスを指定できる。(例)"font\MS 明朝"
このAPIをアプリの初期化時に呼んでおけば、アプリ起動中は指定したフォントを利用できる。
FR_NOT_ENUMを指定しなければフォントコンボボックスにも列挙されるのでユーザーに選択させる事も可能。

0 件のコメント:

コメントを投稿