【发布时间】:2011-02-25 22:27:11
【问题描述】:
使用 CreateWindow 动态创建控件(例如编辑控件)时,它通常以丑陋(粗体无衬线)字体开始。
通常我通过抓取父对话框的字体并将其设置为控件来解决这个问题 - 我什至不能说这是否是个好主意。
我如何“合法”获取正确的字体?
【问题讨论】:
标签: windows user-interface winapi fonts
使用 CreateWindow 动态创建控件(例如编辑控件)时,它通常以丑陋(粗体无衬线)字体开始。
通常我通过抓取父对话框的字体并将其设置为控件来解决这个问题 - 我什至不能说这是否是个好主意。
我如何“合法”获取正确的字体?
【问题讨论】:
标签: windows user-interface winapi fonts
获取对话框(如消息框等)中使用的字体的“正确”方法是通过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 文档,了解您可以检索哪些其他系统范围的参数。
【讨论】: