DeferWindowPos

最近做界面的时候遇到一个问题,在WM_SIZE的消息处理函数中需要调整多个控件的位置,发现在2K下可以顺利工作,可是在xp下就有很强的闪烁感。Google了一下,发现java awt的一个bug(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4959178)提到这个错误。主要原因也是2k和xp下WM_SIZE消息有一些区别。
             before xp, e.g. windows 2000:
            WM_SIZING
            WM_ERASEBKGND  <- erase background here is ok
            WM_SIZE
            WM_PAINT

           in xp:
           WM_SIZING
           WM_ERASEBKGND  <- erase here doesnt work some times
           WM_SIZE
           WM_ERASEBKGND <- need to do the erase here
           WM_PAINT
但是并没有详细提到如何解决这个bug,对java没有太多认识,也就没有继续跟进awt。又Google了很久,在"The Old New Thing"上找到了一篇好文章"What's the point of DeferWindowPos?" http://blogs.msdn.com/oldnewthing/archive/2005/07/06/436043.aspx

我的问题本身的解决用DeferWindowPos代替了MoveWindow和SetWindowPos就好了,关键是在那篇文章后面一些人的跟贴比较精彩,尤其是WM_WINDOWPOSCHANGED和WM_SIZE之间的一些关系,和使用DeferWindowPos的一些经验谈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值