设置控件背景色

来源:互联网 发布:随身带着淘宝去异界301 编辑:程序博客网 时间:2024/05/01 05:58
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的背景色改变为透明也拿来供大家参考下~~~

 

 

你可以通过这个链接引用该篇文章:http://ameizhang83.bokee.com/viewdiary.16165364.html

 

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);  
  }


原创粉丝点击