关于duilib在Layered Window下绘制文字不正常的BUG

本文介绍了在使用duilib时遇到的Layered Window下文字显示异常的问题,分析了duilib代码中对Layered模式文字alpha处理的缺失,并提及解决此类问题所需的GDI文字透明处理。此外,作者还分享了对duilib代码结构和使用体验的评价,表达了对其他UI库如Qt、GF和游戏引擎UI库的赞赏,并透露了因duilib的不足转向web app,如Electron和cef的研究计划。
摘要由CSDN通过智能技术生成

    最近在做一个小玩具,C++上面实在是没什么好用的或者轻量级的开源DUI库了,duilib算是比较出名的一个,不过这玩意好几年没人维护,之前据说pc微信也用过这个开发,所以有意试试。用了一段时间感觉,这玩意的代码结构确实够旧的,而且使用中也存在不合理的地方,比如所有的窗口都需要一个CPaintManagerUI来管理,这就很奇怪,用过Qt,用过游戏引擎里的UI库,也用过腾讯内部的GF和项目组里自己的引擎,哪个都比这玩意封装得好用,代码风格也漂亮,可惜没法拿出来用,每每想到这里就十分忧伤,我以后怕是不会再单独拿C++来做界面了,太累。

    牢骚完了,说一说遇到的小BUG,由于功能需求我得用半透明窗口,首先这玩意你需要调用CPaintManagerUI的SetLayered(true),这个没看到什么人提到,不过官方demo里是有的,不然你自己用windows api整半天都搞不对的。完成窗口半透明后,我绘制了一个全透明窗口,几个图片和空间,你会发现Text和Label里的文字显示不出来了,但是控件和图片的绘制完全OK。我一路找到CRenderEngine::DrawText,发现duilib没有对Layered下的文字alpha做处理,之前维护项目组内部界面库的时候有过研究,在Layered模式下

::SetBkMode(hDC, TRANSPARENT);

::SetTextColor(hDC, RGB(GetBValue(dwTextColor), GetGValue(dwTextColor), 
    GetRValue(dwTextColor)));
    HFONT 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值