Windows上的"正确"对话框/ UI字体

pet*_*hen 8 windows user-interface winapi fonts

当使用CreateWindow动态创建控件(例如编辑控件)时,它通常以丑陋(粗体无衬线字体)字体开始.

通常我通过抓住父对话框的字体并将其设置为控件来解决这个问题 - 我甚至不能说这是不是一个好主意.

我如何"合法"获取正确的字体?

In *_*ico 8

获取消息框等对话框中使用的字体的"正确"方法是通过以下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));
Run Code Online (Sandbox Code Playgroud)

在销毁控件时不要忘记销毁字体:

::DeleteObject(font);
Run Code Online (Sandbox Code Playgroud)

您可以查找MSDN文档NONCLIENTMETRICSSystemParametersInfo()查看可以检索的其他系统范围参数.