可以获取Windows默认对话框字体(MS Shell Dlg)并更改其属性,例如大胆?

问题描述 投票:0回答:1

我想将CListCtrl的标题(CHeaderCtrl)设置为粗体。我不想开发自己的字体,因为我想尊重系统默认字体,每台计算机上的字体都不同。我只想将默认字体设为粗体。是否可以?下面的代码在行中抛出错误“调试断言失败”:m_headerFont.CreateFontIndirect(&lf); - 见下图。 enter image description here

代码示例:

class CMFCtestDlg : public CDialogEx
{
    CFont m_headerFont;
    //....
    //...
    BOOL OnInitDialog();
}

BOOL CMFCtestDlg::OnInitDialog()
{
    //.......
    //.......
    CFont *pDefaultFont = pHeaderCtrl->GetFont();
    LOGFONT lf{0};
    if(pDefaultFont != nullptr && pDefaultFont->GetLogFont(&lf))
    {
        // If the font is MS Shell Dlg, use SystemParametersInfo to get the system font
        if(_tcscmp(lf.lfFaceName, _T("MS Shell Dlg")) == 0)
        {
            if(SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0))
            {
                lf.lfWeight = FW_BOLD;
                m_headerFont.CreateFontIndirect(&lf);
                pHeaderCtrl->SetFont(&m_headerFont);
            }
        }
    }
}
c++ fonts mfc
1个回答
0
投票

尝试添加

m_headerFont.DeleteObject();

之前

  m_headerFont.CreateFontIndirect(&lf);
© www.soinside.com 2019 - 2024. All rights reserved.