VC编程中如何设置对话框的背景颜色和静态文本颜色

作者:朱金灿

来源:http://www.cnblogs.com/clever101

 

晚上编一个小程序,涉及到如何设置对话框的背景颜色和静态文本颜色。这在VC6.0中本来是一句话就搞定的事。在应用程序类中的InitInstance()函数添加:

     // 设置对话框背景和文本颜色
SetDialogBkColor(RGB( 160 , 180 , 220 ),RGB( 0 , 0 , 0 ));


 

谁知这在VS 2005上竟不起作用,到网上一查,原来SetDialogBkColor函数在VS 2003中就已经不支持了。只得另辟蹊径。另外的办法就是响应WM_CTLCOLOR消息,在消息映射函数中添加:


HBRUSH CFileSpltDlg::OnCtlColor(CDC *  pDC, CWnd *  pWnd, UINT nCtlColor)
{
    HBRUSH hbr 
=  CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    
//  TODO:  在此更改DC 的任何属性

    
//  TODO:  如果默认的不是所需画笔,则返回另一个画笔
    
//  Determine if drawing a dialog box . If we are , return +handle to
    
// our own background brush . Otherwise let windows  // handle it .
    

    
switch (nCtlColor)
    {
    
case  CTLCOLOR_STATIC:  // 对所有静态文本控件的设置
        {
            
// 设置背景为透明
            pDC -> SetBkMode(TRANSPARENT); 
            pDC
-> SetTextColor(RGB( 0 , 0 , 0 ));  // 设置字体颜色
             break ;
        }
    
case  CTLCOLOR_DLG:
        {
    
return  (HBRUSH) m_brush .GetSafeHandle(); 
        
break ;
        }
    
default :
        
break ;
    }
    
return  hbr;
}

 

照这样,除了静态文本可以控制,还有按钮、文本编辑框可以控制其背景颜色,因为我看到有下列的宏

 


HBRUSH CFileSpltDlg::OnCtlColor(CDC *  pDC, CWnd *  pWnd, UINT nCtlColor)
{
    HBRUSH hbr 
=  CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    
//  TODO:  在此更改DC 的任何属性

    
//  TODO:  如果默认的不是所需画笔,则返回另一个画笔
    
//  Determine if drawing a dialog box . If we are , return +handle to
    
// our own background brush . Otherwise let windows  // handle it .
    

    
switch (nCtlColor)
    {
    
case  CTLCOLOR_STATIC:  // 对所有静态文本控件的设置
        {
            
// 设置背景为透明
            pDC -> SetBkMode(TRANSPARENT); 
            pDC
-> SetTextColor(RGB( 0 , 0 , 0 ));  // 设置字体颜色
             break ;
        }
    
case  CTLCOLOR_DLG:
        {
    
return  (HBRUSH) m_brush .GetSafeHandle(); 
        
break ;
        }
    
default :
        
break ;
    }
    
return  hbr;
}

你可能感兴趣的:(对话框)