在Windows上使用正确的对话框/UI字体

10

使用CreateWindow动态创建控件(例如编辑框)时,通常会默认使用一个不太美观的字体(粗体无衬线字体)。

通常我会通过获取父对话框的字体,并将其设置为控件字体来解决这个问题 - 我甚至不能确定这是否是一个好主意。

如何“合法地”获取正确的字体?

1个回答

11

获取对话框(如消息框等)中使用的字体的“正确”方法是通过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);
你可以查看MSDN文档来了解如何获取其他系统级参数,其中包括NONCLIENTMETRICSSystemParametersInfo()

我将其放入CHandleRef中,不会忘记删除!- http://www.codeproject.com/KB/stl/boostsp_handleref.aspx - peterchen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接