【发布时间】:2017-11-22 01:23:37
【问题描述】:
我正在尝试显示一些带有链接的描述。链接中混有静态词,如以下样式:
我可以通过使用 MFC syslink 控件来实现这一点,问题是如何更改 syslink 控件的字体(样式、大小)?有没有其他控件可以实现类似的功能?
【问题讨论】:
我正在尝试显示一些带有链接的描述。链接中混有静态词,如以下样式:
我可以通过使用 MFC syslink 控件来实现这一点,问题是如何更改 syslink 控件的字体(样式、大小)?有没有其他控件可以实现类似的功能?
【问题讨论】:
使用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来改变文字颜色
【讨论】:
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);下划线,不仅是链接文本,静态文本也显示下划线。你遇到过这种情况吗?
GetFont() 返回的字体而不是NONCLIENTMETRICS 结构中的字体创建新字体不是更干净吗?
GetFont()