zoukankan      html  css  js  c++  java
  • DuiLib——第二篇UIBase

    ----------------------------------------------------------------------------------
    分析约定:
    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() 还原为之前的光标


    转自:http://www.cnblogs.com/wuqi924/articles/2127064.html

  • 相关阅读:
    mvc EF SQL语句
    Android自适应屏幕大小和布局
    6263=1 这个等式是错的,只移动一个数字(不能动符号)变成正确的等式
    public static const int A=1;这段代码有错误么?错了.常量不能标记为static
    jquery的ajax全局事件和AJAX 请求正在进行时显示“正在加载”
    visual studio中javascript脚本智能感应
    使用Windows API获取和改变当前显示设置
    IP Helper API 使用方法
    Rundll32.exe使用方法大全
    WIN32 API编程枚举系统显示器
  • 原文地址:https://www.cnblogs.com/jinsedemaitian/p/5589087.html
Copyright © 2011-2022 走看看