8
使用CreateWindow快速創建控件(例如編輯控件)時,通常以醜陋(粗體無襯線字體)字體開始。Windows上的「正確」對話框/用戶界面字體
通常我會通過抓住父對話框的字體並將其設置爲控件來解決這個問題 - 我甚至不能說這是個好主意。
如何「合法」獲取正確的字體?
使用CreateWindow快速創建控件(例如編輯控件)時,通常以醜陋(粗體無襯線字體)字體開始。Windows上的「正確」對話框/用戶界面字體
通常我會通過抓住父對話框的字體並將其設置爲控件來解決這個問題 - 我甚至不能說這是個好主意。
如何「合法」獲取正確的字體?
「正確」的方式來在對話框中習慣於像消息框的字體等將通過SystemParametersInfo()
功能:
// C++ example
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(NONCLIENTMETRICS);
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
&metrics, 0);
HFONT font = ::CreateFontIndirect(&metrics.lfMessageFont);
::SendMessage(ctrlHWND, WM_SETFONT, (WPARAM)font, MAKELPARAM(TRUE, 0));
不要忘記破壞字體時控件被銷燬:
::DeleteObject(font);
你可以看一下對NONCLIENTMETRICS
和SystemParametersInfo()
MSDN文檔,看看你能找回什麼其他系統範圍的參數。
謝謝! (我把它放到CHandleRef中,沒機會忘記刪除! - http://www.codeproject.com/KB/stl/boostsp_handleref.aspx) – peterchen 2010-05-31 10:46:57