度々お世話になります。
環境はWINDOWSXP VC++ MFCダイアログベースです。
システムを動作させる環境での
デフォルトのフォントの「サイズの一覧」を取得したいのですが
やり方が全く分かりません。
7、8、9、10、10.5、11・・・といった値がほしいのですが。
ど、どなたかご教授下さいますよう宜しくお願い申し上げます。
LOGFONT の lfFaceName を設定した状態で
EnumFontFamiliesEx を呼び出すと、サイズの一覧を得られます。
ただ、TrueType のように任意のサイズで表示できる
フォントの場合は、何も取得できません。
MS WORD などの一覧は、適当に選んだ値を並べているだけです。
http://support.microsoft.com/kb/200111/en-us
回答有難うございます。
おかげ様で、少し道が見えてきました。
が・・・、サイズの取得が分かりません(汗)
デフォルトフォントの情報をLOGFONT構造体にセット、EnumFontFamiliesExを実行しました。
コールバック関数の EnumFontSizeExProcは、一度しか呼び出されないのですが
フォントサイズ一覧の情報は、どこに入っているのでしょうか。
度々申し訳ありませんが、ご指摘願います。
ENUMLOGFONTEX の elfLogFont の lfHeight です。
またまた、ご回答有難うございます。
なぜか上手くいかないです(汗)
コールバック関数の引数から取得できるlfHeightには、すべて「32」が
入っているのですが・・・。
どこがおかしいのか、ご指摘願えますでしょうか。
度々申し訳ございません。
MSゴシックのサイズ一覧をコンボボックスに設定したいのですが
HDC hDC = ::GetDC(GetSafeHwnd());
LOGFONT LogFont;
LogFont.lfCharSet = DEFAULT_CHARSET;
lstrcpy(LogFont.lfFaceName, _T("MS ゴシック"));
::EnumFontFamiliesEx(hDC, &LogFont, (FONTENUMPROC)EnumFontSizeExProc, (LPARAM)this, 0);
::ReleaseDC(GetSafeHwnd(), hDC);
int CALLBACK EnumFontSizeExProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam)
{
CString str;
HDC hDC = GetDC(NULL);
testDlg * pDlg = testDlg *)lParam;
int i = lpelfe->elfLogFont.lfHeight;
str.Format(_T("%d"), i
pDlg->combo.AddString(str);
ReleaseDC(NULL, hDC);
return 1;
}
MS ゴシック は TrueType フォントです。
先に書いたとおり、TrueType フォントには
決められたサイズというものがありませんので、取得できません。
複数回コールバックが呼ばれるのは、
LogFont.lfCharSet = DEFAULT_CHARSET;
としているためです。
全ての CharSet のフォントが列挙されています。
フォントが何タイプかどうかは、第三引数を見てください。
度々有難うございます。
当方が取得したいフォントが、TrueTypeですので
サイズの取得が無理というか、サイズというものが存在しないのですね(汗)
フォントのことについて、勉強してから再度で直して参ります^^;
本当に有難うございました。
ツイート | ![]() |