duilib之源码分析

本文详细分析了duilib的核心组件,包括UIBase、CWindowWnd、CRenderEngine等,深入讲解了窗口风格、消息处理、渲染引擎的功能与实现。此外,还介绍了第三方库stb_image和XUnzip的使用,以及如何加载和解压图像及zip文件。同时,文章探讨了duilib的图形绘制、图像处理、控件管理和消息传递机制。
摘要由CSDN通过智能技术生成
《duilib之源码分析》
1 stdAfx.h
* lengthof(x) 计算数组长度宏
* MAX  两值最大
* MIN  两值最小
* CLAMP(x,a,b) x在a,b之间则取x否则取最小


2 UIBase
* UI_WNDSTYLE_ 窗口风格属性
* UI_CLASSSTYLE_ 窗口类属性
* TRACE(LPCTSTR pstrFormat, ...)
   功能 - 调试信息
   参考 - 参考printf
* TRACEMSG(UINT uMsg)
   功能 - 将windows消息转化成其对应的宏名
   uMsg - Windows消息ID
   返回值 - 宏名(字符串)
* class STRINGorID
   功能 - 统一资源ID, 字符串类型和整型统一输出为字符串类型
* class CPoint
   描述 - 点
   函数 -
     CPoint(LPARAM lParam) //将消息中lParam转化成点
* class CSize
   描述 - 矩形的宽和高
* class CRect
   描述 - 矩形区域
   函数 -
     void Empty() //设置left,right,top,bottom为零
     void Join(const RECT& rc) //合并两个矩形产生一个包含两个矩形的新的矩形
     void ResetOffset() //将矩形移动到left=0,top=0的位置
     void Normalize() //调整left,right,top,bottom使之left < right top < bottom
     void Offset(int cx, int cy) //移动矩形, cx 横向移动距离, cy 纵向移动距离
     void Inflate(int cx, int cy) //放大矩形, cx左右各放大的大小, cy 上下各放大的大小
     void Deflate(int cx, int cy) //缩小矩形, cx左右各缩小的大小, cy上下各缩小的大小
     void Union(CRect& rc) //合并矩形, 与Join()函数功能几乎一致, 但对空矩形处理不同
* class CStdPtrArray
   变量 -
     m_nAllocated //已申请空间大小(可储存Ptr的数量), 如果空间不足则去realloc m_nAllocated*2的空间
* class CStdString 
   实现 - 如果长度小于MAX_LOCAL_STRING_LEN(63)则在栈上分配, 否则在堆上分配
   函数 -
     void Assign(LPCTSTR pstr, int nLength = -1) //分配
* class CStdStringMap 
   描述 - 字符串map
   实现 - 使用times33哈希算法
* class CWindowWnd
   函数 -
     RegisterWindowClass() //RegisterClass的封装
     RegisterSuperclass() //超类化窗口
  Subclass() //子类化窗口
     ShowModal() //窗口模态化
     ?MessageBox() //?UIBase.cpp 为utf8
     __WndProc() //消息处理函数
     __ControlProc() //超类化消息处理函数
  实现 - 
    duilib消息处理机制
   1 创建 - 通过CreateEx最后一个参数传递类指针this, 在消息处理函数中对WM_NCCREATE消息进行处理, 通过SetWindowLongPtr(GWLP_USERDATA) 进行保存
   2 消息处理 - 在消息处理函数通过GetWindowLongPtr(GWLP_USERDATA)得到其类指针, 调用虚函数HandleMessage()相应其他消息。
   3 销毁 - 消息处理函数中对WM_NCDESTROY消息进行处理, 调用原消息处理函数, 重置(GWLP_USERDATA), 调用虚函数OnFinalMessage()做最后处理。

3 the 3rd part stb_image
* 描述 - 载入各种图片格式文件
* 函数 -
     stbi_load_from_memory()
   功能 - 加载图片
   buffer - 内存数据
      len - 数据大小,
   x - [out]图像宽度(像素)
      y - [out]图像高度(像素)
   comp - [out]图像数据组成结果
   req_comp - 图像数据组成
     STBI_default = 0, // only used for req_comp
  STBI_grey       = 1,
  STBI_grey_alpha = 2,
  STBI_rgb        = 3,
  STBI_rgb_alpha  = 4

   [more than] stb_image.c line 100 - 130
     stbi_image_free()
   功能 - 释放已加载的图片数据


4 the 3rd part XUnzip
* 描述 - 解压zip包
* 函数 - 
     OpenZip
   功能 - 打开一个zip包
   z - 内存地址, 文件名, 文件句柄
   len - 长度
      flag - 标识(ZIP_HANDLE=1, ZIP_FILENAME=2, ZIP_MEMORY=3)
   return - HZIP
  CloseZip
    功能 - 关闭一个zip包
      hz - HZIP
  GetZipItem
    功能 - 从zip包中获取一项
    hz - HZIP
    index - 序号
    ze 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值