كيفية العثور على ما إذا كان النظام لديه خط احتاجه في MFC؟

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

سؤال

وأريد أن أكتب وظيفة التالية

bool IsFontExistInSystem(const CString& fontStyle) const
{

}

هل هناك أي 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