VC SDK中关于WM_PAINT的新手问题

我只有10分了望前辈帮忙我想知道我们通过手动改变窗口所导致系统发出的WM_PAINT消息和我们通过SendMessage函数发出的WM_PAINT消息有什么不同?我在WM... 我只有10分了 望前辈帮忙
我想知道我们通过手动改变窗口所导致系统发出的WM_PAINT消息和我们通过SendMessage函数发出的WM_PAINT消息有什么不同?
我在WM_PAINT消息的相应下设置了一个图片显示,可是这个图片要在窗口被刷新以后才会显示出来,可是我想它在窗口一创建出来就被显示,所以我在WM_CREATE消息相应下设置了一个SendMessage函数发送WM_PAINT消息妄图通过这种手段来达成目的,我知道我错了,所以想问为什么?
展开
 我来答
DreamF_1
2008-04-05
知道答主
回答量:21
采纳率:0%
帮助的人:0
展开全部
如果想在窗口一创建就让窗口过程接收WM_PAINT消息,应该在ShowWindow()函数后面,再调用UpdateWindow()函数,就可以像窗口过程发送一条WM_PAINT消息了。不必在WM_CREATE消息里再向自身发送WM_PAINT消息。

至于原因,有点麻烦,简单说说:
当你调用CreateWindow()创建窗口时,发送WM_CREATE消息给窗口过程。当窗口过程接收后,由于你在WM_CREATE消息里,又调用SendMessage()函数,该函数的特点是:直到发送的消息被窗口过程处理才返回!所以,虽然你发送的WM_PAINT消息被窗口过程接收并处理了,但这时你要注意,你还一直停留在CreateWindow()函数里!它一直没有返回!因此,它身后的ShowWindow()函数也一直没被调用!因此,这时窗口根本就还没出现!换句话说,你应该在窗口先出现之后,再发送WM_PAINT消息!而你那么做刚好反了,成了先发送WM_PAINT消息,再显示窗口——自然什么也看不到了——因为当你看到窗口时,那条消息已经被发送了。
所以,你应该先使用ShowWindow()函数让窗口出现,再发送WM_PAINT消息让图片显示出来!因此要这么做:
hwnd=CreateWindow(………………);
ShowWindow(……);//显示窗口
UpdateWindow(……);//发送WM_PAINT消息
这就可以达到效果了,试试吧!
anglecloudy
2008-04-05 · TA获得超过1981个赞
知道小有建树答主
回答量:831
采纳率:0%
帮助的人:611万
展开全部
高手。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式