Tôi muốn viết chức năng sauLàm thế nào để tìm xem hệ thống có phông chữ tôi cần trong MFC?
bool IsFontExistInSystem(const CString& fontStyle) const
{
}
Có API nào trong cửa sổ để thực hiện việc này không? Rất cám ơn!
Tôi muốn viết chức năng sauLàm thế nào để tìm xem hệ thống có phông chữ tôi cần trong MFC?
bool IsFontExistInSystem(const CString& fontStyle) const
{
}
Có API nào trong cửa sổ để thực hiện việc này không? Rất cám ơn!
Dưới đây là một số mã cũ mà tôi đã khai thác để kiểm tra xem phông chữ đã được cài đặt hay chưa. Nó có thể làm với việc được dọn dẹp nhưng bạn có được ý tưởng:
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;
}
Bạn có thể sử dụng EnumFontFamiliesEx
để tìm xem có tồn tại phông chữ thực tế hay không.
UPD: Tôi vừa mới biết rằng MS khuyên dùng EnumFontFamiliesEx thay vì EnumFontFamilies.
Rất cám ơn! Nó hoạt động! – user25749