cUI 系列 -- 窗口绘制
一、背景
任何 UI 框架的基础能力:显示一幅 “图”。
这幅 “图” 的可能来源:静态图片, 动画帧,解码后的视频帧,亦或是 OSR 模式下 CEF3 渲染进程输出的页面帧等。
二、关键技术
解码
这里给出可选项:
- WIC: 微软提供的图像编解码框架,支持 BMP, JPEG,PNG, GIF, TIFF, ICO 等;
- Bitmap (C#): 基于 WIC。但是,仅支持解析 GIF 的第一帧。
- stb:三方插件,不支持矢量图 svg。
- skia: 三方插件,完美支持各式资源(位图, 矢量图,动画)。
本示例程序,使用 Bitmap 和 skia 实现了所有图片格式的解码。为侧重于渲染,skia 解码部分已删减。
渲染
这里给出可选项:
- GDI:底层API, 直接与硬件交互,更接近操作系统;
- GDI+: GDI 的封装与扩展;
- Direct2D: 同 opengl 和 vulkan, 充分利用 GPU 资源。考虑到兼容性,此部分会作为 cUI 框架的扩展功能。
本示例程序沿用更底层的 GDI 工具。这里给出 GDI 常用接口:
1 |
|
三、参考代码
基础实现
- 静态图片: 绘制功能;
动态图片: 绘制功能;基于 Timer 的按需刷新及缓存机制。
示例程序
该示例仅包含通用的 win32 接口和标准 thread 接口调用。
点我获取示例程序
四、其他
该系列后续示例程序,将会回归更简洁的开发语言 c/c++。 期待下一篇:桌面通知~
cUI 系列 -- 窗口绘制
https://jalencui.com/2025/10/12/cUI-windowpaint/