在视图中调用一个对话框,再改变对话框中一个控件的颜色,控件ID为:IDC_FOGCOLOR,鼠标单击该控件,弹出颜色对话框,选择颜色后把选择的颜色填充到这个控件上,代码如下:
void CEvnDlg::OnFogcolor() 
{
// TODO: Add your control notification handler code here

CDC* dc;
CBrush* brush;
CRect rect; CColorDialog clrDlg;
clrDlg.m_cc.Flags|=CC_RGBINIT;
clrDlg.m_cc.rgbResult=m_color; if(IDOK==clrDlg.DoModal())
{
m_color=clrDlg.m_cc.rgbResult;      
brush=new CBrush(m_color);
GetDlgItem(IDC_FOGCOLOR)->GetClientRect(&rect);
dc=GetDlgItem(IDC_FOGCOLOR)->GetDC();
dc->FillRect(&rect,brush);
}
         GetDlgItem(IDC_FOGCOLOR)->ReleaseDC(dc);
delete brush;
}CEvnDlg为对话框类,m_color为CEvnDlg中类型为COLORREF的成员变量。
当这个对话框在主窗口之外时,控件颜色可以改变,当对话框覆盖在主窗口上时,控件颜色不变,总是灰色的,这是什么原因?怎么解决啊?请会的兄弟点拨点拨!

解决方案 »

  1.   

    你应该在这个控件中响应WM_PAINT消息或者WM_DRAWITEM消息来绘制。颜色改变后只要改变颜色变量、刷新即可。
      

  2.   

    在对话框中响应 WM_CTRCOLOR 即可 ..!
      

  3.   

    Mackz(在相互:
    是把代码放在WM_PAINT消息消息中吗?
      

  4.   

    如果是标准窗口控件,一般都有WM_DRAWITEM消息或者NM_CUSTOMDRAW通知消息,不用直接响应WM_PAINT消息。
      

  5.   

    button, label, tab, textbox, progress bar, and so on...
    :)
      

  6.   

    还是用个有源代码的控件包最简单http://bbs.msproject.cn/default.aspx?g=posts&t=286