Frage

Ich mag die folgende Funktion schreiben

bool IsFontExistInSystem(const CString& fontStyle) const
{

}

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

War es hilfreich?

Lösung

Hier einige alte Code, den ich ausgegraben, dass überprüft, ob eine Schriftart installiert ist. Es könnte mit aufmöbeln in Ordnung gebracht 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;
}

Andere Tipps

könnten Sie EnumFontFamiliesEx ob die aktuelle Schriftart vorhanden ist.

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

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top