最近在写一个画板的程序(刚学windows程序设计),遇到一个奇怪的问题,大致是这样的
比如我用到两个类,一个父类,一个子类
class A
{
virtual void draw(){}
};
class B:public A
{
void draw(){}
};
A a = new B;
再不用的重绘的情况s a对象调用B类里的函数,但是一重绘(比如窗口放大),a就调用A类里的函数了。很让人摸不着脑。
请各位帮忙想象可能是因为什么原因?

解决方案 »

  1.   

    不小心写错了
    是A *a = new B;
      

  2.   

    B中也可virtual void draw(){}是挺怪的,重绘代码?
      

  3.   

    有没有可能直线的位置搞错了,或在窗口resize的时候没画?
      

  4.   

    我可能说得不够清楚
    比如说我WM_PAINT里调用a->draw();在放大窗口后调用的是A里的函数,因为我把a->draw();直接换成B里的draw函数,就可以正常工作
      

  5.   

    依我看,要用((B*)a)->draw()才行;
      

  6.   

    会这样???放大窗口后,也会发出WM_PAINT消息,应该是与你说的不能调用到B::draw()无关可能你是不是在WM_SIZE的响应函数里面修改过a指针,打印一下,看a指针在调用A;:draw 和B::draw的时候的值是否一样
    即:
    void A::draw{ TRACE("A:draw called,%x\n",this); .....}
    void B::draw{ TRACE("B:draw called,%x\n",this); .....}
      

  7.   

    两个可能:1、虚函数机制有错误2、响应WM—PAINT消息没有处理,里面没有调用draw函数