• duilib库分析4.第二篇UIBase


    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结构体指针
        
    CStdStringPtrMap
        x---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;通过下标获取字符串
        
        
    CWindowWnd
        x---HWND m_hWnd                         窗体句柄,初始化为NULL
        x---WNDPROC m_OldWndProc                Win32窗口过程,默认为DefWindowProc
        x---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()                      还原为之前的光标

  • 相关阅读:
    jquery动态生成html代码绑定事件
    jQuery中如何给动态添加的元素绑定事件
    JAVA基础面试(一)
    JAVA基础面试(二)
    JAVA面试之集合框架(三)
    JAVA基础面试(四4)
    JAVA基础面试(五5)
    JAVA基础面试(五)
    JavaWeb面试(六)
    JavaWeb面试(七)
  • 原文地址:https://www.cnblogs.com/blogpro/p/11427138.html
Copyright © 2020-2023  润新知