CWnd::OnCtlColor afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );Return ValueOnCtlColor must return a handle to the brush that is to be used for painting the control background.// This OnCtlColor handler will change the color of a static control // with the ID of IDC_MYSTATIC. The code assumes that the CMyDialog // class has an initialized and created CBrush member named m_brush. // The control will be painted with red text and a background // color of m_brush.HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { // Call the base class implementation first! Otherwise, it may // undo what we're trying to accomplish here. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // Are we painting the IDC_MYSTATIC control? We can use // CWnd::GetDlgCtrlID() to perform the most efficient test. if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC) { // Set the text color to red pDC->SetTextColor(RGB(255, 0, 0)); // Set the background mode for text to transparent // so background will show thru. pDC->SetBkMode(TRANSPARENT); // Return handle to our CBrush object hbr = m_brush; } return hbr; }
一条语句改变对话框背景和文本颜色作者: 龚建伟 2001.08.18
CLabel类可以有选择地改变 Static 静态文本颜色、背景,或将静态文本设置为超链接,但如果对话框全部改成其它统一的背景色和文字颜色,在VC中则只需一条语句。首先下载我做的示例源程序bgtextcolor.ziip:下载(VC6.0,WIN9X/2000) (269提供链接),在压缩包内我还放了个WORD文档的256颜色表,你选择颜色时会非常方便的。下面是详细的编程过程:1. 新建项目:在VC6中用MFC新建一个基于对话框的BgcolorDemo项目,接受所有缺省选项即可;2.写入这条语句就成了:在 BgColorDemo.cpp文件中找到 BOOL CBgColorDemoApp::InitInstance()函数,在如下位置加入SetDialogBkColor设置。BOOL CBgColorDemoApp::InitInstance() { AfxEnableControlContainer();// Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need.#ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endifCBgColorDemoDlg dlg; m_pMainWnd = &dlg; //在这里加入背景颜色的设置,就一条语句,多简单, //前一个 RGB设置背景色,第二个RGB设置字体颜色SetDialogBkColor(RGB(000,204,255), RGB(255, 0,0)); int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel }// Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; }
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );Return ValueOnCtlColor must return a handle to the brush that is to be used for painting the control background.// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CMyDialog
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class implementation first! Otherwise, it may
// undo what we're trying to accomplish here.
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // Are we painting the IDC_MYSTATIC control? We can use
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
{
// Set the text color to red
pDC->SetTextColor(RGB(255, 0, 0)); // Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT); // Return handle to our CBrush object
hbr = m_brush;
} return hbr;
}
CLabel类可以有选择地改变 Static 静态文本颜色、背景,或将静态文本设置为超链接,但如果对话框全部改成其它统一的背景色和文字颜色,在VC中则只需一条语句。首先下载我做的示例源程序bgtextcolor.ziip:下载(VC6.0,WIN9X/2000) (269提供链接),在压缩包内我还放了个WORD文档的256颜色表,你选择颜色时会非常方便的。下面是详细的编程过程:1. 新建项目:在VC6中用MFC新建一个基于对话框的BgcolorDemo项目,接受所有缺省选项即可;2.写入这条语句就成了:在 BgColorDemo.cpp文件中找到 BOOL CBgColorDemoApp::InitInstance()函数,在如下位置加入SetDialogBkColor设置。BOOL CBgColorDemoApp::InitInstance()
{
AfxEnableControlContainer();// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endifCBgColorDemoDlg dlg;
m_pMainWnd = &dlg;
//在这里加入背景颜色的设置,就一条语句,多简单,
//前一个 RGB设置背景色,第二个RGB设置字体颜色SetDialogBkColor(RGB(000,204,255), RGB(255, 0,0));
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}