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

简介: 转载请说明原出处,谢谢~~:       今天有朋友反映CTextUI控件无法设置宽度,于是修复了这个bug,顺便给Text控件增加了一个自动计算宽度的属性,描述如下       bug出现在EstimeteSize函数,...

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


      今天有朋友反映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库代码下载地址:点击打开链接


目录
相关文章
|
开发工具 Windows
关于 fatal error LNK1158: 无法运行“rc.exe” 的解决方法
关于 fatal error LNK1158: 无法运行“rc.exe” 的解决方法
关于 fatal error LNK1158: 无法运行“rc.exe” 的解决方法
|
JSON 前端开发 安全
CORS 是什么?它是如何解决跨域问题的?
【10月更文挑战第20天】CORS 是一种通过服务器端配置和浏览器端协商来解决跨域问题的机制。它为跨域资源共享提供了一种规范和有效的方法,使得前端开发人员能够更加方便地进行跨域数据交互。
使用QMovie类来实现在QT中的动态加载效果。
使用QMovie类来实现在QT中的动态加载效果。
725 0
【Qt】Qt定时器类QTimer
【Qt】Qt定时器类QTimer
399 0
|
安全 Go 网络安全
【Go语言专栏】Go语言中的HTTPS与TLS配置
【4月更文挑战第30天】本文介绍了在Go语言中配置HTTPS服务器和处理TLS证书的方法。首先,TLS证书由证书颁发机构(CA)颁发,用于验证服务器身份和加密通信。接着,展示了如何使用`crypto/tls`包加载自签名证书启动HTTPS服务器。在生产环境中,通常使用CA签名的证书,这需要获取证书链和私钥。为了自动续期证书,可以利用Go的`acme/autocert`包与ACME服务交互。掌握这些技能对于确保Web服务的安全至关重要。
1114 0
|
JavaScript 前端开发 网络架构
Vue基础-搭建Vue运行环境
这篇文章介绍了在Vue.js项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Vue及Vue CLI工具、安装webpack模板、安装vue-router、创建Vue项目等步骤。这篇文章为读者提供了清晰的指南,帮助他们快速搭建Vue.js开发环境,为后续的项目开发奠定基础。
562 0
Vue基础-搭建Vue运行环境
|
文字识别 算法 计算机视觉
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV图像处理
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV图像处理
609 1
|
JavaScript 前端开发 NoSQL
go embed 实现gin + vue静态资源嵌入
go embed 实现gin + vue静态资源嵌入
950 0
|
C++
RC5加密算法C++实现过程
RC5加密算法C++实现过程
291 0
|
缓存 数据可视化 定位技术
虚幻引擎UE4加载GIS数据《数字孪生&智慧城市》
😁🏆,在本文中,作者通过SuperMap对UE插件尝试了GIS数据的本地与离线导入,并详细介绍了环境配置流程,这也是为将来数字孪生城市的尝试!!!
1243 0