我继承CDialog新建一个对话框类,并重载OnCtlColor函数,返回一个其它颜色的句柄,但是却不能改变对话框的背景色,为什么???????这个OnCtlColor在什么情况下使用呢????我该如何改变对话框的背景色????我的代码如下:#pragma once
// CTestBkColorDlg 对话框class CTestBkColorDlg : public CDialog
{
DECLARE_DYNAMIC(CTestBkColorDlg)public:
CTestBkColorDlg(CWnd* pParent = NULL);   // 标准构造函数
virtual ~CTestBkColorDlg();// 对话框数据
enum { IDD = IDD_TESTBKCOLORDLG };protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
virtual HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP()public:
HBRUSH b;
CBrush m_Brush;
};// TestBkColorDlg.cpp : 实现文件
//#include "stdafx.h"
#include "TFileDialogTest.h"
#include "TestBkColorDlg.h"
// CTestBkColorDlg 对话框IMPLEMENT_DYNAMIC(CTestBkColorDlg, CDialog)CTestBkColorDlg::CTestBkColorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestBkColorDlg::IDD, pParent)
{}CTestBkColorDlg::~CTestBkColorDlg()
{
}void CTestBkColorDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CTestBkColorDlg, CDialog)
END_MESSAGE_MAP()
// CTestBkColorDlg 消息处理程序BOOL CTestBkColorDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Brush.CreateSolidBrush(RGB(0, 255, 255));
return TRUE;
}HBRUSH CTestBkColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
return m_Brush;
}

解决方案 »

  1.   

    你看看这个吧,希望对你有用
    http://blog.csdn.net/miaoshengwu/archive/2007/06/04/1637616.aspx
      

  2.   

    OnCtlColor不会是你手动添加的吧?你应该响应WM_CTLCOLOR消息啊你的是那个版本的VC啊,OnCtlColor怎么是虚函数呢?
    BEGIN_MESSAGE_MAP(CTestBkColorDlg, CDialog)
    END_MESSAGE_MAP()
    为啥没有
    ON_WM_CTLCOLOR()
      

  3.   

    呵呵,那个就是我手动加的我以为那个是个虚函数呢;
    原来不是这样啊,加了ON_WM_CTLCOLOR()就可以了;但是怎么对话框上的按钮背景色没变呢?不是说所有控件颜色都改变吗?