除虫记之十七(微软的低级错误)
我的机器用的是XP+SP2,前一段时间,自动更新下载了更新后,报告说,微软有什么正版增值计划,问是否安装云云,想了想,自己的系统安装后,就被我搞成了正版,那就安装吧。
搞成正版的方法见内
经过一系列的动作,不知道微软在搜集啥数据,反正,通过了正版验证,最后弹出来一个页面,上面列举了一系列的貌似只有正版才能使用的免费产品,选了几个下载,有农历、剪纸,还下载了一个桌面主题《名山2006》,安装完,感觉不错,这套主题的蓝宝石色的鼠标指针看上去挺酷的。
顺便说一句,我把下载下来的安装程序发给还没有变成正版的XP,也能安装。
这几天,在使用IG的时候,发现有一个怪现象,鼠标移动到一个自绘的关闭按钮的时候,会出现失灵的现象,关闭动作时灵时不灵的,刚开始的时候没在意,以为是自己确实没点到位置。但后来这种现象出现的次数多了,感觉应该不是这个原因,开始怀疑是不是鼠标又坏了?因为半年前,用的光电鼠标就坏了,左键单击会失灵,到内部运营换了一个新的鼠标来,用到现在。
但周末,推翻了这个结论,鼠标没有坏,因为我用触摸屏也发现了这个现象。
这问题就有点严重了,在我的机器上出现这种现象,在用户的机器肯定也有这种现象,到时候,这易用性也太差了。但为什么没有人反映有这么个bug呢?
开始研究这个现象的规律。
经过多次的实验,终于发现了规律,鼠标指针的热点在自绘按钮区域的上面2、3个像素以内,点击,就会出现关不掉的现象。这2、3个像素相对按钮也太小了,没有人发现应该也算正常。
规律找到了,就好办了。第一判断是,代码中对按钮客户区域的计算出了一点小的偏差。
周一,把这个bug和部门经理说了,他说没有这个问题啊,在他那儿好好的。
我到他的机器上测试了一把,很小心的把鼠标移动到3个像素以内,果然好使。
难道是我的版本问题?装一个最新版本。还是有问题。
难道是笔记本和台式机的问题?到另一个笔记本上测试,在人家机器上也好使。
难道是我RPWT?
突然间,灵光一闪,难道是我的桌面主题的原因?(这难得的灵光啊)
更换成XP默认主题,测试,没问题。再换回去,问题又有了。
立刻下了结论,这个主题下这个鼠标指针的热点不对,它的热点在指针箭的上面3个像素,如果在按钮区域下面3个像素内点击,肯定能关掉按钮。把鼠标指针移动到按钮区域外3个像素,果然验证了我的结论。
靠,微软这范这种低级错误?
用VC打开这个鼠标指针文件CMT06NS.cur,发现,箭头箭的坐标是(2,4),但hot spot在(0,0),kao,4个像素呐,kao,占我自绘按钮的1/3呐,不敢确认是微软的bug,打开同类的其他指针文件,别的指针的热点和箭头箭的坐标是一致的,就这个文件不一致。
至此,认为,这个应该是微软的bug。
把hotspot更改为(2,4),重新应用这套主题,那个现象没有了。搞定。