Duilib分析

DuiLib库 我们把它分为四个模块(核心,基础,控件,另外的库),当前有些也会把它分为5个模块(用户界面层,数据,事件处理,渲染模块,插件模块)

我们先讲下四个模块里包含了那些类
一.核心模块:UIMarkup(解析XML), CMarkupNode(节点),CRenderClip(渲染区域控制), CRenderEngine(渲染引擎), CPaintManagerUI(绘制管理者),IMessageFilterUI(消息处理),INotifyUI(监听者类),CDialogBuilder(UI构建者),IDialogBuilderCallback(用户自定义控件),CControlUI(控件), CDelegateBase(委托基类), CEventSource(事件源), CDelegate(委托), CDelegateStatic (静态委托)
二.基础模块:CPoint 点, CSize 宽高, CRect 矩形, CStdString 字符串, CWindowWind windows窗口, STRINCortID 资源ID, CStdStringMap 字符串map, CStdPtrArray 指针数组
三.控件模块:CEditUI 控件, CEditWnd 活跃窗口, CButtonUI 按钮控件, CLabelUI 标签控件, CScrollBarUI 滚动条控件, CSliderUI 滑块控件, CTextUI 文本控件, COptionUI 选项控件, CProgressUI 进度条控件, CTxtWinHost 文本窗口宿主, CRiochEditUI 富文本框控件, CActiveXUI ACtiveX组件, CActiveXWnd ActiveX窗口, CActiveXEnum 枚举ActiveX接口, CActiveXCtrl ActiveX容器, CComboWnd 活跃窗口, CComboUI Combo控件, CListBodyUI 列表体, IListCallBackUI 列表回调, IListOwnerUI 列表拥有者基类, IListUI 列表基类, CListUI 控件, CListHeaderUI 列表头, CListHeaderitemUI 列表头元素, IListitemUI 列表项基类, CListLabelElementUI 标签列表元素, CListTextElementUI 文本列表元素, CListContainerElementUI 器列表元素, IContainerUI 容器基类, CContainerUI 容器, CVerticalLayoutUI 纵向布局, CHorizontalLayoutUI 横向布局 CTileLayoutUI 平铺布局, CDialogLayoutUI 对话框容器, CTabLayoutUI 标签页容器。

四.其他库:XUzip 解压zip包, std_image 载入各种图像格式文件。

先讲一下核心模块里的类
1.CRenderClip 作用:渲染区域控制,设置在dc上绘制的区域,防止子控件绘制到父控件外侧(float属性控件除外)
函数:
GenerateClip() 产生一个剪切区域, hDC窗口句柄, rc区域, clip[out] 剪切区
GenerateRoundClip() 产生一个圆角剪切区域, hDC 窗口句柄, rcquyu, width 横向圆角弧度, height纵向圆角弧度, clip[out] 剪切区
UseOldClipBegin() 使用整个活跃区域作为剪切区, hDC窗口句柄, clip 剪切区
UseOldClipEnd() 使用当前控件有效区作为剪切区, hDC窗口句柄, clip剪切区
2.CRenderEngine 作用:渲染引擎
函数:
LoadImage() 加载位图
bitmap图像
type类型
mask隐蔽色
实现
1.读取文件,资源和zip包中图像文件数据到内存区,通过HIWORD(bitmap.m_lpstr)区别从资源中或文件中加载MAKEINTRESOURCE
2 创建DIB
3 通过stbi_koad_from_memory 加载数据文件并转化后复制到DIB中
4 返回TImageInfo结构

CRenderEngine 渲染引擎
LoadImage() 加载图像
bitmap 图像
type 类型
mask 隐蔽色
实现:
1 读取文件,资源和zip包中图像文件数据到内存, 通过HWORD(bitmap.m_lpstr)区别从资源中或文件中加载MAKEINTRESOURCE
2 创建DIB
3 通过stbi_load_from_memory加载数据文件并转化后复制到DIB中
4 返回TImageInfo结构

DrawImage() 绘制图像
hDC 设备句柄
hBitmap 位图句柄
rc 对象区域
rcPaint 绘制区域
rcBmpPart 位图区域
rcCorners 拉伸区域
alphaChannel alpha通道
uFade 透明度
hole 居中
xTiled 横向平铺
yTiled 纵向平铺
实现
1 CreateCompatibleDC 创建内存设备句柄
2 SelectObject 将位图选入内存设备句柄
3 AlphaBlend alpha混合
4 BitBlt 或者 StretchBlt 绘制到内存设备句柄
5 SelectObject 将老的位图选入内存设备句柄
6 DeleteDC 释放句柄
DrawImageString 标识字符串绘制图像
hDC 设备句柄
pManager 绘制管理者
rc 对象区域
rcPaint 绘制区域
pStrImage 标识字符串
pStrModify 标识字符串
实现:
1 分析标识字符串获取属性
2 获取图像数据
3 绘制图像
DrawColor 绘制颜色
hDC 设备句柄
rc 对象区域
color 颜色
实现
如果不需要alpha混合 则SetBkColor() ExtTextOut()
否则 创建一个大小的32位DIB
DrawGradient() 绘制渐变
hDC 设备句柄
rc 对象区域
dwFirst 颜色1
dwSecond 颜色2
bVertical 渐变方向 true垂直 false 水平
nStep 步长
实现:
1 渐变填充
2 alpha混合
DrawLine 绘制直线
DrawRect 绘制矩形
DrawRoundRect 绘制圆角矩形
DrawText 绘制文字
DrawHtmlText 绘制“mini-html”标识字符串
hDC设备句柄
pManager 绘制管理者
rc 对象区域
pstrText “mini-html” 标识字符串
dwTextColor 字符串类型
pLinks 产生链接效果的区域组
sLinks 产生链接效果的区域组数量
nLinkRects 产生链接效果的区域组数量
uStyle 类型
GenerateBitmap 产生一个BMP位图
pManager 绘制管理者
pControl 控制句柄
rc 对象区域

返回BMP句柄 

duilib是一个开源的C++图形界面库,它提供了丰富的控件和布局管理功能,以及良好的跨平台支持。下面我将对duilib的源码进行简要分析。 1. 基础架构:duilib的源码采用了模块化的设计,主要分为“Core”和“UI”两个部分。其中,“Core”模块是duilib的核心部分,提供了基础的窗口、消息循环等功能;而“UI”模块则提供了各种控件和布局管理等高级功能。 2. 控件类别:duilib提供了丰富的控件类别,包括基础的窗口类(如窗口、对话框)、容器类(如水平布局、垂直布局)、常用控件类(如按钮、文本框)、自定义控件类等。每个控件类都有相应的成员函数和消息处理函数,以便实现对控件的创建、设置属性和处理事件等操作。 3. 消息处理机制:duilib使用了消息映射的机制来处理控件的事件。每个控件类都有自己的消息映射表,用于将消息和相应的处理函数关联起来。当控件接收到特定的消息时,duilib会根据映射表找到对应的处理函数进行处理。 4. 布局管理:duilib提供了灵活且强大的布局管理功能,可以通过设置布局属性实现控件的自动适应和自动排列。布局管理器可以根据指定的规则对子控件进行自动布局,以适应不同的窗口尺寸。 5. 绘制引擎:duilib使用了自定义的绘制引擎来实现界面绘制。该绘制引擎可以根据控件的属性和状态来决定绘制的方式,以实现不同的视觉效果。 总结来说,duilib的源码分析涉及到基础架构、控件类别、消息处理机制、布局管理和绘制引擎等方面。通过深入研究这些内容,我们可以更好地理解duilib的设计理念和工作原理,以便能够更好地使用和定制duilib提供的功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值