【MFC学习】2.控件颜色透明

1. 在对话框的头文件中加入

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

2. 在对话框的cpp文件中加入

1 BEGIN_MESSAGE_MAP(CtransparentDlg, CDialog)
2     ON_WM_CTLCOLOR()
3     //}}AFX_MSG_MAP
4 END_MESSAGE_MAP()
5 
6 HBRUSH CtransparentDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
7 {
8     HBRUSH   hBrush   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);   
9 
10     if(nCtlColor == CTLCOLOR_STATIC)
11     {
12         pDC->SetBkMode(TRANSPARENT);   
13         return   (HBRUSH)::GetStockObject(NULL_BRUSH);   
14     }
15     return hBrush;
16 }

备注:

(1) 将Line 12改为“pDC-> SetBkColor(RGB(255,255,255)); ”,即可设置控件背景色为白色。

(2) 将背景色填满控件

如果是是在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
你改变的背景色是 字体的背景色 应该把字体的背景色设置为transparent 然后
返回一个颜色画刷就可以填满了 

static HBRUSH brush_red = ::CreateSolidBrush(RGB(255,0,0));
if(pWnd->GetDlgCtrlID()==IDC_STATIC1) 

   pDC->SetTextColor(RGB(0,0,0)); 
   pDC->SetBkMode(TRANSPARENT);
   CRect rect;
   GetDlgItem(IDC_STATIC1)->GetWindowRect(rect);
   pDC->SetBoundsRect(rect,IDC_STATIC1);
   return brush_red; 返回的画刷 是填满没字的地方用的
}

你可能感兴趣的:(【MFC学习】2.控件颜色透明)