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

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

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

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

【问题讨论】:

    标签: fonts hyperlink mfc


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多