設置對話框的背景色(VC)

方法一:調用CWinApp類的成員函數SetDialogBkColor來實現。    
   
  ----   其中函數的第一個參數指定了背景顏色,第二個參數指定了文本顏色。  
  下面的例子是將應用程序對話框設置爲藍色背景和紅色文本,步驟如下:    
   
  ----   ①   新建一個基於Dialog的MFC   AppWizard應用程序ExampleDlg。    
   
  ----   ②   在CExampleDlgApp   ::InitInstance()中添加如下代碼:    
   
  BOOL   CExampleDlgApp:   :   InitInstance   (   )  
  {  
  …  
  CExampleDlgDlg   dlg;  
  m_pMainWnd   =   &dlg;  
   
  //先於DoModal()調用,將對話框設置爲藍色背景、紅色文本  
  SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));  
  int   nResponse   =   dlg.DoModal();  
  …  
  }  
   
  ----   編譯並運行,此時對話框的背景色和文本色已發生了改變。值得注意的  
  是:在調用DoModal()之前必須先調用SetDialogBkColor,且此方法是將改變  
  應用程序中所有的對話框顏色,並不能針對某一個指定的對話框。    
  ----   方法二:重載OnPaint(),即WM_PAINT消息。有關代碼如下(以上例工程爲準):    
   
  void   CExampleDlgDlg::OnPaint()    
  {  
  if   (IsIconic())  
  …  
  else  
  {  
  CRect   rect;  
  CPaintDC   dc(this);  
  GetClientRect(rect);  
  dc.FillSolidRect(rect,RGB(0,255,0));   //設置爲綠色背景  
   
  CDialog::OnPaint();  
  }  
   
   
  ----   方法三:重載OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),  
  即WM_CTLCOLOR消息。具體步驟如下(以上例工程爲準):    
  ----   ①在CExampleDlgDlg的頭文件中,添加一CBrush的成員變量:    
   
  class   CExampleDlgDlg   :   public   CDialog  
  {  
  ...  
  protected:  
  CBrush   m_brush;    
  ...  
  };  
   
   
  ----   ②在OnInitDialog()函數中添加如下代碼:    
  BOOL   CExampleDlgDlg::OnInitDialog()    
  {  
  ...  
  //   TODO:   Add   extra   initialization   here  
  m_brush.CreateSolidBrush(RGB(0,   255,   0));   //   生成一綠色刷子    
  ...  
  }    
   
  ----   ③利用ClassWizard重載OnCtlColor(…),即WM_CTLCOLOR消息:    
  HBRUSH   CExampleDlgDlg::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消息。具體步驟如下(以上例工程爲準):    
  ----   步驟①、②同上方法三中的步驟①、②。    
   
  ----   步驟③利用ClassWizard重載OnCtlColor(…)(即WM_CTLCOLOR消息)時則有  
  些不同:    
   
  HBRUSH   CExampleDlgDlg::OnCtlColor  
  (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
   
  //在這加一條是否爲對話框的判斷語句  
  if(nCtlColor   ==CTLCOLOR_DLG)  
  return   m_brush;   //返加綠色刷子  
  return   hbr;  
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章