请问如何设置对话框的背景色?
我在Dialog类的 OnPaint函数里写了这样一段程序CPaintDC dc(this)
COLORREF bkcolor;
bkcolor=RGB(256,0,0);
dc.SetBkColor(bkcolor);想设置对话框背景为红色,可是没有效果,不知道为什么?谢谢!

解决方案 »

  1.   

    找不到SetDlgBKColor()啊,哪个类的?
      

  2.   

    bkcolor=RGB(256,0,0);????应该是255吧。
      

  3.   

    在initinstance()中,setdlgbkcolor(rgb(),rgb());第一个是背景色
      

  4.   

    改变窗口的背景颜色:
    先定义CBrush m_brush;
    然后在初始发m_brush.CreateSolidBrush( RGB( 255, 255, 255 ) );
    从载OnCtlColor
    HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    pDC->SetBkMode( TRANSPARENT );
    pDC->SetTextColor( RGB( 0, 128, 128) ); // TODO: Return a different brush if the default is not desired
    if( nCtlColor == CTLCOLOR_DLG )
    return (HBRUSH) m_brush.GetSafeHandle( );
    if( nCtlColor == CTLCOLOR_STATIC )
    return (HBRUSH) m_brush.GetSafeHandle( ); return hbr;
    }
      

  5.   

    You can specify background color in your OnInitDialog
    SetBackgroundColor(RGB(0, 0, 128));//红色是什么可以自己查RGB
      

  6.   

    CWnd::OnEraseBkgnd  
    afx_msg BOOL OnEraseBkgnd( CDC* pDC );看看MSDN,一般在这个函数里面做就可以了,它响应的是WM_ERASEBKGND
      

  7.   

    生成一个WM_CTLCOLOR响应函数
    HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here
    switch (nCtlColor)
    {
    case CTLCOLOR_DLG:
    {
      CBrush*     back_brush;
      COLORREF    color;
      color = RGB(255,255,255);
      back_brush = new CBrush(color);
      return (HBRUSH) (back_brush->m_hObject);
    }
    }
    return(CDialog::OnCtlColor(pDC, pWnd, nCtlColor));
    // TODO: Return a different brush if the default is not desired
    //return hbr;
    }
      

  8.   

    SetBackgroundColor(RGB(255, 0, 0));//
      

  9.   

    重载OnEraseBkgnd
    BOOL CYourDlg::OnEraseBkgnd(CDC* pDC)
    {
    CBrush brush;
    CRect rect;
    COLORREF rgbBackGnd = RGB(100,100,100);
    GetClientRect(&rect);
    brush.CreateSolidBrush(rgbBackGnd);
    pDC->FillRect(rect,&brush);
    return TRUE;
    }
    选择不同的RGB的值,显示不同的背景色.
      

  10.   

    BOOL CTestDlg::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    CBrush brush, *oldBrush;
    RECT rect;
    this->GetWindowRect(&rect);

    brush.CreateSolidBrush(RGB(255,0,0));
    oldBrush = pDC->SelectObject(&brush);
    pDC->PatBlt(0,0, rect.right-rect.left,rect.bottom-rect.top, PATCOPY);
    pDC->SelectObject(oldBrush);
    brush.DeleteObject();
    return 0;
    //return CDialog::OnEraseBkgnd(pDC);
    }
      

  11.   

    第一步:在对话框类中定义一个类型的成员变量:Dlg.h:  private: CBrush m_brBack;
    CDlg.cpp:
     CDlg::CDlg(CWnd* pParent)
    { m_brBack.CreateSolidBrush(RGB(0,255,255));
    第二步使用为对话框增加一个消息的句柄。
    HBRUSH CDlg::OnCtlColor()
    {
    }
    第三步使用以下代码可动态改变对话框的背景颜色:
    Void CDlg::OnBackgroundYellow()
    {
    m_brBack.DeleteObject();
    m_brBack.CreateSolidBrush(RGB(255,255,0));
    Invalidate(TRUE);
    }
      

  12.   

    BOOL CTestDlgApp::InitInstance()
    {
    CTestDlgDlg dlg;
    m_pMainWnd = &dlg;

             //注意这句:兰色背景,红色文字
    SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
    int nResponse = dlg.DoModal();
    }
      

  13.   

    ---- 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。 ---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。
    下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: ---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。 ---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码: BOOL CExampleDlgApp: : InitInstance ( )
    {

    CExampleDlgDlg dlg;
    m_pMainWnd = &dlg;//先于DoModal()调用,将对话框设置为蓝色背景、红色文本
    SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
    int nResponse = dlg.DoModal();

    }---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的
    是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变
    应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。 
    ---- 方法二:重载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();
    }
    ---- 方法三:重载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; //返加绿色刷子
    }
    ---- 方法四:还是重载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;
    }
      

  14.   

    CBrush m_pBkBrush;
    switch (nCtlColor) {       case CTLCOLOR_STATIC:
               // Set the static text to white on blue.
               pDC->SetTextColor(RGB(255, 255, 255));
               pDC->SetBkColor(RGB(0, 0, 255));
               // Drop through to return the background brush.       case CTLCOLOR_DLG:
               return (HBRUSH)(m_pBkBrush.GetSafeHandle());       default:
                return CFileDialog::OnCtlColor(pDC, pWnd, nCtlColor);
           }