change the background color of a dialog box mfc

前端 未结 3 1077
长情又很酷
长情又很酷 2021-01-15 03:18

I\'m trying to change the background color of a dialog box (win 7, vs2010,c++). I tried to catch WM_CTLCOLOR ,WM_ERASEBKGND and change the color. I manged to change in this

相关标签:
3条回答
  • 2021-01-15 03:28

    Try this:

    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg dialog used for App About
    
    class CAboutDlg : public CDialog
    {
    public:
        CAboutDlg();
    
    // Dialog Data
        //{{AFX_DATA(CAboutDlg)
        enum { IDD = IDD_ABOUTBOX };
        //}}AFX_DATA
    
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL
    
    // Implementation
    protected:
        //{{AFX_MSG(CAboutDlg)
        //}}AFX_MSG
        afx_msg BOOL OnEraseBkgnd(CDC* pDC);
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
        ON_WM_ERASEBKGND()
        //}}AFX_MSG_MAP
    
    END_MESSAGE_MAP()
    
    
    
    
    BOOL CAboutDlg::OnEraseBkgnd(CDC* pDC)
    {
        CRect rect;
        GetClientRect(&rect);
        CBrush myBrush(RGB(255, 255, 255));    // dialog background color
        CBrush *pOld = pDC->SelectObject(&myBrush);
        BOOL bRes  = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);
        pDC->SelectObject(pOld);    // restore old brush
        return bRes;                       // CDialog::OnEraseBkgnd(pDC);
    }
    

    And have a look here

    0 讨论(0)
  • 2021-01-15 03:30

    The better way will be to override WM_CTLCOLOR, background of controls such as STATIC will be fill with your color too.

    BEGIN_MESSAGE_MAP(YourDlg, CDialogEx)
        ON_WM_CTLCOLOR()
    END_MESSAGE_MAP()
    ...
    HBRUSH YourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        return (HBRUSH)GetStockObject(WHITE_BRUSH);
    }
    
    0 讨论(0)
  • 2021-01-15 03:48

    The above answer will work only if you don't have a tab inside dialog box it will color background of dialog box other the tab portion. For the tab portion you have to create a new derived class with base class CTabCtrl.

    0 讨论(0)
提交回复
热议问题