新手上路,请多关照:有关VC绘图的初级问题

liubo76 2004-04-29 05:41:13
小妹刚才看了“蓝色的冰”提的问题,我恰好也碰到,在VC中画图要想在别的窗口遮住再移开后图形还在,是不是必须在ondraw画?例如画一根动态曲线,只须在ondraw里画就可以了吗?还是在外面函数画一次,然后在ondraw里重画一次?另外onsize又是干什么的呢?
谢谢大家!
...全文
9 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
imlmm 2004-04-30
在 OnTimer() 里面根新 变量得直,然后 Invalidate();
  • 打赏
  • 举报
回复
hab1980 2004-04-30
视图类中定义了一些变量用于保存将要在客户区中显示的数据,比如一个矩形、一个圆或者一个随时间t变化的正弦波形,为了使用户始终能够看到这些数据的图形化显示,只要在OnPaint()或者OnDraw()函数内部实现绘图任务即可,这是因为当窗口的某些部分从不可见到可见时,系统都会给窗口发送WM_PAINT消息,从而映射到执行OnPaint()函数。而OnPaint()往往调用OnDraw()来实现绘图任务。对于一些不会自动发送WM_PAINT消息的动作(如:菜单命令、工具条命令、快捷键命令、键盘消息、鼠标消息等等),而你的内部数据已经发生变化,这就需要手动发送WM_PAINT消息来更新客户区的图形化显示,可以使用Invalidate()、InvalidateRect()、InvalidateRgn()这三个函数之一来更新需要重绘的区域。
还有一个技巧:
如果你的绘图范围是整个客户区,就请在你的View类中重载WM_ERASEBKGND的映射函数OnEraseBkgnd(),注释掉return那一行,改成return TRUE;这样做会加快程序的执行速度。
  • 打赏
  • 举报
回复
酒红绿叶 2004-04-29
你需要知道什么时候会发生OnDraw,

楼上2位说得没错!
  • 打赏
  • 举报
回复
9712210 2004-04-29
onsize是窗口尺寸改变以后,通知你做响应更新的函数
是否用Ondraw需要你用的是什么类,只有CView及其派生类又Ondraw这回事
  • 打赏
  • 举报
回复
PiggyXP 2004-04-29
就是在OnDraw里面画就行,别的地方就调用Invalidate()就能自动调用OnDraw了

Onsize是你的窗体被改变大小的时候调用的,你想要在窗体改变大小的时候重绘,
就在OnSize里面Invalidate()

明白了,小妹?:)
  • 打赏
  • 举报
回复
相关推荐
发帖
界面
加入

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2004-04-29 05:41
社区公告
暂无公告