----------------------------------------------------------------------------------

分析约定:

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

DuiLib——第二篇UIBase的更多相关文章

  1. duilib库分析4.第二篇UIBase

    DUiLib 源码分析 ——以UiLib 1.01版为分析目标 ——colin3dmax 分析于2011-6-16 19:44------------------------------------- ...

  2. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  3. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  4. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...

  5. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  6. 前端工程师技能之photoshop巧用系列第二篇——测量篇

    × 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...

  7. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  8. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  9. 第二篇.Bootstrap起步

    第二篇Bootstrap起步 我们可以在http://getbootstrap.com下载bootstrap的文件 点击左边的download bootstrap可以下载bootstrap的css,j ...

随机推荐

  1. 新发布GoldenGate 12c版本中的主要特性

        业界领先的实时数据集成工具GoldenGate现在可以帮助企业在传统数据库和云平台.大数据平台之间进行实时复制.新的OGG 12c支持更多的异构数据库和大数据平台,进一步提升可管理性和对混合云 ...

  2. (转)JS加载顺序

    原文:http://blog.csdn.net/dannywj1371/article/details/7048076 JS加载顺序 做一名合格的前端开发工程师(12篇)——第一篇 Javascrip ...

  3. A​n​d​r​o​i​d​ ​B​l​u​e​t​o​o​t​h​详​解(Android英文文档相关译文)

    一.Bluetooth Android平台包含了对Bluetooth协议栈的支持,允许机器通过Bluetooth设备进行无线数据交换.应用框架通过Android Bluetooth API访问Blue ...

  4. 浏览器关闭使session失效的问题多种解决方式

    直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈   如果用户不点击网站的“退出”链 ...

  5. php 数组 添加元素、删除元素

    拆分数组 PHP数组添加一个元素的方式: push(), arr[], Php代码 $arr = array(); array_push($arr, el1, el2 ... eln); 但其实有一种 ...

  6. E - Power Strings,求最小周期串

    E - Power Strings Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  7. 如何在UIAlertView中显示进度条

    今天这个问题是,在一个iPhone程序中,我要在后台做大量的数据处理,希望在界面上显示一个进度条(Progress Bar)使得用户了解处理进度.这个进度条应该是在一个模态的窗口中,使界 今天这个问题 ...

  8. 用中文把玩Google开源的Deep-Learning项目word2vec

    google最近新开放出word2vec项目,该项目使用deep-learning技术将term表示为向量,由此计算term之间的相似度,对term聚类等,该项目也支持phrase的自动识别,以及与t ...

  9. eclipse debug (调试) 学习心得

    eclipse debug (调试) 学习心得   进入debug模式:   1.设置断点   2.启动servers端的debug模式   3.运行程序,在后台遇到断点时,进入debug调试状态   ...

  10. Linux档案与目录的管理

    本篇随笔中,主要介绍在Linux环境下,与档案和目录的管理相关的一些命令使用,具体包括如下几个方面: 目录的相关操作:cd,pwd,mkdir,rmdir(rm) 档案与目录的查视:ls 复制.删除与 ...