请教一个关于画图程序的问题VC++6.0,SDI我想在CView中画图。
过程如下:初始化BOOL A为false.先是单击按钮,A为TRUE,同时对应的函数获得数据,然后是Invalidate,调用Ondraw函数,里面有一个判断,A若为真,执行一个函数F,画出一个折线图形。现在的问题是:数据已经有了。也能实现画的过程。但是有一个毛病,就是每次图形出现之前,都需要手工刷新一次,所谓手工刷新,就是说要切换到别的窗口,然后再切回来才能看到自己要画的那个图形。我尝试过Invalidate,UpdateAllViews(NULL),效果都是一样的。另外,还有一个现象,就是我曾经在Ondraw里面设置AfxMessageBox,发现只有在手工刷新之后,才执行了Ondraw函数。我就不清楚是那里出了问题,在Invalidate之后,没有调用Ondraw函数。那位大侠碰到过类似的问题,能指点一二啊谢谢。

解决方案 »

  1.   

    请确定你的那个按钮响应函数是在视图类里响应的,而不是在CMainframe或其他类里响应的。
      

  2.   

    如果你的按钮在对话框中,那么你可以显示的调用CView类的刷新函数。你的按钮在哪里呢?
      

  3.   

    楼上的高手说的对,刚学VC的时候不会用F9,现在发现F9特别管用
      

  4.   

    首先我不清楚你所说的触发单击按钮,改变A变量值的函数在那里写的。现在我假设你在View类中写的,那么当你在改变A的值之后,在这个“触发单击按钮”的函数中调用Invalidate(),肯定是会调用View中的Ondraw()的。但是Invalidate()本身是可以代参数的,分别是,True,False,执行的结果不同,这个CSDN中有,我在这里就不仔细说了;还有一种情况就是
    “触发单击按钮”的函数不是写在View中,而是别的类中,就不能直接写Invalidate(),而是应该CLXframe *pWnd=(CLXframe *)AfxGetMainWnd();
    CLXView *pView=(CLXView *)pWnd->GetActiveView();
    pView->Invalidate();
    这样才可以让View类中的Ondarw()实现重化操作。
    你自己在试试,以上的解决方法我已经是实现的了。