我创建一个child类型的子对话框,并在另一个窗口的OnCreate函数中创建这个子对话框
pSubDlg = new CSubDlg();
pSubDlg->Create(IDD_SUBDIALOG,this);
pSubDlg->MoveWindow(2,30,202,170);
pSubDlg->ShowWindow(SW_SHOW);然后我在这个子窗口上增加了静态文本控件,并响应OnCtlColor函数,在函数里面设置
文本控件颜色HBRUSH CSubDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(pWnd == this)
return m_bkBrush;
else if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
}
if(pWnd->GetDlgCtrlID()==IDC_STATIC123 )
{
pDC->SetTextColor(RGB(255,0,233));
return m_staticBrush;
} return hbr;
}可是当我在这个函数开始处打断点,程序始终不能进入该函数,
然后我又用消息反射ON_WM_CTLCOLOR_REFLECT()来测试
同样,实现了CtlColor后,调试依然不能进入该函数,这是为什么呢HBRUSH CSubDlg::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor(RGB(255,0,233));
pDC->SetBkMode(TRANSPARENT);
return m_staticBrush;
}
pSubDlg = new CSubDlg();
pSubDlg->Create(IDD_SUBDIALOG,this);
pSubDlg->MoveWindow(2,30,202,170);
pSubDlg->ShowWindow(SW_SHOW);然后我在这个子窗口上增加了静态文本控件,并响应OnCtlColor函数,在函数里面设置
文本控件颜色HBRUSH CSubDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(pWnd == this)
return m_bkBrush;
else if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
}
if(pWnd->GetDlgCtrlID()==IDC_STATIC123 )
{
pDC->SetTextColor(RGB(255,0,233));
return m_staticBrush;
} return hbr;
}可是当我在这个函数开始处打断点,程序始终不能进入该函数,
然后我又用消息反射ON_WM_CTLCOLOR_REFLECT()来测试
同样,实现了CtlColor后,调试依然不能进入该函数,这是为什么呢HBRUSH CSubDlg::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor(RGB(255,0,233));
pDC->SetBkMode(TRANSPARENT);
return m_staticBrush;
}
return m_bkBrush;
pDC->SetTextColor(RGB(255,0,233));真怀疑消息映射加错了,没理由没效果。呵呵
//{{AFX_MSG_MAP(CSubDlg)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()HBRUSH CSubDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(IDC_STATIC123 == pWnd->GetDlgCtrlID())
{
pDC->SetTextColor(RGB(255, 0, 128));
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
万分感谢各位大大对我这个问题的关注!!!
我说下大致的框架
这个创建该子窗口的是一个继承CFormView的视图类,这个视图类有个类型为child的对话框我创建子窗口就是把该子窗口贴到CFormView的对话框中,然后在子窗口中添加ON_WM_CTLCOLOR()
的消息映射,然后就打断点调试,发现OnCtlColor函数根本进不去我再重新创建个测试程序看看