您的位置:首页 > 其它

在程序中动态改变控件的背景颜色

2010-08-01 23:51 337 查看
在 view 类中添加消息 WM_CTLCOLOR 的响应函数,以文本控件为例,如下:

 

HBRUSH CCATestPro2View::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
 HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
 

//以下代码自己添加
 if ((IDC_EDIT_DECODE == pWnd->GetDlgCtrlID()) && (m_bMTFflag)
  && ((m_nMinTemp * 100) > m_nMinMTFData))         //第一个条件是找到待改动的控件

                                                   // 后两个条件是具体程序需要
 {

  pDC->SetBkMode(TRANSPARENT);                     //设置背景透明
  hbr = CreateSolidBrush(RGB(0, 255, 0));          //设置待返回的画刷颜色
 }

//代码添加结束

 // TODO: Return a different brush if the default is not desired
 return hbr;                  //返回画刷句柄,绘制色彩由系统完成
}

 

    上面的代码可以在窗口创建的时候响应消息运行。程序中如果要调用这个函数就需要再次传递消息

WM_CTLCOLOR,可以在想要更改控件色彩的地方添加如下代码:

     GetDlgItem(IDC_EDIT_DECODE)->RedrawWindow();   //先根据控件ID找到控件,然后redraw即可

     更改控件背景颜色也可以用SetBkColor完成,但是这个函数有些缺陷,如果目标控件为文本控件,且其高度不止输入一行文本,那么使用这个函数只能更改第一行的背景色,要想将整个控件背景色彩更改,还需要其他代码辅助完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: