博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug
阅读量:6158 次
发布时间:2019-06-21

本文共 1042 字,大约阅读时间需要 3 分钟。

转载请说明出处,谢谢~~:

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

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

void CContainerUI::DoPaint(HDC hDC, const RECT& rcPaint)	{		RECT rcTemp = { 0 };		if( !::IntersectRect(&rcTemp, &rcPaint, &m_rcItem) ) return;		CRenderClip clip;		CRenderClip::GenerateClip(hDC, rcTemp, clip);		CControlUI::DoPaint(hDC, rcPaint);		//省略其余代码	}

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

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

void CContainerUI::DoPaint(HDC hDC, const RECT& rcPaint)	{		RECT rcTemp = { 0 };		if( !::IntersectRect(&rcTemp, &rcPaint, &m_rcItem) ) return;		++rcTemp.right;		++rcTemp.bottom;		CRenderClip clip;		CRenderClip::GenerateClip(hDC, rcTemp, clip);		CControlUI::DoPaint(hDC, rcPaint);		//省略其余代码	}


总结:

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

      我的Duilib库代码下载地址:

  Redrain  2015.5.7

你可能感兴趣的文章
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>
【论文阅读】Classification of breast cancer histology images using transfer learning
查看>>
移动端处理图片懒加载
查看>>
jQuery.on() 函数详解
查看>>
谈缓存和Redis
查看>>
【转】百度地图api,根据多点注标坐标范围计算地图缩放级别zoom自适应地图
查看>>
用户调研(补)
查看>>
ExtJS之开篇:我来了
查看>>
☆1018
查看>>
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>