改变对话框的背景色需要在该对话框类中添加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

 

posted on 2013-08-07 21:33  胡小颖颖  阅读(354)  评论(0编辑  收藏  举报