DUiLib 源码分析 ——以UiLib 1.01版为分析目标——colin3dmax 分析于2011-6-16 19:44
----------------------------------------------------------------------------------
分析约定:
private o------- 私有的成员变量或方法
protect x------- 受保护的成员变量或方法
public +------- 公开的成员变量或方法
----------------------------------------------------------------------------------本篇分析一下源文件
UIBase.h/UIBase.cpp
UILib的基础类的定义源文件
包括UI中常用宏的封装、代码调试宏、
绘图常用的各种数据结构,以及UILib中的窗体类等UI里的宏
窗体样式宏
+---UI_WNDSTYLE_CONTAINER 容器样式,无任何样式
+---UI_WNDSTYLE_FRAME UI标准框架窗体样式(标题栏、边框、图标、标题、最大、最小按钮、关闭按钮)
+---UI_WNDSTYLE_CHILD UI窗体子控件样式
+---UI_WNDSTYLE_DIALOG UI对话框窗体样式
扩展窗体样式宏
+---UI_WNDSTYLE_EX_FRAME 窗体客户区凹陷样式
+---UI_WNDSTYLE_EX_DIALOG 工具栏窗口样式+模式对话框样式
类样式宏
+---UI_CLASSSTYLE_CONTAINER 类容器样式
+---UI_CLASSSTYLE_FRAME 水平、垂直大小改变时绘制
+---UI_CLASSSTYLE_CHILD 水平、垂直大小改变时绘制、支持双击事件、保存窗体位图
+---UI_CLASSSTYLE_DIALOG 水平、垂直大小改变时绘制、支持双击事件、保存窗体位图ASSERT(expr) 判断表达式是否为NULL或FALSE
TRACE(LPSTSTR pstrFormat,...)在Debug输出窗口打印格式化字符串
TRACEMSG(UINT uMsg) 返回指定消息的16进制表示基础类
STRINGorID 用于构建资源名称或资源ID号x---LPCTSTR m_lpstr;+---STRINGorID(LPCTSTR lpString)+---STRINGorID(UINT nID)CPoint 点的封装类,支持LPARAM构建点+---CPoint();+---CPoint(const POINT& src);+---CPoint(int x, int y);+---CPoint(LPARAM lParam);CSize 大小封装+---CSize();+---CSize(const SIZE& src);+---CSize(const RECT rc);+---CSize(int cx, int cy);CRect 区域封装+---CRect();+---CRect(const RECT& src);+---CRect(int iLeft, int iTop, int iRight, int iBottom);+---int GetWidth() const 获取宽度+---int GetHeight() const 获取高度+---void Empty() 清空+---bool IsNull() const 是否为Empty,IsEmpty+---Join(const RECT& rc) 支持区域合并+---Normalize() 正规化(使得left<right,top<bottom)+---Offset(int cx, int cy) 区域偏移(移动)操作+---Inflate(int cx, int cy) 区域膨胀+---Deflate(int cx, int cy) 区域收缩+---Union(CRect& rc) 区域并操作CStdPtrArray 指针数组类x---LPVOID* m_ppVoid 数据指针x---int m_nCount 指针数量x---int m_nAllocated 内存已分配大小-----------------------------------------------------------------------+---void Empty() 清空记录+---void Resize(int iSize) 重新分配内存大小(注意:之前的记录丢失)+---bool IsEmpty() const 是否为空数组+---int Find(LPVOID iIndex) const 查询指定元素的索引号+---bool Add(LPVOID pData) 在指针集合中添加新数据+---bool SetAt(int iIndex, LPVOID pData)设置指定索引号处的新数据+---bool InsertAt(int iIndex, LPVOID pData)在指定的索引号处插入数据+---bool Remove(int iIndex) 移除指定索引号得数据+---int GetSize() const 获取指针数量+---LPVOID* GetData() 获取全部的数据+---LPVOID GetAt(int iIndex) const 查询索引号所对应的元素+---LPVOID operator[] (int nIndex) const支持[]查找元素CStdValArray 自定义数据长度数组类 x---LPBYTE m_pVoid 指针数据x---int m_iElementSize 元素大小x---int m_nCount 元素数量x---int m_nAllocated 当前分配的可用容量----------------------------------------------------------------------- +---CStdValArray(int iElementSize, int iPreallocSize = 0)指定元素大小,预分配数量 +---void Empty() 清空数据+---bool IsEmpty() const 是否为空数组+---bool Add(LPCVOID pData) 追加数据+---bool Remove(int iIndex) 移除指定索引号得数据+---int GetSize() const 获取当前保存元素的个数+---LPVOID GetData() 获取数据+---LPVOID GetAt(int iIndex) const 获取指定索引号处的数据+---LPVOID operator[] (int nIndex) const支持[]查找元素CStdString 字符串类x---LPTSTR m_pstr; 字符指针x---TCHAR m_szBuffer[MAX_LOCAL_STRING_LEN + 1];字符缓冲区----------------------------------------------------------------------- +---CStdString(); 初始化字符串类+---CStdString(const TCHAR ch); +---CStdString(const CStdString& src);+---CStdString(LPCTSTR lpsz, int nLen = -1);长度为-1由程序自己判断长度+---void Empty(); 清空字符串+---int GetLength() const; 获取字符串长度+---bool IsEmpty() const; 字符串是否为空串+---TCHAR GetAt(int nIndex) const; 获取指定位置处的字符+---void Append(LPCTSTR pstr); 字符串追加操作+---void Assign(LPCTSTR pstr, int nLength = -1);分配内存赋值+---LPCTSTR GetData(); 获取字符串指针+---void SetAt(int nIndex, TCHAR ch); 在指定索引处设置字符+---int Compare(LPCTSTR pstr) const; 字符串比较+---int CompareNoCase(LPCTSTR pstr) const;字符串忽略大小写比较+---void MakeUpper(); 字符串转换为大小+---void MakeLower(); 字符串转换为小写+---CStdString Left(int nLength) const; 从左边截取指定长度的子串+---CStdString Mid(int iPos, int nLength = -1) const;截取中间字符串+---CStdString Right(int nLength) const;从右开始截取指定长度的字符串+---int Find(TCHAR ch, int iPos = 0) const;从指定位置开始寻找匹配字符的位置+---int Find(LPCTSTR pstr, int iPos = 0) const;重指定位置开始寻找匹配字符串的位置+---int ReverseFind(TCHAR ch) const; 反向查询字符位置+---int Replace(LPCTSTR pstrFrom, LPCTSTR pstrTo);将匹配的字符子串用指定字符串替换+---int __cdecl Format(LPCTSTR pstrFormat, ...);最长63位的字符串格式化+---int __cdecl SmallFormat(LPCTSTR pstrFormat, ...);一次格式化1024长度的字符串格式化TITEM结构o---CStdString Key 键o---LPVOID Data 值o---struct TITEM* pNext 下一个TITEM结构体指针CStdStringPtrMapx---TITEM** m_aT; TITEM双指针x---int m_nBuckets; 容器容量+---CStdStringPtrMap(int nSize = 83); 构建字符串Map集合+---void Resize(int nSize = 83); 重新分配集合大小+---LPVOID Find(LPCTSTR key) const; 更具键查询字符串指针+---bool Insert(LPCTSTR key, LPVOID pData);插入数据+---LPVOID Set(LPCTSTR key, LPVOID pData);设置指定键的数据+---bool Remove(LPCTSTR key); 通过键移除数据+---int GetSize() const; 获取大小+---LPCTSTR GetAt(int iIndex) const; 获取指定索引处得字符串+---LPCTSTR operator[] (int nIndex) const;通过下标获取字符串CWindowWndx---HWND m_hWnd 窗体句柄,初始化为NULLx---WNDPROC m_OldWndProc Win32窗口过程,默认为DefWindowProcx---bool m_bSubclassed 是否子类化,默认为false--------------------------------------------------------------------获取窗口类名称,子类必须实现该纯虚函数o---virtual LPCTSTR GetWindowClassName() const = 0;获取父类名称,用以子类化o---virtual LPCTSTR GetSuperClassName() const;获得类样式o---virtual UINT GetClassStyle() const;消息处理函数o---virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);窗体销毁前最后的处理工作o---virtual void OnFinalMessage(HWND hWnd);窗口过程回调函数o---static LRESULT CALLBACK __WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);控件过程回调函数o---static LRESULT CALLBACK __ControlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);---------------------------------------------------------------------+---CWindowWnd();获取窗口句柄+---HWND GetHWND() const;获取窗口句柄+---operator HWND() const;注册窗口过程1.调用GetClassStyle获取样式信息2.调用绘图管理器的静态函数获取实例CPaintManagerUI::GetInstance()3.调用GetWindowClassName()获取要注册的类名称+---bool RegisterWindowClass();通过已存在的窗体作为父类注册窗口类+---bool RegisterSuperclass();窗口创建+---HWND Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle, const RECT rc, HMENU hMenu = NULL);创建窗口1.如果存在父类名,就用注册父类来创建2.不存在父类名,进行正常的窗口注册3.以上注册成功后,创建窗口+---HWND Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle, int x = CW_USEDEFAULT, int y = CW_USEDEFAULT, int cx = CW_USEDEFAULT, int cy = CW_USEDEFAULT, HMENU hMenu = NULL);窗口子类化+---HWND Subclass(HWND hWnd);卸载窗口子类化+---void Unsubclass();显示窗口+---void ShowWindow(bool bShow = true, bool bTakeFocus = true);显示模式窗口+---bool ShowModal();关闭窗口+---void Close();窗口居中,如果为子窗口,则居于父窗口的中央+---void CenterWindow();通过资源ID号设置图标+---void SetIcon(UINT nRes);发送UI同步消息+---LRESULT SendMessage(UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0L);投递UI异步消息+---LRESULT PostMessage(UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0L);调整客户区大小+---void ResizeClient(int cx = -1, int cy = -1);CWaitCursor 等待光标x---HCURSOR m_hOrigCursor 替换前光标+---CWaitCursor() 设置成等待光标+---~CWaitCursor() 还原为之前的光标
详细解决方案
DUiLib 源码分析——第二篇UIBase
热度:4 发布时间:2024-01-04 04:37:24.0