重载 OnEraseBkgnd
然后看看这个
HBRUSH CMyView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here
    switch( nCtlColor )
    {
    case CTLCOLOR_EDIT:
        if( pWnd->m_hWnd==m_editContent.m_hWnd )
        {
            pDC->SetBkColor(RGB(0,100,100));
            pDC->SetTextColor(RGB(0,255,250 ));
        }
        break;
    }

    // TODO: Return a different brush if the default is not desired
return hbr;
}

解决方案 »

  1.   

    非常感谢您的回答,但是我在文件对话框窗口的OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)函数中试过,不能实现改变控件的前景色,背景色。因为这些控件是要先获得对话框的父窗口,然后利用GetDlgItem()获得控件的句柄。也就是说,这些控件不属于文件对话框,而是属于文件对话框的父窗口。  这道题目是定制一个自己的文件对话框,能够预览位图。 
      

  2.   

    那就响应这个函数:
    OnEraseBkgnd ---------- WM_ERASEBKGND
      

  3.   

    不过要去掉对父类OnEraseBkgnd的调用
    CRect rect;
    GetClientRect(&rect);
    pDC->FillSolidRect(&rect,RGB(0,100,0));
    return TRUE;
      

  4.   

    如果您试一下的话,就会发现从CFileDialog派生的类根本不响应::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)和::OnEraseBkgnd(CDC* pDC)
      

  5.   

    最简单的方法:
    在Instance函数里加入:
    //在调用DoModal之前。SetDialogBkColor(RGB(0,255,0),RGB(0,0,255));//前一个RGB是对话框的背景颜色,后一个RGB是文本颜色。都可以自己设定。
      

  6.   

    那是因为CFileDialog里面内嵌了一个Dialog
      

  7.   

    前面说改变控件的前景及背景色,而后又说只是能够预览位图,不知道你到底想做那一个,他们的方法不一样,如果是前者,你可以开一个线程,然后在文件对话框的OnInitDone中添加代码,控件的id为stc2,stc1,cmb1等等,如果是后者,可以参考VC++技术内幕上面有子类化通用对话框的详解.
      

  8.   

    在上面挂一个钩子,然后替换掉winproc
    参见OPENFILENAME结构的lpfnHook成员的说明
      

  9.   

    高手们,搞定这个:
    http://www.csdn.net/Expert/topic/499/499189.shtm 
      

  10.   

    加一个全局变量 CBursh m_brush,
    m_bursh.CreateSolidBrush(RGB(255, 0, 0));
    在函数OnCtlColor里使hbr = m_bursh;
      

  11.   

    BOOL CMyApp::InitInstance()
    {
    ...
    // lets set red background and green text for our dialogs
    SetDialogBkColor(RGB(255, 0, 0), RGB(0, 255, 0));
    ...
    }
      

  12.   

    要改变默认的文件对话框的确只能用钩子函数来实现,用于代替通用文件对话框的缺省处理过程,具体很麻烦,如果有需要,把email写出来,我把代码寄给你。
      

  13.   

    dct1999(宇宙天空),多谢你的帮助。
    ,[email protected]
      

  14.   

    dct1999(宇宙天空),多谢你的帮助。
    ,[email protected]
      

  15.   

    eion(电离子):
    BOOL CMyApp::InitInstance()
    {
    ...
    // lets set red background and green text for our dialogs
    SetDialogBkColor(RGB(255, 0, 0), RGB(0, 255, 0));
    ...
    }
    多谢您的帮助,这只能改变窗体的背景色和字体颜色,不能改变窗口中控件的背景色和前景色。