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

发布于 2024-09-03 18:23:11 字数 139 浏览 1 评论 0原文

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

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

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

When creating a control (e.g. an edit control) on the fly using CreateWindow, it usually starts out with an ugly (boldish sans serif) font.

Usually I wok around that by grabbing the parent dialog's font, and setting it to the control - I can't even say if this is a good idea.

How do I "legally" fetch the right font?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

很快妥协 2024-09-10 18:23: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);

您可以查找 NONCLIENTMETRICSSystemParametersInfo()查看您可以检索哪些其他系统范围的参数。

The "correct" way to get the font used in dialog boxes like message boxes, etc. would be via the SystemParametersInfo() function:

// 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));

Don't forget to destroy the font when the controls are destroyed:

::DeleteObject(font);

You can look up the MSDN documentation for NONCLIENTMETRICS and SystemParametersInfo() to see what other system-wide parameters you can retrieve.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文