WM_PAINT 和 WM_ERASEBKGND 消息的区别
来源:互联网 发布:淘宝买电动车怎么样? 编辑:程序博客网 时间:2024/05/07 03:35
先看看,如何获得HDC(设备句柄)
1.调用BeginPaint()。绘制范围是窗口的无效区域。通常是在WM_PAINT中调用。这个api获得HDC,在EndPaint()以后,会将窗口的无效区域置为有效区域。BeginPaint()会根据Invalidate()时传的参数,决定是否擦除背景。需要擦除背景时,BeginPaint()会发送一个WM_ERASEBKGND。
2.调用GetDC()和GetWindowDC(),获得的HDC,绘制范围是整个窗口。且在ReleaseDC()后,不会设置窗口的无效区域为有效(确切地说这种方式获得的dc,整个窗口都可以绘制,其无效区域是整个窗口)。可以在任意地方获取这个dc并绘图。
一个常见的疑惑是,在窗口重绘时,先发WM_PAINT还是先发WM_ERASEBKGND消息?答案是都有可能。
1.由于移动窗口,改变窗口,最大最小化窗口,导致的重绘。系统会先发WM_ERASEBKGND消息,后发WM_PAINT消息(此时OnPaint函数的wparam是一个hdc)。
2.由于调用了Invalidate()或InvalidateRect()导致的重绘。系统会发WM_PAINT消息。在处理WM_PAINT消息,通常会调用BeginPaint()(此时wparam是NULL)获得HDC。BeginPaint()会根据需要,决定是否发送WM_ERASEBKGND。
在看几个应用中的问题。
1.OnErasebkgnd()中,返回真表示已经擦除了背景,返回假表示没有擦除背景。这个返回值,只对BeginPaint()的第二个参数(这是一个传出型参数)PAINTSTRUCT的fErase有影响。OnErasebkgnd()返回假时,fErase被BeginPaint()设置为真,表示下面应该考虑擦除背景的事。
2.WTL中CPaintDC构造函数中会调用BeginPaint()获得dc,析构函数中会调用EndPaint()。
- WM_PAINT 和 WM_ERASEBKGND 消息的区别
- WM_PAINT 和 WM_ERASEBKGND 消息的区别 .
- WM_PAINT 和 WM_ERASEBKGND 消息的区别
- 深度分析WM_PAINT和WM_ERASEBKGND消息
- 关于WM_ERASEBKGND和WM_PAINT的深刻理解
- 关于WM_ERASEBKGND和WM_PAINT的深刻理解
- WM_ERASEBKGND和WM_PAINT的深刻理解 .
- WM_ERASEBKGND和WM_PAINT的深刻理解
- 关于WM_ERASEBKGND和WM_PAINT的深刻理解
- 关于WM_ERASEBKGND和WM_PAINT的深刻理解
- WM_PAINT和WM_ERASEBKGND區別
- WM_PAINT详解和WM_ERASEBKGND
- WM_PAINT, WM_NCPAINT, WM_ERASEBKGND的关系
- WM_PAINT WM_ERASEBKGND
- 3.VC(custom)-WM_PAINT和WM_ERASEBKGND
- WM_PAINT、WM_ERASEBKGND、InvalidateRect、Invalidate之间的关系
- PAINT和WM_ERASEBKGND消息
- WM_PAINT与WM_ERASEBKGND
- 弹出层有遮罩
- Ant 编译android 应用的方法
- 统计一段文字几行能写完
- 实施CMMI时必须解决的认识问题
- 搭建一个ASP网站过程(Dreamwaver+Win7+IIS7)(学习笔记)
- WM_PAINT 和 WM_ERASEBKGND 消息的区别
- Eclipse3.6与m2eclipse,run-jetty-run插件对WEB项目进行热部署以及在jar源码中进行调试(一)
- 恶梦是坏泡泡
- 手机待机图片格式详细解说
- 新的开始
- 恶梦让妈妈吸走了
- 电脑处理
- Symbian中各种提示、输入对话框的使用
- 一个关于组播的网络问题--暂没有时间确定真实原因