gpt4 book ai didi

c++ - 特定对话框控件的 MFC SetFont 不起作用

转载 作者:行者123 更新时间:2023-11-30 03:50:01 28 4
gpt4 key购买 nike

我有一个标准的 MFC SDI 应用程序。在“关于”对话框(使用 MFC 向导创建)中,我试图更改一些静态文本格式(标签)。这是我的代码:

BOOL CAboutDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

auto font_programname = std::make_shared<CFont>();
font_programname->CreateFontW(25, 0, 0, 0, FW_BLACK, 0, 1, 0, 0, 0, 0, 0, 0, _T("Arial"));
_label_programname.SetFont(font_programname.get());

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

然而,这只会导致字体变粗,但大小不会改变。我做错了什么?

最佳答案

字体变得更粗,所以 CreateFont 和 SetFont 正在做一些事情。这使得 Font Mapper 成为下一个嫌疑人。 “Arial”是一个建议,但字体映射器将首先查看其他特征。您看到的字体很可能是 FW_BLACK 粗细可用的最大光栅(非 True Type)字体。要获得所需的确切字体,需要填写 CreateFont 的其他参数,以便找到所需的字体。

为了调试,在调用 CreateFont 之后调用 GetLogFont 并查看数据结构以查看实际映射的字体。

上面关于字体生命周期的评论是正确的。这可能不是您面临的第一个问题,但它确实是一个问题。 CFont 需要是对话框类变量,而不是函数中的局部变量,因此字体对象的持续时间与对话框上的控件一样长。

关于c++ - 特定对话框控件的 MFC SetFont 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32094117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com