《duilib之源码分析》
1 stdAfx.h
2 UIBase
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
4 the 3rd part XUnzip
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