设置控件背景色

  1.在对话框的类中加入成员:  

CBrush   m_brush;   
  COLORREF   m_color;


  2.在OnInitDialog()中,加入  

m_brush.CreateSolidBrush(RGB(255,255,255));   //此处设置的RGB值可以改变控件的背景色。   
  m_color=RGB(0,0,0)     //此处设置控件的文字初始颜色。


  3.响应WM_ONCTLCOLOR消息,重载OnCtlColor()函数,加入:  

if(nCtlColor==   CTLCOLOR_STATIC){
  pDC->SetBkMode(OPAQUE); //不透明
//  pDC->SetBkMode(TRANSPARENT);   //透明
  pDC->SetTextColor(m_color);   
  return   (HBRUSH)m_brush.GetSafeHandle();  //返回的是m_brush的颜色 
  }


   4.需要改变颜色时  

m_color=RGB(128,0,255);//此处改变字体的颜色   
  CStatic*   m_pStatic1=(CStatic*)GetDlgItem(IDC_STATIC1);   
  m_pStatic1->RedrawWindow();    
HBRUSH CAAAAAAAADlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
// TODO: Change any attributes of the DC here 
// TODO: Return a different brush if the default is not desired 
if  ((pWnd->GetDlgCtrlID()  ==  IDC_EDIT1)  &&  (nCtlColor  ==  CTLCOLOR_EDIT))    
{    
COLORREF  clr  =  RGB(255,0,0);  
pDC->SetTextColor(clr);      //设置红色的文本    
clr  =  RGB(0,0,0);    
pDC->SetBkColor(clr);          //设置黑色的背景    
m_brMine  =  ::CreateSolidBrush(clr);    
return  m_brMine;    //作为约定,返回背景色对应的刷子句柄    
}    
else    
{    
HBRUSH  hbr  =  CDialog::OnCtlColor(pDC,  pWnd,  nCtlColor);    
return  hbr;    
}    
return hbr; 
}


 

设置STATIC框的背景色为透明色

在对话框中响应WM_CTRCOLOR事件然后添加下边代码即可以实现

HBRUSH CProgress::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(100, 112, 1));//设置成你背景的颜色
pDC->SetBkColor(RGB(255,255,255));
pDC->SetBkMode(TRANSPARENT);//透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);//返回的是没有刷子的颜色,就等于没有颜色去刷它,那么就回显示透明色(哈哈,终于找到原因拉~~)
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}

 

若是想修改其他的控件背景色,那么可以将CTLCOLOR_STATIC改为CTLCOLOR_EDIT,这样就可以修改EDITBOX的颜色,修改为CTLCOLOR_MSGBOX,CTLCOLOR_BTN,CTLCOLOR_DLG,CTLCOLOR_LISTBOX,CTLCOLOR_SCRDLLBAR就可以修改其他的控件背景颜色了~~~~~~~~

 

下边还有一个别人写的函数可以用来将STATIC的背景色改变为透明也拿来供大家参考下~~~

 

 

 

void   TransparentBlt2(   HDC   hdcDest,             //   目标DC   
    int   nXOriginDest,       //   目标X偏移   
    int   nYOriginDest,       //   目标Y偏移   
    int   nWidthDest,           //   目标宽度   
    int   nHeightDest,         //   目标高度   
    HDC   hdcSrc,                   //   源DC   
    int   nXOriginSrc,         //   源X起点   
    int   nYOriginSrc,         //   源Y起点   
    int   nWidthSrc,             //   源宽度    
    int   nHeightSrc,           //   源高度   
    UINT   crTransparent     //   透明色,COLORREF类型   
    )   
  {   
  HBITMAP   hOldImageBMP,   hImageBMP   =   CreateCompatibleBitmap(hdcDest,   nWidthDest,   nHeightDest); //   创建兼容位图   
  HBITMAP   hOldMaskBMP,   hMaskBMP   =   CreateBitmap(nWidthDest,   nHeightDest,   1,   1,   NULL); //   创建单色掩码位图   
  HDC hImageDC   =   CreateCompatibleDC(hdcDest);   
  HDC hMaskDC   =   CreateCompatibleDC(hdcDest);   
  hOldImageBMP   =   (HBITMAP)SelectObject(hImageDC,   hImageBMP);   
  hOldMaskBMP   =   (HBITMAP)SelectObject(hMaskDC,   hMaskBMP);   
  //   将源DC中的位图拷贝到临时DC中   
  if   (nWidthDest   ==   nWidthSrc   &&   nHeightDest   ==   nHeightSrc)   
  BitBlt(hImageDC,   0,   0,   nWidthDest,   nHeightDest,   hdcSrc,   nXOriginSrc,   nYOriginSrc,   SRCCOPY);   
  else   
  StretchBlt(hImageDC,   0,   0,   nWidthDest,   nHeightDest,     
  hdcSrc,   nXOriginSrc,   nYOriginSrc,   nWidthSrc,   nHeightSrc,   SRCCOPY);   
   //   设置透明色   
  SetBkColor(hImageDC,   crTransparent);   
  //   生成透明区域为白色,其它区域为黑色的掩码位图   
  BitBlt(hMaskDC,   0,   0,   nWidthDest,   nHeightDest,   hImageDC,   0,   0,   SRCCOPY);   
  //   生成透明区域为黑色,其它区域保持不变的位图   
  SetBkColor(hImageDC,   RGB(0,0,0));   
  SetTextColor(hImageDC,   RGB(255,255,255));   
  BitBlt(hImageDC,   0,   0,   nWidthDest,   nHeightDest,   hMaskDC,   0,   0,   SRCAND);   
  //   透明部分保持屏幕不变,其它部分变成黑色   
  SetBkColor(hdcDest,RGB(0xff,0xff,0xff));   
  SetTextColor(hdcDest,RGB(0,0,0));   
  BitBlt(hdcDest,   nXOriginDest,   nYOriginDest,   nWidthDest,   nHeightDest,   hMaskDC,   0,   0,   SRCAND);   
  //   "或"运算,生成最终效果   
  BitBlt(hdcDest,   nXOriginDest,   nYOriginDest,   nWidthDest,   nHeightDest,   hImageDC,   0,   0,   SRCPAINT);   
  SelectObject(hImageDC,   hOldImageBMP);   
  DeleteDC(hImageDC);   
  SelectObject(hMaskDC,   hOldMaskBMP);   
  DeleteDC(hMaskDC);   
  DeleteObject(hImageBMP);   
  DeleteObject(hMaskBMP);   
  }