Как узнать, есть ли в системе нужный мне шрифт в MFC?

StackOverflow https://stackoverflow.com/questions/1623427

Вопрос

Я хочу написать следующую функцию

bool IsFontExistInSystem(const CString& fontStyle) const
{

}

Есть ли в Windows API для этого? Большое спасибо!

Это было полезно?

Решение

Вот старый код, который я выкопал, чтобы проверить, установлен ли шрифт. Это может быть связано с уборкой, но вы поняли:

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;
}

Другие советы

Вы можете использовать EnumFontFamiliesEx чтобы узнать, существует ли реальный шрифт.

UPD: я только что узнал, что MS рекомендует использовать EnumFontFamiliesEx вместо EnumFontFamilies.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top