现在的位置: 首页 > 综合 > 正文

求在SDK中WM_ERASEBKGND消息的讲解

2013年08月08日 ⁄ 综合 ⁄ 共 1187字 ⁄ 字号 评论关闭

转自:http://www.wenwenji.com/news/BC/2010/47/1043221583JCE428C9A52B1KH5KAH.html

 

问题

再问下是不是WM_PAINT 会关联到WM_ERASEBKGND,到底重绘的整个过程是怎样的呢,比如说我用B窗口挡住了A窗口,然后我用鼠标点了下A窗口,A窗口变成了当前窗口, 从A窗口被挡住到A窗口成当前窗口,到底WINDOSW做了些什么呢~迷惑~~~

满意答案

你可以想象桌面就是一块画布,windows只是将原来画布擦除,再画上新的界面而已。只不过windows并没有真正删除原来的界面,只是把原 来的界面数据保存在内存中,下一次调用绘制就可以了了

提问人的追问 2010-04-03 13:28

你好,谢谢你的回答,但是我想知道WINDOWS向A窗口的应用程序的消息列队中加入了哪几条消息,比如A窗口被挡住了时,WINDOWS向 应用程序中加入了WM_PAINT,而WM_ERASEBKGND又是不是会被WM_PAINT关联到呢~我想要的是整个消息的过程~

回答人的补充 2010-04-03 13:40

您真是太强大了,很少有人对微软的实现了解的,好像微软也没公布源代码。 我看市面上将为什么的书就是《深入浅出MFC》了,其他的书都大同小异而已,就是将怎么做。我知道的两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT(通知非客户区有变化)。MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect)Invalidate()UpdateWindow()

提问人的追问 2010-04-03 13:48

哦,不好意思,我是新人,问题多~那WM_PAINT会关联到WM_ERASEBKGND吗~

回答人的补充 2010-04-03 14:02

一般来讲WM_ERASEBKGND是画背景的,WM_PAINT是画前景,但是这两个消息被执行的顺序可能不同。WM_ERASEBKGND的返回值是 给默认窗口过程用的,返回真表示你把背景画过了,默认窗口过程处理WM_PAINT时就认为背景画过了WM_ERASEBKGND 当窗口背景必须被擦除时(例在窗口改变大小时)WM_PAINT 要求一个窗口重画自己

提问人的追问 2010-04-03 14:13

感谢你的回复,最后一次追问罗,唉~虽然好傻,但系都要问,唔识。。背景和前景的区别是什么~~

回答人的补充 2010-04-03 14:21

我将的那个不是绝对的,举个例子吧,我们要在程序中想要把背景色设置成其他颜色(不是默认的白色或是灰色),那这个代码一般在WM_ERASEBKGND 的消息响应函数中执行,而当我们想在界面上画个圆圈之类的,一般在WM_PAINT的消息响应函数如OnPain中执行。我说的凡事无绝对就是你也可以把 背景的设置放在OnPain中,由程序员自己定。 欣赏你打破砂锅问到底的性格

抱歉!评论已关闭.