duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性

Posted Redrain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性相关的知识,希望对你有一定的参考价值。

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


      今天有朋友反映CTextUI控件无法设置宽度,于是修复了这个bug,顺便给Text控件增加了一个自动计算宽度的属性,描述如下


<Attribute name="autocalcwidth" default="false" type="INT" comment="是否自动计算宽度"/>	

      bug出现在EstimeteSize函数,修复后的主要代码如下:


	SIZE CTextUI::EstimateSize(SIZE szAvailable)
	

		RECT rcText =  0, 0, m_bAutoCalcWidth ? szAvailable.cx : m_cxyFixed.cx, m_cxyFixed.cy == 0 ? 9999 : m_cxyFixed.cy;

		if( m_bShowhtml )    
			int nLinks = 0;
			CRenderEngine::DrawHtmlText(m_pManager->GetPaintDC(), m_pManager, rcText, m_sText, m_dwTextColor, NULL, NULL, nLinks, DT_CALCRECT | m_uTextStyle);
		
		else 
			CRenderEngine::DrawText(m_pManager->GetPaintDC(), m_pManager, rcText, m_sText, m_dwTextColor, m_iFont, DT_CALCRECT | m_uTextStyle);
		
		SIZE szXY = rcText.right - rcText.left + m_rcTextPadding.left + m_rcTextPadding.right,
			rcText.bottom - rcText.top + m_rcTextPadding.top + m_rcTextPadding.bottom;
		
		if (m_bAutoCalcWidth)
		
			m_cxyFixed.cx = szXY.cx;
		

		if( m_cxyFixed.cy == 0 ) m_cxyFixed.cy = szXY.cy;
		return CControlUI::EstimateSize(szAvailable);
	




      其中m_bAutoCalcWidth是新增的属性,新增的属性代码很简单,我就不贴了。

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

      我的Duilib库代码下载地址:点击打开链接


以上是关于duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性的主要内容,如果未能解决你的问题,请参考以下文章

duilib 修复padding属性导致其他控件自动计算宽高度错误的bug和导致自己宽高度错误的bug

duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug

duilib List控件,横向滚动时列表项不移动或者移动错位的bug的修复

duilib 修复combo控件打开下拉菜单后不会自动定位到上次选择的位置上的bug

duilib CDateTimeUI 在Xp下的bug修复

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