如何更改 MFC SysLink 控件的字体

Posted

技术标签:

【中文标题】如何更改 MFC SysLink 控件的字体【英文标题】:How to change the font of MFC SysLink Control 【发布时间】:2017-11-22 01:23:37 【问题描述】:

我正在尝试显示一些带有链接的描述。链接中混有静态词,如以下样式:

请通过google或其他搜索引擎搜索,访问my blog。

我可以通过使用 MFC syslink 控件来实现这一点,问题是如何更改 syslink 控件的字体(样式、大小)?有没有其他控件可以实现类似的功能?

【问题讨论】:

【参考方案1】:

使用CFont 类创建具有自定义大小和样式的字体。在CWnd::SetFont 中使用此字体,就像其他对话框控件一样:

//declare class members:
class CMyDialog : public CDialog

    CFont m_font; //declare font here, not a temporary font on the stack
    CLinkCtrl m_linkCtrl;
    ...
;

BOOL CMyDialog::OnInitDialog()

    BOOL res = CDialog::OnInitDialog();

    //get current dialog font
    CFont *dialogfont = GetFont();
    LOGFONT logfont;
    dialogfont->GetLogFont(&logfont);

    //create new font
    m_font.CreateFont(logfont.lfHeight, //change font height
        0, 0, 0, 
        FW_BOLD, TRUE, 0, 0, //change bold, italic, underline, strikeout
        0, 0, 0, logfont.lfQuality, 0, logfont.lfFaceName);

    m_linkCtrl.SubclassDlgItem(IDC_SYSLINK1, this);
    m_linkCtrl.SetFont(&m_font, TRUE);

    return res;

要更改 syslink 控件的颜色,您必须告诉控件接受更改:

LITEM item =  0 ;
item.mask = LIF_ITEMINDEX | LIF_STATE;
item.state = LIS_DEFAULTCOLORS;
item.stateMask = LIS_DEFAULTCOLORS;
m_linkCtrl.SetItem(&item);

然后覆盖OnCtrlColor来改变文字颜色

【讨论】:

感谢 Barmak,我按照您的描述创建了一个新字体,如下所示:CFont testFont; testFont.CreateFont(20,0,0,0, FW_NORMAL,FALSE,FALSE,0,0,0,0,DEFAULT_QUALITY,0,_T 感谢 Barmak,我按照您的描述创建了一个新字体,如下所示:CFont testFont;testFont.CreateFont(20,0,0,0,FW_NORMAL,FALSE,FALSE,0,0,0,0,DEFAULT_QUALITY,0,_T("Segoe UI"));m_linkCtrl.SubclassDlgItem(IDC_SYSLINK1, this);m_linkCtrl.SetFont(&testFont, TRUE);下划线,不仅是链接文本,静态文本也显示下划线。你遇到过这种情况吗? 这是一个错误,因为您已经在堆栈上创建了字体。将字体声明为成员数据。见编辑。 @BarmakShemirani 根据GetFont() 返回的字体而不是NONCLIENTMETRICS 结构中的字体创建新字体不是更干净吗? @MichaelWalz 你是对的。我将其更改为使用GetFont()

以上是关于如何更改 MFC SysLink 控件的字体的主要内容,如果未能解决你的问题,请参考以下文章

添加 syslink 不显示 mfc 对话框

MFC静态文本控件怎么设置字体

更改 SysLink 控件的颜色

MFC:在静态控件上更改字体大小不起作用?

MFC - 更改 CDialogEx 控件中使用的 CMFCToolTipCtrl 中的字体

不要在 mfc 中更改相对于 windows dpi 的对话框字体?