對話方塊背景色的設定 (轉)

worldblog發表於2007-12-09
對話方塊背景色的設定 (轉)[@more@]

 

黃基前(廣西桂林)
---- 筆者曾在《報》2000年第5期中討論過如何改變的顏色,但還有相當一部分的讀者來信提問: 一個基於對話方塊的MFC AppWizard應用中,如何改變對話方塊的背景顏色呢?對於這個問題,其實可以 由幾種不同的方法來實現,具體如下(粗斜體程式碼為增添的):
---- 方法一:CWinApp類的成員SetDialogBkColor來實現。
---- 其中函式的第一個引數指定了背景顏色,第二個引數指定了文字顏色。下面的例子是將應用程式對話 框設定為藍色背景和紅色文字,步驟如下:
---- ① 新建一個基於Dialog的MFC AppWizard應用程式ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中新增如下程式碼:
BOOL CExampleDlgApp: : InitInstance ( )
{

  CExampleDlgDlg dlg;
  m_pMainWnd = &dlg;
//先於odal()呼叫,將對話方塊設定為藍色背景、紅色文字
  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.CreateSolirush(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;
}
---- 編譯並執行即可。
---- 關於如何改變對話方塊背景顏色的問題,可能還有很多種不同方法可以實現,筆者在這僅舉出四種常見 的方法。其中方法三的似乎有點不太規範,方法四則要比方法三正統些,筆者這樣的對比舉例是為了 拓寬VC程式設計愛好者特別是初學者的程式設計思路,讀者可以根據實際情況選用其中的一種。如果再結合《軟體 報》2000年第5期中改變對話方塊上的控制元件顏色,相信會使您的MFC應用程式"增色"不少。

 

另外一種就是用

BOOL CBPCALLView::OnEraseBkgnd(CDC* pDC)
{
 //可以背景圖,畫刷等
 //return CScrollView::OnEraseBkgnd(pDC);
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990349/,如需轉載,請註明出處,否則將追究法律責任。

相關文章