5 Stimmen

Wie kann ich herausfinden, ob das System die benötigte Schriftart in MFC hat?

Ich möchte die folgende Funktion schreiben

bool IsFontExistInSystem(const CString& fontStyle) const
{

}

Gibt es eine API in Windows, um dies zu tun? Vielen Dank!

6voto

Rob Punkte 72944

Hier ist ein alter Code, den ich ausgegraben habe, um zu prüfen, ob eine Schriftart installiert ist. Er könnte etwas aufgeräumt werden, aber Sie verstehen 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;
}

4voto

Kirill V. Lyadvinsky Punkte 92957

Sie könnten verwenden EnumFontFamiliesEx um herauszufinden, ob eine aktuelle Schriftart existiert.

UPD: Ich habe soeben erfahren, dass MS empfiehlt, EnumFontFamiliesEx anstelle von EnumFontFamilies zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X