對話方塊背景色的設定 (轉)
黃基前(廣西桂林)
---- 筆者曾在《報》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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對話方塊中對成批控制元件的操作 (轉)控制元件
- c#中的模態對話方塊和非模態對話方塊C#
- 對話方塊函式函式
- 登入對話方塊
- React中的模式對話方塊React模式
- [MFC]選擇目錄對話方塊和選擇檔案對話方塊
- 進一步學習對話方塊(轉)
- flutter demo (四):對話方塊Flutter
- Javascript檔案對話方塊JavaScript
- VC實現對話方塊上資訊的顯示 (轉)
- VUE:點選開啟的對話方塊外面時,對話方塊總是被關閉Vue
- 一個Flex 對話方塊的坑Flex
- javascript中的彈出對話方塊JavaScript
- InstallShield自定義對話方塊模板程式碼(轉)
- 重新顯示 Windows 98 歡迎對話方塊(轉)Windows
- InstallShield自定義對話方塊淺談(三) (轉)
- InstallShield自定義對話方塊淺談(四) (轉)
- InstallShield自定義對話方塊淺談(五) (轉)
- 在 Flutter 使用 GetX 對話方塊Flutter
- Qt 對話方塊新增工具欄QT
- 如何自學qt(4)——對話方塊QT
- QT 等待對話方塊/進度QT
- android 多項對話方塊Android
- Android Dialog對話方塊Android
- DialogPane對話方塊佈局
- 視窗和對話方塊居中對齊
- JavaFX 如何使用內建的對話方塊Java
- IE中非模式對話方塊(showModelessDialog)應用 (轉)模式
- JavaScript視窗功能指南之建立對話方塊 (轉)JavaScript
- 資料夾選擇對話方塊 JS實現(轉)JS
- 有關屬性對話方塊(property sheet )的幾個提示 (轉)
- Flutter Widgets 對話方塊-DialogFlutter
- 常用元件 / 對話方塊及選單元件
- Qt標準對話方塊實現QT
- TWebBrowser禁止彈出Alert對話方塊Web
- android常用對話方塊封裝Android封裝
- JavaScript彈出儲存對話方塊JavaScript
- java Swing詢問對話方塊Java