请问OnPaint和OnDraw的具体功能差别是什么?
除了OnPaint只用于屏幕显示,而OnDraw还能用于打印等方面,还有什么区别?如果,在一个View类里面它们两个同时出现了,如果只用于屏幕显示,那有什么分工呢?

解决方案 »

  1.   

    OnPaint( )與OnDraw( )的區別:
    OnPaint()是消息響應函數,默認是WM_PAINT消息的入口.
    OnDraw()是虛函數,是被OnPaint( )調用的函數.
    OnPaint( )優先于OnDraw( ),如果重載了OnPaint( ),則不會響應OnDraw( ).如果需要,則需明確調用OnDraw( )函數.
      

  2.   

    我听说OnPaint只显示,而OnDraw支持往各种设备上输出,譬如打印机
      

  3.   

    都一样的,OnDraw只不过是MFC和自己对OnPaint作了点手脚!
    没什么和!
    就是OnDraw里面的东西按打印就会输出到打印机!
      

  4.   

    楼上各位讲的已经很明确,特别是Frank_Xu。
    OnDraw()是虛函數,既然是虛函數,就可以被重载(重写)。
    的确,OnPaint()用来响应WM_PAINT消息,视类的OnPaint()内部根据是打印还是屏幕绘制分别以不同的参数调用OnDraw()虛函數。
    所以在OnDraw()里你可以区别对待打印和屏幕绘制。
    其实,MFC在进行打印前后还做了很多工作,调用了很多虚函数,比如OnPreparePrint()等。
      

  5.   

    OnDraw()是虛函數,既然是虛函數,就可以被重载(重写)。
    的确,OnPaint()用来响应WM_PAINT消息,视类的OnPaint()内部根据是打印还是屏幕绘制分别以不同的参数调用OnDraw()虛函數。
    所以在OnDraw()里你可以区别对待打印和屏幕绘制。
    其实,MFC在进行打印前后还做了很多工作,调用了很多虚函数
      

  6.   

    OnDraw肯定要调用Onpaint,只要又重绘的消息就会调用,但是文档内容的改变ondraw不会响应,onpaint可以处理
      

  7.   

    看看CView的源程序就知道了:OnPaint()是WM_PAINT的消息响应函数,而OnDraw()是在OnPaint()中被调用的。
      

  8.   

    谢谢指教了!
    尤其是frank_xu