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

当使用CreateWindowdynamic创build控件(例如编辑控件)时,通常以丑陋(粗体无衬线)字体开始。

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

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

通过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); 

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