Dr.Wing

心翼的技术笔记本

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

首先,我觉得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啊~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

posted on 2011-12-01 22:55  心翼  阅读(7710)  评论(1编辑  收藏  举报