MFC窗口颜色的设置

本文主要介绍对话框背景色以及控件颜色的设置(SetDialogBkColor()不再被支持)。

对话框背景色的设置

1、重载OnPaint()函数,即WM_PAINT消息,代码如下所示:

void CtestDlg::OnPaint()

{

    if (IsIconic())

    {

        CPaintDC dc(this); // 用于绘制的设备上下文



        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);



        // 使图标在工作区矩形中居中

        int cxIcon = GetSystemMetrics(SM_CXICON);

        int cyIcon = GetSystemMetrics(SM_CYICON);

        CRect rect;

        GetClientRect(&rect);

        int x = (rect.Width() - cxIcon + 1) / 2;

        int y = (rect.Height() - cyIcon + 1) / 2;



        // 绘制图标

        dc.DrawIcon(x, y, m_hIcon);

    }

    else

    {

        //CDialogEx::OnPaint();



        //设置为绿色背景

        CRect   rect; 

        CPaintDC   dc(this); 

        GetClientRect(rect); 

        dc.FillSolidRect(rect,RGB(0,255,0));  

    }

}

2、重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息:

  a)在对话框的.h文件中添加CBrush类的成员m_brush

  b)在对话框的.cpp文件中的OnInitDialog()中添加以下代码(背景红色):

m_brush.CreateSolidBrush(RGB(255,0,0));

  c)重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),代码如下:

HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

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



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

    

    if(nCtlColor == CTLCOLOR_DLG) 

        return   m_brush;   //返加红色刷子  

    

    // TODO:  如果默认的不是所需画笔,则返回另一个画笔

    return hbr;

}

控件颜色的设置

重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息:

HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

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



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



    // 设置显示字体

    CFont * font=new CFont;

    font->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,

        ANSI_CHARSET,OUT_DEFAULT_PRECIS,

        CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,

        DEFAULT_PITCH&FF_SWISS,_T("Arial"));



    switch(nCtlColor)

    {

    case CTLCOLOR_STATIC: //对所有静态文本框的设置

        {

            pDC->SetBkMode(TRANSPARENT);

            //设置背景为透明

            pDC->SetTextColor(RGB(255,255,0)); //设置字体颜色

            pWnd->SetFont(font); //设置字体

            HBRUSH B = CreateSolidBrush(RGB(125,125,255));

            //创建画刷

            return (HBRUSH) B; //返回画刷句柄

        }

    case CTLCOLOR_EDIT: //对所有编辑框的设置

        {

            if(IDC_EDIT2 == pWnd->GetDlgCtrlID())

            {

                pDC->SetBkMode(TRANSPARENT);

                pDC->SetTextColor(RGB(255,255,0));

                pWnd->SetFont(font);

                HBRUSH B = CreateSolidBrush(RGB(125,125,125));

                return (HBRUSH) B;

            }

            if(IDC_EDIT3 == pWnd->GetDlgCtrlID())

            {

                pDC->SetBkMode(TRANSPARENT);

                pDC->SetTextColor(RGB(255,0, 0));

                pWnd->SetFont(font);

                HBRUSH B = CreateSolidBrush(RGB(125,125,0));

                return (HBRUSH) B;

            }

        }

    default:

        return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);

    }



    // TODO:  如果默认的不是所需画笔,则返回另一个画笔

    return hbr;

}

注:

nCtlColor的类别有以下几种:

  • CTLCOLOR_BTN  按钮控件
  • CTLCOLOR_DLG  对话框
  • CTLCOLOR_EDIT  编辑框
  • CTLCOLOR_LISTBOX  列表框
  • CTLCOLOR_MSGBOX   消息框
  • CTLCOLOR_SCROLLBAR  滚动条
  • CTLCOLOR_STATIC  静态文本

你可能感兴趣的:(mfc)