MFC窗口顏色的設置

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  靜態文本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章