首先,我觉得VC很坑爹!在C#等那些中,要修改比如一个Label或者一个按钮的颜色...那简直就是小学生都会做的事情...可是到VC++里面,你说你想修改Label的颜色。。甚至你说你要修改按钮的。。。痛苦啊~!!!有木有!!!
可是没办法,还是得搞,继续吧。。。
方法一:静态修改
这种方式比较简单,就是在需要修改的那个类中,重载WM_CTLCOLOR函数即可,代码如下:
HBRUSH CctlfinalDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd-> GetDlgCtrlID()==IDC_STATIC)
{
pDC-> SetBkMode(TRANSPARENT); //你可以修改背景模式
//pDC-> SetBkColor(m_bkcolor); //你可以修改背景颜色
//hbr=CreateSolidBrush(m_bkcolor); //你可以修改画刷
pDC->SetTextColor(RGB(255,0,0)); //你当然可以修改字体颜色
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
好了,于是乎,你运行你的程序,就可以看到你的Static控件变成红色了!
方法二:动态修改
当然有的人非常想点击一个按钮什么的,达到将刚才的红色Static变化为绿色..这个动态也很烦人的,这个时候需要我们在按钮相应函数中,写如下代码(当然首先你自己去定义一个COLORREF的变量m_bkcolor咯)
void CctlfinalDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
m_bkcolor=RGB(0,255,0); //Green
GetDlgItem(IDC_STATIC)-> InvalidateRect(NULL);
}
主要这个函数 : InvalidateRect....解释在此,我就不多说了 http://baike.baidu.com/view/1226797.html?fromTaglist
然后再我们重载的OnCtlColor函数中,作如下修改即可:
HBRUSH CctlfinalDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd-> GetDlgCtrlID()==IDC_STATIC)
{
pDC->SetTextColor(m_bkcolor);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
然后你运行并点击按钮,就能看到你的Static变为了绿色的字体。
唉,研究了一晚上,我是不是很2啊~~~~~~~~~~~~~~~~~~~~~