当使用CreateWindow动态创建控件(例如编辑控件)时,它通常以丑陋(粗体无衬线)字体开始。
通常我通过抓取父对话框的字体并将其设置为控件来解决这个问题--我甚至不知道这是不是一个好主意。
我如何“合法”获取正确的字体?
发布于 2010-05-31 18:23:02
获取消息框等对话框中使用的字体的“正确”方法是通过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文档,了解可以检索到的其他系统范围的参数。
https://stackoverflow.com/questions/2942828
复制相似问题