2009-10-26 8 views

Antwort

5

Hier ist ein alter Code, den ich ausgegraben habe, der überprüft, ob eine Schriftart installiert ist. Es könnte tun aufgeräumt werden, aber Sie bekommen die Idee:

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

Vielen Dank! Es klappt! – user25749

4

Sie könnten EnumFontFamiliesEx verwenden, um zu finden, ob tatsächliche Schriftart vorhanden ist.

UPD: Ich habe gerade erfahren, dass es von MS empfohlen wird, EnumFontFamiliesEx anstelle von EnumFontFamilies zu verwenden.

+0

Vielen Dank! Aber ich denke, dass diese API schlecht entworfen ist .... – user25749

+0

Ich hasse es, wenn Sie mich schlagen. : [ – GManNickG

+0

@GMan, es ist ein symmetrischer Prozess :) –

Verwandte Themen