最近在做一个小玩具,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 hOldFont = (HFONT)::SelectObject(hDC, pManager->GetFont(iFont));
::DrawText(hDC, pstrText, -1, &rc, uStyle | DT_NOPREFIX);::SelectObject(hDC, hOldFont);

上面这段代码的绘制是有问题的,在gdi绘制api里,开发者需要自己处理alpha通道的问题,这里面说下去就是更复杂的一堆破事了,有兴趣的观众可以自行百度“gdi 文字透明”之类的关键词,或者直达

http://www.cnblogs.com/xzy1210/archive/2014/03/25/3622818.html

这篇文章比较入门,不过没实际测试不保证效果,我patch的代码涉及版权问题就不贴出了,虽然解决了绘制问题,但是其实效果非常差,因为duilib这一系列的东西都没处理好,要用好都得自己patch

随着对duilib的失望,我决定诚意转投web app,之前试过Electron,很赞,不过要和C++搭配非常麻烦,接下来开始研究cef

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

  1. qt char*转int_Qt在Linux下绘制文字原理-使用FreeType来绘制字形

    原文链接 Qt源码那些事儿-Qt绘制文字原理_使用FreeType来绘制字形​www.cryfeifei.cn 前言 Qt在Linux绘制字体是使用的FreeType. FreeType是一个用C语言 ...

  2. 关于canvas在retina屏下绘制文字或图像模糊的解决方案

    一.问题描述 最近在鼓捣canvas的时候,发现绘制在canvas上的文字(或图片)在retina屏幕上会出现显示模糊的问题,感觉很不爽,于是就Google了一番,还真发现了一个解决方案.有兴趣的同学 ...

  3. C++在WINdow桌面绘制文字图形

    // 获取一个可供画图的DC,我这里就直接用桌面算了HDC hdc = GetWindowDC(GetDesktopWindow());// 创建红色1像素宽度的实线画笔HPEN hpen1 = Cr ...

  4. 高清屏下canvas绘制文字模糊

    在浏览器的 window 对象中有一个 devicePixelRatio的属性,该属性表示了屏幕的设备像素比,即用几个(通常是2个)像素点宽度来渲染1个像素. 举例来说,假设devicePixelRa ...

  5. Android自定义View之Paint绘制文字和线

    Android自定义View系列 Android自定义View注意事项 Android自定义View之图像的色彩处理 Android自定义View之Canvas Android自定义View之轻松实现 ...

  6. js+html绘制文字居中,CreateJs系列教程之 EaselJs_2_绘制文字(Text)

    核心Js代码: var canvas, stage, w = window.innerWidth, h = window.innerHeight; function init() { //设置canv ...

  7. 【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )

    文章目录 一.文本边界坐标解析 二.绘图位置 一.文本边界坐标解析 在上一篇博客 [Android 应用开发]Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 ) 中 ...

  8. 微信小程序-canvas绘制文字实现自动换行

    微信小程序-canvas绘制文字实现自动换行 在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生 ...

  9. OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用

    基本绘图 目的 本节你将学到: 如何用 Point 在图像中定义 2D 点 如何以及为何使用 Scalar 用OpenCV的函数 line 绘 直线 用OpenCV的函数 ellipse 绘 椭圆 用 ...

最新文章

  1. FastReport的模板文件frx文件啊怎样打开并编辑修改
  2. 分布式锁编写及调试分析
  3. 数据库课程设计结论_结论
  4. java 持久_Java持久锁总结 -解道Jdon
  5. python线程的互斥锁
  6. python库--Numpy and pandas
  7. PHP安全,防止远程非法提交
  8. 中台做不好,就会成为“钟台”!阿里高管离职创业,这次会搞砸吗
  9. Windows核心编程_Miniblin(5) 前后端交互数据
  10. 匿名内部类使用外面的类为什么要用final型
  11. Atitit vue绑定json列表数据到表格最小简化培训版本 目录 1.1. 引入类库jq与vue 1 1.2. 获取ajax数据并推送到vue的内部自定义变量 1 1.3. 建立表格与vue变量
  12. Adobe CS5 序列号及配置方法
  13. SCARA、通用6轴机器人奇异点位置与问题分析
  14. 四级恋练有词课程 (10课时-朱伟)导学
  15. (HYSBZ - 4198)荷马史诗
  16. 2023年最新批量删除微博_新版微博怎么批量删除自己发的微博?
  17. Python 绘制五角星 【初识Python】
  18. 常见的web服务器有哪些
  19. 电子设计常识——阻抗
  20. iso转cue mac_mac如何播放cue文件?

热门文章

  1. 常用Linux性能检测命令
  2. jQuery入门与实战
  3. 如何利用Vue3管理系统实现动态路由和动态侧边菜单栏
  4. 多线程Retry: 解释
  5. 【毕业设计】 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化
  6. IPP简介及windows下安装说明
  7. Postfix配置QQ邮箱发邮件
  8. 给高科技强国的后来者埋下的痛
  9. CSS基本布局——grid布局
  10. 计算机文化学习笔记3