 |
21樓
巨大八爪鱼
2016-5-24 16:25
|
 |
22樓
巨大八爪鱼
2016-5-24 17:13
【XP下楷体字不能显示的解决方案】 int CALLBACK FontExistsProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam) { return 0; // 直接终止EnumFontFamiliesEx函数的运行 }
// 判断字体是否存在的函数 BOOL FontExists(LPLOGFONT lpFont) { HDC hdc = GetDC(NULL); BOOL bResult = (EnumFontFamiliesEx(hdc, lpFont, FontExistsProc, (LPARAM)NULL, (DWORD)NULL) == 0); ReleaseDC(NULL, hdc); return bResult; }
// 创建自定义字体对象 void InitFont(void) { LOGFONT logfont; ZeroMemory(&logfont, sizeof(logfont)); logfont.lfCharSet = GB2312_CHARSET; // 字符集 lstrcpy(logfont.lfFaceName, TEXT("楷体")); // 字体名称 logfont.lfHeight = 48; // 字体大小 logfont.lfQuality = ANTIALIASED_QUALITY; // 字体品质 logfont.lfWeight = FW_BOLD; // 是否为粗体 //logfont.lfItalic = TRUE; // 是否为斜体
// 如果字体不存在, 就更换名称 if (!FontExists(&logfont)) lstrcpy(logfont.lfFaceName, TEXT("楷体_GB2312")); hfontCustom = CreateFontIndirect(&logfont); }
|
 |
24樓
巨大八爪鱼
2016-5-24 20:27
代码[1]和代码[4]在两个系统下有着相似的效果。虽然hFontCaption都是赋的一样的值,仅仅是多获取了一下NCM,就会产生截然不同的效
果。据此可推测一定是SystemParametersInfo在获取NCM的同时也影响了GetStockObject。
|