山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他フォント名の一覧を標準出力に表示
概要
EnumFontFamiliesExを用いてフォントの一覧を標準出力に出力します。コマンドプロンプトで動作します。
以下に動作例を示します。フォントの数が多いので途中を一部省略して記述しています。
以下に動作例を示します。フォントの数が多いので途中を一部省略して記述しています。
System 日本語 ラスターフォント @System m 日本語 ラスターフォント Terminal 日本語 ラスターフォント @Terminal l 日本語 ラスターフォント FixedSys 日本語 ラスターフォント @FixedSys s 日本語 ラスターフォント ~ @HGPゴシックE 標準 日本語 TrueTypeフォント HGSゴシックE 標準 日本語 TrueTypeフォント @HGSゴシックE 標準 日本語 TrueTypeフォント Arial Unicode MS Regular 日本語 TrueTypeフォント @Arial Unicode MS Regular 日本語 TrueTypeフォント 154個のフォントが見つかりました。 いずれかのキーを押すと終了します。
テスト環境
コンパイラ
Visual C++ 2013 Express 32/64bitプログラムソースの概要
_tmain関数
Windowsから最初に_tmain関数が呼び出されます。ディスクトップのハンドルを取得しhdcに保存します。
LOGONT構造体に検索条件を設定してEnumFontFamiliesEx APIを呼び出します。
コールバック関数EnumFontFamProcがフォント1個に対して1回呼び出されますので、EnumFontFamProc関数側で標準出力に表示します。
EnumFontFamProc関数
フォントが見つかるたびに呼び出されるので引数よりフォントの種類等を調べて標準出力に出力します。プログラムソース
// フォント名の一覧を標準出力に表示
// Visual C++ 2013 32/64bit
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
int count;
int CALLBACK EnumFontFamProc(const LOGFONT * lpelf, const TEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam){
ENUMLOGFONTEX *lpelfe = (ENUMLOGFONTEX *)lpelf;
TCHAR* ft=_TEXT("");
switch (FontType){
case DEVICE_FONTTYPE:
ft = _TEXT("デバイスフォント");
break;
case RASTER_FONTTYPE:
ft = _TEXT("ラスターフォント");
break;
case TRUETYPE_FONTTYPE:
ft = _TEXT("TrueTypeフォント");
break;
}
_tprintf(_TEXT("%s %s %s %s¥n"), lpelfe->elfFullName, lpelfe->elfStyle, lpelfe->elfScript,ft);
++count;
return 1;
}
void _tmain(void){
// UNICODE文字を標準出力に正しく表示させるためにロケールを設定
_tsetlocale(LC_ALL, _TEXT(""));
count = 0;
LOGFONT lf;
HDC hdc = GetDC(0);
lf.lfFaceName[0] = _T('¥0'); // 全てのフォント名
lf.lfPitchAndFamily = DEFAULT_PITCH;
lf.lfCharSet = SHIFTJIS_CHARSET;
EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)EnumFontFamProc, (LONG_PTR)&lf, 0);
ReleaseDC(0, hdc);
_tprintf(_TEXT("%d個のフォントが見つかりました。¥nいずれかのキーを押すと終了します。¥n"),count);
getchar();
}
ソースファイルと実行ファイルのダウンロード
Copyright (C) 2012 山本ワールド All Rights Reserved.