設置 | 登錄 | 註冊

作者共發了23篇帖子。

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

1樓 巨大八爪鱼 2016-5-24 15:28
[1]
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

運行結果:
文本框、單選框、複選框完全無法顯示。
按鈕和下拉菜單框的字顯示正常。
2樓 巨大八爪鱼 2016-5-24 15:30
[2]
hfontCaption = NULL;

運行結果:
文本框、單選框、複選框完全無法顯示。
按鈕和下拉菜單框的字的字體不正常。
3樓 巨大八爪鱼 2016-5-24 15:31
[3]
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, (UINT)NULL);
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

[4]
ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(int);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, (UINT)NULL);
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);


運行結果:
所有控件字體正常。(僅僅是加了獲取ncm的代碼,而變量ncm後面根本沒有用到)
4樓 巨大八爪鱼 2016-5-24 15:32
[5]
ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(int);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, (UINT)NULL);
hfontCaption = CreateFontIndirect(&ncm.lfCaptionFont);


運行結果:
所有控件字體正常。但和3、4字體不同。
5樓 巨大八爪鱼 2016-5-24 15:34
至於XP系統,上述五段代碼編譯後運行,效果都是一樣的:

所有的控件都無法顯示!
就連楷體都無法識別!
6樓 巨大八爪鱼 2016-5-24 15:35
楷體字的代碼:
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; // 是否為斜體
    hfontCustom = CreateFontIndirect(&logfont);
}
7樓 巨大八爪鱼 2016-5-24 15:37
本人似乎明白了一點!
因為自己忘了在主函數裏加InitCommonControls();了!
所以XP系統下無法初始化XP風格的控件!
8樓 巨大八爪鱼 2016-5-24 15:38
於是趕快加上這句話:

9樓 巨大八爪鱼 2016-5-24 15:42
[1]
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
10樓 巨大八爪鱼 2016-5-24 15:43
[2]
hfontCaption = NULL;

內容轉換:

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