天天看点

duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug

        DuiLib的容器控件可以用bordersize统一指定边框宽度,也可以用rightbordersize、bottombordersize等属性单独指定某一个边框的宽度。但是rightbordersize、bottombordersize属性显示时存在问题,当给他们设置边框为1的时候是无法显示的,只有设置为2时才会显示。

        跟踪源码后发现是在CContainerUI的DoPaint函数里,存在问题:

          代码里的rcTemp是CContainerUI绘制的范围,边框最终会由CControlUI::DoPaint这句代码来绘制,在这之前调用了剪裁区域的函数给DC设置了剪裁区域,而GenerateClip的内部调用了CreateRectRgnIndirect函数,CreateRectRgnIndirect函数设置剪裁区域时会忽略掉右侧和底部的一像素,所以导致了这个问题。

         修复代码很简单,提前给rcTemp的右侧和底部增加一像素:

总结:

      bug的修复代码已经提交到我自己的Duilib库。

  Redrain  2015.5.7

继续阅读