VC/MFC如何設置對話框背景顏色


方法一:調用CWinApp類的成員函數SetDialogBkColor來實現。  (這個函數已經廢棄)

void SetDialogBkColor(COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0));

其中函數的第一個參數指定了背景顏色,第二個參數指定了文本顏色。

在InitInstance()中添加如下代碼:  

SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));  

值得注意的是:在調用DoModal()之前必須先調用SetDialogBkColor。

這種方法經過筆者驗證,並不能改變對話框背景

方法二:重載OnPaint(),即WM_PAINT消息

 CRect   rect;  
  CPaintDC   dc(this);  
  GetClientRect(rect);  
  dc.FillSolidRect(rect,RGB(0,255,0));   //設置為綠色背景

方法三:重載OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息

.h頭文件添加 CBrush  m_brush;

.cpp源文件添加 m_brush.CreateSolidBrush(RGB(255,0,0));

   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消息

.h頭文件添加 CBrush m_brush;

.cpp源文件添加 m_brush.CreateSolidBrush(RGB(255,0,0));

OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
  {  
  HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  //在這加一條是否為對話框的判斷語句  
     if(nCtlColor   ==CTLCOLOR_DLG)  
        return   m_brush;   //返加紅色刷子  
  return   hbr;  
  }

可以根據不同的控件類型返回不同的畫刷,來實現不同控件顏色的設置  

          CTLCOLOR_BTN                按鈕控件
           CTLCOLOR_DLG                對話框
           CTLCOLOR_EDIT               編輯框
           CTLCOLOR_LISTBOX            列表控件
           CTLCOLOR_MSGBOX             消息控件
           CTLCOLOR_SCROLLBAR          滾動條控件
           CTLCOLOR_STATIC             靜態控件
這里大家要注意,OnCtlColor能改變Static等子控件的顏色,對於Button必須設置其屬性Owner Draw為True,才能改變Button按鈕背景色(CButton 文本的字體顏色並不能通過SetBkColor來改變,需要自己重繪CButton,在DrawItem中進行實現。
HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 // TODO:  在此更改 DC 的任何屬性
 if(nCtlColor==CTLCOLOR_BTN)          //更改按鈕顏色
 {
  //pDC->SetBkMode(TRANSPARENT);
  pDC->SetTextColor(RGB(0,0,0));
  pDC->SetBkColor(RGB(121,121,255));   
  HBRUSH b=CreateSolidBrush(RGB(121,121,255));
  return b;
 }
 else if(nCtlColor==CTLCOLOR_SCROLLBAR)  //
 {
  //pDC->SetBkMode(TRANSPARENT);
  pDC->SetTextColor(RGB(0,0,0));
  pDC->SetBkColor(RGB(233,233,220));
  HBRUSH b=CreateSolidBrush(RGB(233,233,220));
  return b;
 }
 else if(nCtlColor==CTLCOLOR_EDIT)   //更改編輯框
 {
  //pDC->SetBkMode(TRANSPARENT);
  pDC->SetTextColor(RGB(0,0,0));
  pDC->SetBkColor(RGB(165,254,236));
  HBRUSH b=CreateSolidBrush(RGB(165,254,236));
  return b;
 }
 else if(nCtlColor==CTLCOLOR_STATIC)  //更改靜態文本
 {
  pDC->SetTextColor(RGB(0,0,0));
  pDC->SetBkColor(RGB(166,254,1));
  HBRUSH b=CreateSolidBrush(RGB(166,254,1));
  return b;
 }
 else if(nCtlColor==CTLCOLOR_DLG)   //更改對話框背景色
 {
  pDC->SetTextColor(RGB(0,0,0));
  pDC->SetBkColor(RGB(166,254,1));
  HBRUSH b=CreateSolidBrush(RGB(166,254,1));
  return b;
 }
 // TODO:  如果默認的不是所需畫筆,則返回另一個畫筆
 return hbr;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM