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

转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/45560943

        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

时间: 2024-08-02 09:41:44

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

duilib 修复CTreeViewUI复选功能判断不准确的bug

转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42265209         CTreeViewUI里面自带了复选的功能,但是复选功能存在bug:         1)当一个分组下面存在子项时,子项被手动全选后,分组的复选框没有自动变为选中状态                   2)当一个分组下面存在子项时,当所有子项都取消选中状态时,分组的复选框还是选中状态                分组的CTreeNodeU

U盘图标显示错误的修复方法

  U盘图标显示错误的修复方法          你遇到过当U盘连接电脑时,在"我的电脑"里的U盘图标竟然跟普通文件夹一样,就算用杀毒这些工具也没有用,不用担心,试一下介绍的以下这种方法: 依次点击"开始","所有程序"," 附件","记事本". 然后把以下的源代码拷到记事本里: @echo off @echo +------------------------------------------+ @ec

sql语句如何将三张表所有要的属性显示

问题描述 sql语句如何将三张表所有要的属性显示 SQL大神指教指教,谢谢! 表一:XS Sno Sname Sex birthday Pid class department (表一属性) 表二:CJ Sno Courseno Score (表二属性) 表三:KC Courseno Coursename credit (表三属性) 要求:"用相关查询语句"查询选修课程号为"xx" 的学生的相关信息 解决方案 select XS.Sno, Sname,Sex, bi

magento -- 修改代码让后台属性组合里的属性显示中文

Magento后台属性组合管理里的各个属性显示的是属性的code,也就是说,即便给每个属性加上了中文的标签(label),这里显示的依然是大片的英文,对一个不懂技术的后台管理者来说,这样多的英文时他们不愿意看到的,所以要想办法变一下.   打开/app/code/local/Mage/Adminhtml/Block/Catalog/Product/Attribute/Set/Main.php文件,找到几个用来显示的代码,替换成如下所示 public function getGroupTreeJs

ListViewItem的Text属性显示不全

问题描述 使用ListView控件展示数据时,在SmallIcon视图下显示的各个ListViewItem项的Text属性显示不完整,有的少字,有的不少?怎么让Text显示完整. 解决方案 解决方案二:设置长度固定的字符串格式如果1个是123456另1个123那么...补齐,或者截断显示也可以,点击链接可以查看明细!解决方案三:引用1楼fox123871的回复: 设置长度固定的字符串格式如果1个是123456另1个123那么...补齐,或者截断显示也可以,点击链接可以查看明细! 问题是同样四个汉

Win7系统属性显示的可用内存和安装的内存不一致什么情况

笔记本随机的Windows 7系统安装了2G的内存,但是在计算机属性显示安装2.00GB可用为1.00GB,如何解决?    1.WIN+R快捷键打开运行输入Msconfig,选择引导--高级选项,如下图:    2.在引导高级选项里面取消最大内存前面的勾选,点击确定,重启电脑问题解决.

Win7磁盘图标显示错误怎么办?

  电脑的常见故障,除了硬件外,就是软件.如果软件系统上的分区都出现异常,可是吓坏了不少刚入手电脑的人.其实,磁盘图标显示错误,并不一定就是你的电脑中毒了,可能是平时的不正当操作导致的.本次,小编就为大家详细演示修复分区磁盘图标异常教程. 故障描述图片如下: 操作方法: 1. 鼠标右键点击"计算机"选择"管理",调出"计算机管理"窗口,选中"磁盘管理". 2. 由于我们是D盘,我们右键单击D盘,选择"更改驱动器符号和

android-日历显示错误的日期和时间

问题描述 日历显示错误的日期和时间 final Calendar c = Calendar.getInstance(); Toast.makeText(alarm.this, " "+c.DAY_OF_MONTH+ " " +c.MONTH+ " " +c.YEAR , Toast.LENGTH_LONG).show(); 这个代码显示05-02-01的日期,而不是今天的日期(17-04-2013).这是什么错误呢? 解决方案 你显示的不是当前的

SwipeRefreshLayout中ListView 显示错误

问题描述 SwipeRefreshLayout中ListView 显示错误 求解答啊,在线等. 解决方案 哪里显示错误,说出来 解决方案二: 不显示错误,只是超出屏幕的哪一个item不显示 解决方案三: 你在listview中加一个margin属性试试 解决方案四: 不会呀,我用过的,没有这个情况呀,你把布局贴出来看看 解决方案五: 解决方案六: 这是什么布局,主布局还是item的布局 解决方案七: 你加我qq1062091703我在帮你看看