由于特殊原因,我重载了某对话框的OnEraseBkGnd函数,让它不执行CDialog::OnEraseBkGnd直接return TRUE。但是,在一个操作中,我需要调用CDialog::OnEraseBkGnd。并且需要传入一个CDC指针,我就CClient Dc(this),把dc的指针作为参数传进CDialog::OnEraseBkGnd中。
结果是,并没有起到默认的CDialog::OnEraseBkGnd执行时的效果。我怀疑传入的dc参数不对。还望大侠解惑!

解决方案 »

  1.   

    你需要的只是调用这个函数中的语句吧。把其中的语句封装成一个函数,然后分别在OnEraseBkGnd和你的操作中调用就行了。哪有去调用OnEraseBkGnd的做法
      

  2.   

    楼主怎么调的?
    是OnEraseBkGnd(); 还是CDialog::OnEraseBkGnd();
      

  3.   

    应该是CDialog::OnEraseBkGnd()吧,试试用CWindowDC
      

  4.   

    CDC *pDC = GetWindowDC();
    CDialog::OnEraseBkGnd(pDC);
      

  5.   

    晕,看了mfc源码,CDialog没有重写OnEraseBkgnd,在CWnd里的OnEraseBkgnd
      

  6.   

    这个思路可行,谢啦!我还是想知道一下,为什么我直接调用OnEraseBkGnd,并传入CClientDC dc(this)作为参数不起作用呢?
      

  7.   

    我试了一下,和CClientDC dc(this)一样,不起作用
      

  8.   

    CClientDC dc(this);
    CDialog::OnEraseBkGnd(&dc);
      

  9.   

    OnEraseBkGnd的调用应该是有环境的。它的参数DC应该已经在上层函数中已经进行了某些处理,到它这里时只需要你画画就行了。而你传给它的dc,啥也没干啊,自然起不到效果了。