小妹刚才看了“蓝色的冰”提的问题,我恰好也碰到,在VC中画图要想在别的窗口遮住再移开后图形还在,是不是必须在ondraw画?例如画一根动态曲线,只须在ondraw里画就可以了吗?还是在外面函数画一次,然后在ondraw里重画一次?另外onsize又是干什么的呢?
  谢谢大家!

解决方案 »

  1.   

    就是在OnDraw里面画就行,别的地方就调用Invalidate()就能自动调用OnDraw了Onsize是你的窗体被改变大小的时候调用的,你想要在窗体改变大小的时候重绘,
    就在OnSize里面Invalidate()明白了,小妹?:)
      

  2.   

    onsize是窗口尺寸改变以后,通知你做响应更新的函数
    是否用Ondraw需要你用的是什么类,只有CView及其派生类又Ondraw这回事
      

  3.   

    你需要知道什么时候会发生OnDraw,楼上2位说得没错!
      

  4.   

    在 OnTimer() 里面根新 变量得直,然后 Invalidate();
      

  5.   

    视图类中定义了一些变量用于保存将要在客户区中显示的数据,比如一个矩形、一个圆或者一个随时间t变化的正弦波形,为了使用户始终能够看到这些数据的图形化显示,只要在OnPaint()或者OnDraw()函数内部实现绘图任务即可,这是因为当窗口的某些部分从不可见到可见时,系统都会给窗口发送WM_PAINT消息,从而映射到执行OnPaint()函数。而OnPaint()往往调用OnDraw()来实现绘图任务。对于一些不会自动发送WM_PAINT消息的动作(如:菜单命令、工具条命令、快捷键命令、键盘消息、鼠标消息等等),而你的内部数据已经发生变化,这就需要手动发送WM_PAINT消息来更新客户区的图形化显示,可以使用Invalidate()、InvalidateRect()、InvalidateRgn()这三个函数之一来更新需要重绘的区域。
    还有一个技巧:
    如果你的绘图范围是整个客户区,就请在你的View类中重载WM_ERASEBKGND的映射函数OnEraseBkgnd(),注释掉return那一行,改成return TRUE;这样做会加快程序的执行速度。