如何更改 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 控件的字体的主要内容,如果未能解决你的问题,请参考以下文章