VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 879|回复: 4

讨论下重画的问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-13 06:30:01 | 显示全部楼层 |阅读模式
Invalidate();
和直接调用
CDC *pDC=GetDC();
OnDraw(pDC);
有什么区别?(画都是在OnDraw里面画,未在其他地方画)
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-8 17:15:01 | 显示全部楼层
使用Invalidate()是正规的做法,是不是要调用OnDraw由系统决定,因为窗口可以隐藏,可以最小化的。调用OnDraw(pDC)就是你自己控制了,不是正式的做法。
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-6-9 21:00:01 | 显示全部楼层
Invalidate()应该是有条件的触发WM——PAINT消息,从而在消息响应函数中OnDraw执行。是间接的调用OnDraw,比调用OnDraw(pDC)就是你自己控制多了一些过程
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-8-3 17:45:01 | 显示全部楼层
呵呵,其实我是想知道他们的调用及时性上的区别,我调用了onDraw感觉它并没有帮我刷新界面
而调用invalidate呢又刷新的太晚了。
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-8-3 19:00:01 | 显示全部楼层
InvalidatedRect
使一个矩形无效,需要重绘该矩形,在该矩形做一个重绘的标记,当下一次WM_PAINT发出的时候,该矩形被重绘.
使显示矩形区无效,WM_PAINT会对无效的区域重画
函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色。  

UpdateWindow
强制发出一个WM_PAINT消息
会发送一条WM_PAINT,但不进入消息队列,呼叫立即更新窗口  
只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT   

如果希望立即刷新无效区域,可以在调用InvalidateRect之后调用UpdateWindow,如果客户区的任一部分无效,
则UpdateWindow将导致Windows用WM_PAINT消息调用窗口过程(如果整个客户区有效,则不调用窗口过程)。
这一WM_PAINT消息不进入消息队列,直接由WINDOWS调用窗口过程。窗口过程完成刷新以后立刻退出,
WINDOWS将控制返回给程序中UpdateWindow调用之后的语句。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表