كيفية العثور على ما إذا كان النظام لديه خط احتاجه في MFC؟
سؤال
وأريد أن أكتب وظيفة التالية
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
.لا تنتمي إلى StackOverflow