字体在控制事件中实现,颜色在OnCtlColor中实现。
界面上两个button,一个statictext。
设置statictext的value变量为m_csText;
其余变量为:
BOOL m_bBlue;
BOOL m_bRed;
在构造函数中初始化:
CTextColorExampleDlg::CTextColorExampleDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CTextColorExampleDlg::IDD, pParent)
, m_csText(_T(""))
, m_bBlue(FALSE)
, m_bRed(FALSE)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
在OnInitDialog()中可先设置一下默认值,比如字体和文字内容:
CFont font;
font.CreatePointFont(150, _T("宋体"));
GetDlgItem(IDC_STATIC_TEXT)->SetFont(&font);
m_csText = _T("文字颜色显示");
UpdateData(FALSE);
然后在dialog的事件中选择WM_CTLCOLOR,生成OnCtlColor接口
HBRUSH CTextColorExampleDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何特性
if(IDC_STATIC_TEXT == pWnd-> GetDlgCtrlID())
{
if (TRUE == m_bBlue)
{
pDC->SetTextColor(RGB(51, 153, 255)); //蓝色
}
else if (TRUE == m_bRed)
{
pDC->SetTextColor(RGB(255, 0, 0)); //红色
}
else
{
//其余默认情况,貌似不写都没有问题
pDC->SetTextColor(RGB(0, 0, 0));
}
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
void CTextColorExampleDlg::OnBnClickedButtonBlue()
{
// TODO: 在此添加控件通知处理程序代码
//修改字体
CFont font;
font.CreatePointFont(100, _T("微软雅黑"));
GetDlgItem(IDC_STATIC_TEXT)->SetFont(&font);
//颜色
m_bBlue = TRUE;
m_bRed = FALSE;
m_csText = _T("现在显示是蓝色");
UpdateData(FALSE);
return;
}
void CTextColorExampleDlg::OnBnClickedButtonRed()
{
// TODO: 在此添加控件通知处理程序代码
m_bBlue = FALSE;
m_bRed = TRUE;
m_csText = _T("现在显示是红色");
UpdateData(FALSE);
//GetDlgItem(IDC_STATIC_TEXT)->InvalidateRect(NULL);
return;
}