改变对话框的背景色需要在该对话框类中添加WM_CTLCOLOR消息,在该消息中改变背景画刷即可。
1.首先在对话框类中添加一个成员变量CBrush m_brBrush,并在构造函数中创建该画刷:
1 m_brBrush.CreateSolidBrush(RGB(255,255,0));//创建红色画刷
函数原型:HBRUSH CBrush::CreateSolidBrush(COLORREF crColor)
函数功能:创建一个具有指定颜色的逻辑实心刷子,画笔可以随后被选为任何设备上下文的当前刷子。
参数解释:crColor:指定刷子的颜色。
返回值:如果该函数执行成功,那么返回值标识一个逻辑实心刷子;如果函数失败,那么返回值为NULL。
2.添加WM_CTLCOLOR消息,添加如下代码
1 HBRUSH CRectTran::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 2 { 3 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 4 5 // TODO: 在此更改 DC 的任何属性 6 7 switch(nCtlColor) { 8 case CTLCOLOR_STATIC: 9 pDC->SetBkMode(TRANSPARENT);//使对话框里的静态文本框背景透明 10 case CTLCOLOR_EDIT: 11 pDC->SetBkMode(TRANSPARENT);//使对话框里的编辑框背景透明 12 case CTLCOLOR_DLG: 13 return static_cast<HBRUSH>(m_bkBrush.GetSafeHandle()); 14 } 15 16 // TODO: 如果默认的不是所需画笔,则返回另一个画笔 17 return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 18 // return hbr; 19 }
因为控件本身也会有背景色,为了使控件能更好地融入透明对话框中,在消息函数中也要设置对话框里的控件背景色为透明。
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );
返回值:OnCtlColor必须返回一个刷子句柄,该刷子将被用于画出控件的背景。
参数:pDC 包含了子窗口的显示设备环境的指针。可能是临时的。
PWnd 包含了要求颜色的控件的指针。可能是临时的。
NCtlColor 包含了下列值,指定了控件的类型:
-
CTLCOLOR_BTN Button control
-
CTLCOLOR_DLG Dialog box
-
CTLCOLOR_EDIT Edit control
-
CTLCOLOR_LISTBOX List-box control
-
CTLCOLOR_MSGBOX Message box
-
CTLCOLOR_SCROLLBAR Scroll-bar control
-
CTLCOLOR_STATIC Static control
来源:https://www.cnblogs.com/huxiaoyingying/p/3244556.html