設置對話框、static和group的背景色和字體顏色

對話框背景色設置,重載OnPaint:

void CMonitorDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此處添加消息處理程序代碼
// 不爲繪圖消息調用 CDialog::OnPaint()
/*CRect rect;
GetClientRect(rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackgroud;
bmpBackgroud.LoadBitmap(IDB_BITMAP_MBACK);


BITMAP bitmap;
bmpBackgroud.GetBitmap(&bitmap);
CBitmap * pbmpold = dcMem.SelectObject(&bmpBackgroud);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);*/


CRect rect;
    GetClientRect(rect);
    dc.FillSolidRect(rect,RGB(85,85,85));  //設置爲黑色背景
    //CDialog::OnPaint();

}


MFC簡單皮膚顏色繪製(SetDialogBkColor不再被支持,看 WM_CTLCOLOR消息如何百變控件顏色)

 [轉]

WM_CTLCOLOR消息用來完成對EDIT, STATIC, BUTTON等控件設置背景和字體顏色, 其用法如下:

1.首先在自己需要設置界面的對話框上點擊右鍵-->建立類嚮導-->加入WM_CTLCOLOR消息-->自動生成OnCtlColor()函數, 此函數可以對本對話框的控件的界面外觀做修飾, 用法如下:
將類嚮導產生的函數做如下修改:

HBRUSH CDialogColor::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
    // TODO: Change any attributes of the DC here
    // 設置顯示字體
    CFont * cFont=new CFont;
    cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,
                ANSI_CHARSET,OUT_DEFAULT_PRECIS,
                CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                DEFAULT_PITCH&FF_SWISS,"Arial");
    // 對特定的控件做修改
    switch()
    {
        case CTLCOLOR_STATIC: //對所有靜態文本控件的設置
        {
            pDC->SetBkMode(TRANSPARENT);
            //設置背景爲透明
            pDC->SetTextColor(RGB(255,255,0)); //設置字體顏色
            pWnd->SetFont(cFont); //設置字體
            HBRUSH B = CreateSolidBrush(RGB(125,125,255));
            //創建畫刷
            return (HBRUSH) B; //返回畫刷句柄
        }
        case CTLCOLOR_EDIT: //對所有編輯框的設置
        {
            pDC->SetBkMode(TRANSPARENT);
            pDC->SetTextColor(RGB(255,255,0));
            pWnd->SetFont(cFont);
            HBRUSH B = CreateSolidBrush(RGB(125,125,255));
            return (HBRUSH) B;
        }
        default:
            return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
    }
}

注:case的類別有以下幾種:
CTLCOLOR_BTN 按鈕控件
CTLCOLOR_DLG 對話框
CTLCOLOR_EDIT 編輯框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滾動條
CTLCOLOR_STATIC 靜態文本

2.你可能覺得對所有的控件使用統一的界面設置覺得不自由, 其實VC同樣可以對特定的ID的控件進行設置, 方法如下:

switch (pWnd->GetDlgCtrlID())
{
    //針對ID爲IDC_CTL1, IDC_CTL2和IDC_CTL3的控件進行同樣的設置
    case IDC_CTL1:
    case IDC_CTL2:
    case IDC_CTL3:
    {
        pDC->SetBkMode(TRANSPARENT);
        pDC->SetTextColor(RGB(255,255, 0));
        pWnd->SetFont(cFont);
        HBRUSH B = CreateSolidBrush(RGB(125,125,255));
        return (HBRUSH) B;
    }
    default:
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}


HBrush用法 

HBRUSH hbr;

第一種: hbr= CreateSolidBrush(RGB(255,0,0));    //單色的畫刷

第二種: hbr= (HBRUSH)GetStockObject(BLACK_BRUSH);  //只能取特定顏色的畫刷,如BLACK_BRUSH,GRAY_BRUSH等刷

第三種: hbr= CreatePatternBrush(HBITMAP hbmp);    //得到位圖畫刷

第四種: hbr = CreateHatchBrush(int fnStyle, COLORREF clrref)    //創建一種帶陰影的畫刷


第五種: hbr= CreateBrushIndirect(LOGBRUSH);     //通過LOGBRUSH結構體來取畫刷
   

typedef struct tagLOGBRUSH { 
    UINT         lbStyle; //畫刷類型
    COLORREF lbColor; //顏色
        LONG         lbHatch; //陰影
} LOGBRUSH, *PLOGBRUSH;

第六種: hbr= HBRUSH CreateDIBPatternBrush(       //通過與設備無關位圖創建一個畫刷
        HGLOBAL hglbDIBPacked,      // handle to DIB
     UINT fuColorSpec        // color table data
      );

例如:

HBRUSH CAfdView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
if (pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
    pDC->SetTextColor(RGB(200,0,0));
    pDC->SetBkColor(RGB(0,0,255));
  static HBRUSH hBrush = CreateSolidBrush(RGB(222,0,255));
  return hBrush;
}
        // TODO: Return a different brush if the default is not desired
else 
  return hbr;
}

改變對話框背景色

HBRUSH CDqfDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

// TODO: Return a different brush if the default is not desired
if(nCtlColor == CTLCOLOR_DLG)
   {
   CBrush *brush;
    brush = new CBrush(RGB(221,221,221));
   return (HBRUSH)(brush->m_hObject);
   }
return hbr;
}



另外:

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

可能會引起GDI資源泄漏,解決方法請參考:http://blog.csdn.net/seven407/article/details/7497550


發佈了213 篇原創文章 · 獲贊 18 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章