众所周知,win32 api CreateFont() - 函数不保证创建所需的字体。不幸的是,它默默地“失败”并返回替换字体的句柄。
这很糟糕,因为我的应用程序需要知道CreateFont()的成功。 为了检查这一点,我做了以下工作,效果很好:
// LOGFONT lf; ....
// lf.lfFaceName == "nameWanted" // assign my desired font name
HFONT hFnt = ::CreateFontIndirect(&lf);
HDC dc = ::CreateDC("DISPLAY",0,0,0);
HFONT oldfont = (HFONT)::SelectObject(dc, _h);
char nameFound[32];
::GetTextFace(dc,32,nameFound);
::SelectObject(dc, oldfont);
::DeleteDC(dc);
::DeleteObject(hFont);
const bool isOk = _stricmp("nameWanted", nameFound) == 0;
if (!isOk) {
// Font doesn't seem to be available.
// Handle this case
...
}
然而,对我来说这看起来有点过分,我想知道,是否有直接的方法来检查CreateFont()的成功。 我错过了什么吗?