win8 UI bug

最近在做win8方面的开发,qa报上来一大堆bug。其中有个是界面方面的,情况很奇怪。有个对话框上的按钮,在win8下,鼠标点击能够响应,但是触屏点击不能响应。并且只有那个对话框上的按钮不能响应,其他对话框没有问题。

调试界有句话说得好,能够复现的bug都不是什么bug。

因为有源代码在手,直接attach上去,发现窗口过程函数接收不到WM_LBTNDOWN的消息,WM_MOUSEMOVE消息也没有接收到。幸好我对窗口消息机制比较熟悉,马上看看有没有接收到WM_NCHITTEST。一断点测试就接收到了。看来是程序处理WM_NCHITTEST的时候出了问题。

我又看了下,原来这个dialog是调用API函数DialogBox创建的,它的窗口过程函数中(DlgProc) switch case了几个消息,其中没有WM_NCHITTEST。但问题是,最后函数返回前又调用了DefWIndowProc,也就是说,所有的消息都被处理了。处理了也没有问题,问题最终出在return FALSE上。 msdn上明明说了,没有处理的消息就返回FALSE,这里的情况是即调用DefWIndowProc处理了,又返回了false。

这个bug,最终解决只注释了一行代码,就是将DefWIndowProc的调用去掉。但是,问题却值得我们深思。这仅仅是一个系统升级造成的兼容性问题么?我们的代码里面还有多少这样的隐患呢?

经常看到有些代码,特别是windows 的消息处理上,胡乱return的情况很多。当时也许没有暴露什么问题,但是,迟早要还的。一份健壮的代码,对程序员来说是基本的要求。在400万用户的客户端软件中,我常常面对上传的各种崩溃dump文件苦笑不得。有很多时候,真的就是一个很小的问题啊。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值