【问题标题】:"Correct" Dialog / UI font on WindowsWindows 上的“正确”对话框/UI 字体
【发布时间】:2011-02-25 22:27:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows user-interface winapi fonts


    【解决方案1】:

    获取对话框(如消息框等)中使用的字体的“正确”方法是通过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 文档,了解您可以检索哪些其他系统范围的参数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2016-08-28
    • 2020-11-10
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多