比如我在子类CMyView添加WM_PAINT消息时,程序调用的是子类CMyView的OnPaint函数,然而我在子类不添加WM_PAINT消息时,程序调用的是父类CView的OnPaint函数,我在想OnPaint函数不是虚函数呀,是消息函数,子类CMyView添加WM_PAINT消息时,为什么程序会调用的是子类CMyView的OnPaint函数?
望各位能帮我理解,TKS!!

解决方案 »

  1.   

    因为MFC做了一个类似虚函数表的东西……去看MFC消息映射部分的分发源代码。
      

  2.   

    看看《深入浅出MFC》的前六章
      

  3.   

    深入浅出MFC》的前六章
    虚函数表,一句话说不清楚
      

  4.   

    有个概念你搞混了
    消息响应函数和普通的函数没有区别的
    也就是说,虚函数和非虚函数都是可以作为消息函数的
    只要你在消息映射MESSAGE_MAP里把这个消息WM_**和你的这个函数关联起来
    那这个函数就是消息响应了,跟他是不是虚函数没关
      

  5.   

    http://www.cnblogs.com/zengxiangchun/archive/2012/04/27/2473080.html
    子类中有就调用子类的,子类中没有就调用父类的。
      

  6.   


    dcmilan,你好,我还没有看到虚函数可以作为消息函数的,可不可以具体滴;
    另外就是MFC消息机制应该就是1楼 jiangsheng大侠所说的做了一个类似虚函数表,这样我添加WM_PAINT消息时,子类OnPaint函数覆盖父类OnPaint函数,跟虚函数构思有点相似;这样理解才行的通;
      

  7.   


    zeng383408034,你好,你为什么会认为 子类中有就调用子类的,子类中没有就调用父类的,它的根据是很什么?它实质和原理是什么?我看过你的空间,没有说出具体实质,只是一些简单的操作;
      

  8.   

    因为CMyView的OnPaint函数隐藏了基类Cview的OnPaint函数。http://blog.csdn.net/sendy888/article/details/1739113
      

  9.   

    非常谢谢zeng383408034, 但是我认为就是为什么CMyView的OnPaint函数隐藏了基类Cview的OnPaint函数,它的实质应该就是MFC底层代码做了一个类似虚函数表;