VC中改变对话框背景色的多种方法

27 篇文章 0 订阅

VC中改变对话框背景色的多种方法
1. 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。
这种方法中,所有的对话框都是这个属性了。  
看下面代码:
BOOL CExampleDlgApp::InitInstance()
{
    ...
    CExampleDlgDlg   dlg; 
    m_pMainWnd   =   &dlg; 
  
    // DoModal()前调用,将对话框设置为蓝色背景、红色文本 
    SetDialogBkColor(RGB(0,0,255),RGB(255,0,0)); 
    int nResponse = dlg.DoModal(); 
    ...

此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。
此方法只在VC6中有效, 后面的版本都无效了
 
2. 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):   
void CExampleDlgDlg::OnPaint()   
{
    if(IsIconic())
        ...
    else 
    { 
        CRect   rect; 
        CPaintDC   dc(this); 
        GetClientRect(rect); 
        dc.FillSolidRect(rect,RGB(0,255,0));     //设置为绿色背景  
        CDialog::OnPaint();
    }  
  

3. 方法三:重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):   
①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:
class   CExampleDlgDlg   :   public   CDialog 

    ... 
protected: 
    CBrush   m_brush;   
    ... 
}; 
  
②在OnInitDialog()函数中添加如下代码:   
BOOL   CExampleDlgDlg::OnInitDialog()   

    ... 
    //   TODO:   Add   extra   initialization   here 
    m_brush.CreateSolidBrush(RGB(0, 255, 0));   //   生成一绿色刷子   
    ... 
}   

③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:   
HBRUSH   CExampleDlgDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)

    /*
    **   这里不必编写任何代码! 
    **下行代码要注释掉 
    **   HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor); 
    */
    return   m_brush;       //返加绿色刷子 

  
  
4. 方法四:还是重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):   
①、②同上方法三中的步骤①、②。   
  
③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同:   
  
HBRUSH   CExampleDlgDlg::OnCtlColor 
(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)   

    HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor); 

    //在这加一条是否为对话框的判断语句 
    if(nCtlColor   ==CTLCOLOR_DLG) 
        return   m_brush;       //返加绿色刷子 
    return   hbr; 



5. 方法五:重载BOOL CExampleDlgDlg::OnEraseBkgnd(CDC* pDC) 函数
写入代码如下:
BOOL CExampleDlgDlg::OnEraseBkgnd(CDC* pDC)
{
    //return CDialog::OnEraseBkgnd(pDC);
        CRect rcClient;
    GetClientRect( &rcClient );
    pDC->SetBkColor( RGB(255, 255, 255) );
    pDC->ExtTextOut(0, 0, ETO_OPAQUE, &rcClient, NULL, 0, NULL);        // 注意这里一定要, 否则不能刷新

    return TRUE;
}

本人觉得方法 1, 2, 5都比较简单, 而方法1要视需求而定, 方法5应该效率上比方法2会好一点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值