永发信息网

OnDraw()函数每当窗口发生重绘时就会执行

答案:2  悬赏:10  手机版
解决时间 2021-02-06 15:16
  • 提问者网友:凉末
  • 2021-02-06 10:38
OnDraw()函数每当窗口发生重绘时就会执行,我对这句话不是很理解,能不能举例说明一下呢?
最佳答案
  • 五星知识达人网友:杯酒困英雄
  • 2021-02-06 11:18
OnDraw()函数每当窗口发生重绘时就会执行,它其实跟消息处理函数OnPaint()差不多。当在View类里添加了消息处理函数OnPaint()时,OnPaint()就会覆盖掉OnDraw()。Invalidate()是使视图类窗口无效的函数,当要刷新视图时,就可以掉用它,以便发送一个WM_PAINT消息引起窗口的重绘。它有一个默认的参数TRUE,即Invalidate(TRUE)。
全部回答
  • 1楼网友:鱼忧
  • 2021-02-06 12:37
楼主的意思不是太明白,我猜测是楼主误以为ondraw是会不断被调用的吧,并且调ondraw时背景都会先自动擦除的吧,事实并非如此。 ondraw是窗口产生了重绘之后才会被调用 。重绘是窗口产生了无效区域之后触发,比如窗口被遮挡又解除时,windows自动触发无效区域(并带上擦除标记),然后发送wm_paint消息,mfc封装处理此消息并调用ondraw虚函数。beginpaint时若区域有擦除标记会触发wm_ncpaint and wm_erasebkgnd重绘无效区的窗口背景(在ondraw调用之前)。 如要手动触发重绘,调用invalidate可把整个窗口客户区设置为无效区域并触发wm_paint,若invalidate参数为true则会把无效区的擦除标志设置上(这样才会触发wm_erasebkgnd)。 所以,楼主要窗口刷白,必须先使窗口产生无效区域。调用invalidate是最简洁方法。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯