重载OnCtlColor函数不能改变对话框的背景色???在线等
我继承CDialog新建一个对话框类,并重载OnCtlColor函数,返回一个其它颜色的句柄,但是却不能改变对话框的背景色,为什么???????
这个OnCtlColor在什么情况下使用呢????
我该如何改变对话框的背景色????
我的代码如下:
C/C++ code
// 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;
}
C/C++ code
这个OnCtlColor在什么情况下使用呢????
我该如何改变对话框的背景色????
我的代码如下:
C/C++ code
#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;
}
C/C++ code
作者: wesleyluo 发布时间: 2011-06-14
来个大哥,帮忙看下咯。
作者: wesleyluo 发布时间: 2011-06-14
作者: lsq19871207 发布时间: 2011-06-14
OnCtlColor不会是你手动添加的吧?你应该响应WM_CTLCOLOR消息啊
你的是那个版本的VC啊,OnCtlColor怎么是虚函数呢?
BEGIN_MESSAGE_MAP(CTestBkColorDlg, CDialog)
END_MESSAGE_MAP()
为啥没有
ON_WM_CTLCOLOR()
你的是那个版本的VC啊,OnCtlColor怎么是虚函数呢?
BEGIN_MESSAGE_MAP(CTestBkColorDlg, CDialog)
END_MESSAGE_MAP()
为啥没有
ON_WM_CTLCOLOR()
作者: King_hhuang 发布时间: 2011-06-14
引用 3 楼 king_hhuang 的回复:
OnCtlColor不会是你手动添加的吧?你应该响应WM_CTLCOLOR消息啊
你的是那个版本的VC啊,OnCtlColor怎么是虚函数呢?
BEGIN_MESSAGE_MAP(CTestBkColorDlg, CDialog)
END_MESSAGE_MAP()
为啥没有
ON_WM_CTLCOLOR()
OnCtlColor不会是你手动添加的吧?你应该响应WM_CTLCOLOR消息啊
你的是那个版本的VC啊,OnCtlColor怎么是虚函数呢?
BEGIN_MESSAGE_MAP(CTestBkColorDlg, CDialog)
END_MESSAGE_MAP()
为啥没有
ON_WM_CTLCOLOR()
呵呵,那个就是我手动加的我以为那个是个虚函数呢;
原来不是这样啊,加了ON_WM_CTLCOLOR()就可以了;
但是怎么对话框上的按钮背景色没变呢?不是说所有控件颜色都改变吗?
作者: wesleyluo 发布时间: 2011-06-14