2009-10-26 5 views

答えて

5

フォントがインストールされているかどうかを確認するために掘り出した古いコードです。それは整理されているとすることができますが、あなたは考えを得る:

static int CALLBACK CFontHelper::EnumFontFamExProc(ENUMLOGFONTEX* /*lpelfe*/, NEWTEXTMETRICEX* /*lpntme*/, int /*FontType*/, LPARAM lParam) 
{ 
    LPARAM* l = (LPARAM*)lParam; 
    *l = TRUE; 
    return TRUE; 
} 

bool Font::IsInstalled(LPCTSTR lpszFont) 
{ 
    // Get the screen DC 
    CDC dc; 
    if (!dc.CreateCompatibleDC(NULL)) 
    { 
     return false; 
    } 
    LOGFONT lf = { 0 }; 
    // Any character set will do 
    lf.lfCharSet = DEFAULT_CHARSET; 
    // Set the facename to check for 
    _tcscpy(lf.lfFaceName, lpszFont); 
    LPARAM lParam = 0; 
    // Enumerate fonts 
    ::EnumFontFamiliesEx(dc.GetSafeHdc(), &lf, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)&lParam, 0); 
    return lParam ? true : false; 
} 
+0

多くの感謝!できます! – user25749

4

EnumFontFamiliesExを使用して、実際のフォントが存在するかどうかを調べることができます。

UPD:私は、MSがEnumFontFamiliesの代わりにEnumFontFamiliesExを使用することを推奨していることを知りました。

+0

ありがとう! しかし、私はこのAPIがうまく設計されていないと思っています.... – user25749

+0

私はあなたが私を打つとき、私はそれが嫌いです。 :[ – GManNickG

+0

@GMan、それは対称的なプロセスです:) –

関連する問題