設置 | 登錄 | 註冊

作者共發了23篇帖子。

【對比】Windows7系統下五種獲取系統默認字體代碼的效果

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。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。