《duilib之源码分析》
1 stdAfx.h
- *lengthof(x)计算数组长度宏
- *MAX两值最大
- *MIN两值最小
- *CLAMP(x,a,b)x在a,b之间则取x否则取最小
2 UIBase
- *UI_WNDSTYLE_窗口风格属性
- *UI_CLASSSTYLE_窗口类属性
- *TRACE(LPCTSTRpstrFormat,...)
- 功能-调试信息
- 参考-参考printf
- *TRACEMSG(UINTuMsg)
- 功能-将windows消息转化成其对应的宏名
- uMsg-Windows消息ID
- 返回值-宏名(字符串)
- *classSTRINGorID
- 功能-统一资源ID,字符串类型和整型统一输出为字符串类型
- *classCPoint
- 描述-点
- 函数-
- CPoint(LPARAMlParam)//将消息中lParam转化成点
- *classCSize
- 描述-矩形的宽和高
- *classCRect
- 描述-矩形区域
- 函数-
- voidEmpty()//设置left,right,top,bottom为零
- voidJoin(constRECT&rc)//合并两个矩形产生一个包含两个矩形的新的矩形
- voidResetOffset()//将矩形移动到left=0,top=0的位置
- voidNormalize()//调整left,right,top,bottom使之left<righttop<bottom
- voidOffset(intcx,intcy)//移动矩形,cx横向移动距离,cy纵向移动距离
- voidInflate(intcx,intcy)//放大矩形,cx左右各放大的大小,cy上下各放大的大小
- voidDeflate(intcx,intcy)//缩小矩形,cx左右各缩小的大小,cy上下各缩小的大小
- voidUnion(CRect&rc)//合并矩形,与Join()函数功能几乎一致,但对空矩形处理不同
- *classCStdPtrArray
- 变量-
- m_nAllocated//已申请空间大小(可储存Ptr的数量),如果空间不足则去reallocm_nAllocated*2的空间
- *classCStdString
- 实现-如果长度小于MAX_LOCAL_STRING_LEN(63)则在栈上分配,否则在堆上分配
- 函数-
- voidAssign(LPCTSTRpstr,intnLength=-1)//分配
- *classCStdStringMap
- 描述-字符串map
- 实现-使用times33哈希算法
- *classCWindowWnd
- 函数-
- 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,//onlyusedforreq_comp
- STBI_grey=1,
- STBI_grey_alpha=2,
- STBI_rgb=3,
- STBI_rgb_alpha=4
- [morethan]stb_image.cline100-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-zip入口点结构
- FindZipItem
- 功能-在zip包中查找项
- hz-HZIP
- name-项名
- ic-大小写敏感CASE_INSENSITIVE=1,CASE_SENSITIVE=2
- index-[out]序号
- ze-zip入口点结构
- UnzipItem
- 功能-解压项
- hz-HZIP
- dst-[out]解压后存储位置
- len-储存长度
- flags-标识(ZIP_HANDLE=1,ZIP_FILENAME=2,ZIP_MEMORY=3)
5 class CRenderClip
- *描述-区域引擎,设置在dc上绘制的区域,防止子控件绘制到父控件外侧(float属性控件除外)
- *实现-
- *函数-
- GenerateClip()//产生一个剪切区域,hDC窗口句柄,rc区域,clip[out]剪切区
- GenerateRoundClip()//产生一个圆角剪切区域,hDC窗口句柄,rc区域,width横向圆角弧度,height纵向圆角弧度,clip[out]剪切区
- UseOldClipBegin(()//使用整个活跃区域作为剪切区,hDC窗口句柄,clip剪切区
- UseOldClipEnd()//使用当前控件有效区域作为剪切区,hDC窗口句柄,clip剪切区
6 class CRenderEngine
- *渲染引擎
- *函数-
- LoadImage()
- 功能-加载图像
- bitmap-图像
- type-类型
- mask-隐蔽色
- 实现-
- 1读取文件,资源和zip包中图像文件数据到内存[通过HIWORD(bitmap.m_lpstr)区别从资源中或文件中加载MAKEINTRESOURCEThereturnvalueisthespecifiedvalueinthelow-orderwordandzerointhehigh-orderword.(frommsdn)]
- 2创建DIB
- 3通过stbi_load_from_memory加载数据文件并转化后复制到DIB中
- 4返回TImageInfo结构
- DrawImage()
- 功能-绘制图像
- hDC-设备句柄
- hBitmap-位图句柄
- rc-对象区域
- rcPaint-绘制区域
- rcBmpPart-位图区域
- rcConrners-拉伸区域
- alphaChannel-alpha通道
- uFade-透明度
- hole-居中
- xtiled-横向平铺
- ytiled-纵向平铺
- 实现-
- 1CreateCompatibleDC(创建内存设备句柄)
- 2SelectObject()(将位图选入内存设备句柄)
- 3AlphaBlend(alpha混合)
- 4BitBlt()orStretchBlt()(绘制到内存设备句柄)
- 5SelectObject()(将老的位图选入内存设备句柄)
- 6DeleteDC(释放内存设备句柄)
- DrawImageString()
- 功能-按标识字符串绘制图像
- hDC-设备句柄
- pManager-绘制管理者
- rc-对象区域
- rcPaint-绘制区域
- pStrImage-标识字符串
- pStrModify-标识字符串
- 实现-
- 1分析标识字符串获取属性
- 2获取图像数据
- 3绘制图像
- DrawColor()
- 功能-绘制矩形
- hDC-设备句柄
- rc-对象区域
- color-颜色(alpha,r,g,b)
- 实现-
- 如果不需要alpha混合则SetBkColor()ExtTextOut()
- 否则创建一个像素大小的32位DIB
- DrawGradient()
- 功能-绘制渐变
- hDC-设备句柄
- rc-对象区域
- dwFirst-颜色1
- dwSecond-颜色2
- bVertical-渐变方向true垂直false水平
- nSteps-步长[使用GradientFill()API时无效]
- 实现-
- 1渐变填充
- 2alpha混合
- DrawLine()-绘制直线
- DrawRect()-绘制矩形
- DrawRoundRect()-绘制圆角矩形
- DrawText()-绘制文字
- DrawHtmlText()
- 功能-绘制"mini-html"标识字符串
- hDC-设备句柄
- pManager-绘制管理者
- rc-对象区域
- pstrText-"mini-html"标识字符串
- dwTextColor-字符串类型
- pLinks-产生链接效果的区域组
- sLinks-产生链接效果的区域组数量
- nLinkRects-产生链接效果的区域组数量
- uStyle-类型,同DrawText()FormatFlags
- GenerateBitmap()
- 功能-产生一个BMP位图
- pManager-绘制管理者
- pControl-控件句柄
- rc-对象区域
- 返回-BMP句柄
7 class INotifyUI - Listener interface
8 class IMessageFilterUI - MessageFilter interface
9 class CPaintManagerUI
- *绘制管理者
- *函数
- Init()-初始化
- NeedUpdate()-
- Invalidate()-InvalidateRectAPI的封装
- GetPaintDC()-设备句柄相关函数
- GetPaintWindow()-得到窗口句柄
- GetTooltipWindow()-得到提示窗口句柄
- GetMousePos()-得到鼠标位置
- GetClientSize()-得到客户端区域大小
- 获取/设置窗口初始化时大小
- GetInitSize()
- SetInitSize()
- 获取/设置托腮大小
- GetSizeBox()
- SetSizeBox()
- 获取/设置标题区域大小
- GetCaptionRect()
- SetCaptionRect()
- 获取/设置圆角大小
- GetRoundCorner()
- SetRoundCorner()
- 获取/设置大小的最小限制
- GetMinInfo()
- SetMinInfo()
- 获取/设置大小的最大限制
- GetMaxInfo()
- SetMaxInfo()
- 设置透明度
- SetTransparent()
- 设置背景是否使用透明属性
- SetBackgroundTransparent()
- 获取/设置刷新区域属性
- IsShowUpdateRect()
- SetShowUpdateRect()
- 获取/设置应用程序对象实例句柄
- GetInstance()
- SetInstance()
- 获取可执行程序所在路径
- GetInstancePath()
- 获取/设置当前工作目录
- GetCurrentPath()
- SetCurrentPath()
- 获取/设置资源动态库句柄
- GetResourceDll()
- SetResourceDll()
- 获取/设置资源路径
- GetResourcePath()
- SetResourcePath()
- 获取/设置资源压缩包文件名
- GetResourceZip()
- SetResourceZip()
- 使用绘制管理者的根绘制管理者的资源设置-循环得到父绘制管理者直到找到最顶层的绘制管理者
- UseParentResource()
- 得到绘制管理者
- GetParentResource()
- 获取/设置非可用状态文字颜色
- GetDefaultDisabledColor()
- SetDefaultDisabledColor()
- 获取/设置默认字体颜色
- GetDefaultFontColor()
- SetDefaultFontColor()
- 获取/设置超链接默认字体颜色
- GetDefaultLinkFontColor()
- SetDefaultLinkFontColor()
- 获取/设置鼠标漂浮在链接上时默认字体颜色
- GetDefaultLinkHoverFontColor()
- SetDefaultLinkHoverFontColor()
- 获取/设置选中后背景颜色
- GetDefaultSelectedBkColor()
- SetDefaultSelectedBkColor()
- 获取/设置默认字体
- GetDefaultFontInfo()
- SetDefaultFont()
- 字体列表操作
- DWORDGetCustomFontCount()-得到字体列表中项数量
- HFONTAddFont(LPCTSTRpStrFontName,intnSize,boolbBold,boolbUnderline,boolbItalic)-加入一种字体到字体列表中
- HFONTAddFontAt(intindex,LPCTSTRpStrFontName,intnSize,boolbBold,boolbUnderline,boolbItalic)-加入一种字体到字体列表的指定位置
- HFONTGetFont(intindex)-按序号得到字体列表中的字体
- HFONTGetFont(LPCTSTRpStrFontName,intnSize,boolbBold,boolbUnderline,boolbItalic)-按字体属性得到字体列表中的字体
- boolFindFont(HFONThFont)-按句柄查找字体列表中的一项
- boolFindFont(LPCTSTRpStrFontName,intnSize,boolbBold,boolbUnderline,boolbItalic)-按属性查找字体列表中的一项
- boolRemoveFont(HFONThFont)-按句柄移除字体列表中的指定项
- boolRemoveFontAt(intindex)-按序号移除字体列表中的指定项
- voidRemoveAllFonts()-移除字体列表中的所有项
- TFontInfo*GetFontInfo(intindex)-按序号得到字体列表中项的属性
- TFontInfo*GetFontInfo(HFONThFont)-按句柄得到字体列表中项的属性
- 图片列表操作
- constTImageInfo*GetImage(LPCTSTRbitmap);
- constTImageInfo*GetImageEx(LPCTSTRbitmap,LPCTSTRtype=NULL,DWORDmask=0);
- constTImageInfo*AddImage(LPCTSTRbitmap,LPCTSTRtype=NULL,DWORDmask=0);
- boolRemoveImage(LPCTSTRbitmap);
- voidRemoveAllImages();
- 默认属性列表操作
- voidAddDefaultAttributeList(LPCTSTRpStrControlName,LPCTSTRpStrControlAttrList);
- LPCTSTRGetDefaultAttributeList(LPCTSTRpStrControlName)const;
- boolRemoveDefaultAttributeList(LPCTSTRpStrControlName);
- constCStdStringPtrMap&GetDefaultAttribultes()const;
- voidRemoveAllDefaultAttributeList();
- 将控件树附加到当前绘制管理者
- boolAttachDialog(CControlUI*pControl);
- 初始化控件把控件名称加入到绘制管理者的控件名map中
- boolInitControls(CControlUI*pControl,CControlUI*pParent=NULL);
- 重置控件
- voidReapObjects(CControlUI*pControl);
- 选项组操作
- boolAddOptionGroup(LPCTSTRpStrGroupName,CControlUI*pControl);-添加选项组
- CStdPtrArray*GetOptionGroup(LPCTSTRpStrGroupName);-通过名称得到选项组
- voidRemoveOptionGroup(LPCTSTRpStrGroupName,CControlUI*pControl);-移除选项组
- voidRemoveAllOptionGroups();-移除所有选项组
- 得到控件焦点
- CControlUI*GetFocus()const;
- 控件获得焦点
- voidSetFocus(CControlUI*pControl);
- 得到标签页控件
- boolSetNextTabControl(boolbForward=true);
- 定时器操作
- boolSetTimer(CControlUI*pControl,UINTnTimerID,UINTuElapse);-设置一个定时器
- boolKillTimer(CControlUI*pControl,UINTnTimerID);-清除一个定时器
- voidRemoveAllTimers();-清楚所有定时器
- 捕获鼠标
- voidSetCapture();
- 释放捕获鼠标
- voidReleaseCapture();
- 鼠标是否被捕获
- boolIsCaptured();
- boolAddNotifier(INotifyUI*pControl);-加入一个Listener
- boolRemoveNotifier(INotifyUI*pControl);-移除一个Listener
- voidSendNotify(TNotifyUI&Msg);-发送一个Notify消息
- voidSendNotify(CControlUI*pControl,LPCTSTRpstrMessage,WPARAMwParam=0,LPARAMlParam=0);-发送一个Notify消息
- boolAddPreMessageFilter(IMessageFilterUI*pFilter);-加入一个预处理MessageFilter
- boolRemovePreMessageFilter(IMessageFilterUI*pFilter);-移除一个预处理MessageFilter
- boolAddMessageFilter(IMessageFilterUI*pFilter);-加入一个MessageFilter
- boolRemoveMessageFilter(IMessageFilterUI*pFilter);-移除一个MessageFilter
- PostPaint控件操作
- intGetPostPaintCount()const;-得到PostPaint控件数量
- boolAddPostPaint(CControlUI*pControl);-加入PostPaint控件
- boolRemovePostPaint(CControlUI*pControl);-移除一个PostPaint控件
- boolSetPostPaintIndex(CControlUI*pControl,intiIndex);-设置控件到指定的序列位置
- 加入控件到延迟处理列表当中
- voidAddDelayedCleanup(CControlUI*pControl);
- 得到根控件
- CControlUI*GetRoot()const;
- 按照位置找到控件
- CControlUI*FindControl(POINTpt)const;
- 按父窗口和位置查找控件
- CControlUI*FindControl(CControlUI*pParent,POINTpt)const;
- 按名字查找控件
- CControlUI*FindControl(LPCTSTRpstrName);
- 按父窗口和名字查找控件
- CControlUI*FindControl(CControlUI*pParent,LPCTSTRpstrName);
- 消息循环
- staticvoidMessageLoop();
- 消息处理
- staticboolTranslateMessage(constLPMSGpMsg);
- 消息处理
- boolMessageHandler(UINTuMsg,WPARAMwParam,LPARAMlParam,LRESULT&lRes);
- 消息预处理
- boolPreMessageHandler(UINTuMsg,WPARAMwParam,LPARAMlParam,LRESULT&lRes);
- 回调函数-比较属性(pData)与控件(pThis)的属性是否相同
- staticCControlUI*CALLBACK__FindControlFromNameHash(CControlUI*pThis,LPVOIDpData);-按名称查找控件的回调函数
- staticCControlUI*CALLBACK__FindControlFromCount(CControlUI*pThis,LPVOIDpData);-计算控件数目的回调函数
- staticCControlUI*CALLBACK__FindControlFromPoint(CControlUI*pThis,LPVOIDpData);-按位置查找控件的回调函数
- staticCControlUI*CALLBACK__FindControlFromTab(CControlUI*pThis,LPVOIDpData);-查找下一个相应tab的控件
- staticCControlUI*CALLBACK__FindControlFromShortcut(CControlUI*pThis,LPVOIDpData);-快捷方式对应的控件
- staticCControlUI*CALLBACK__FindControlFromUpdate(CControlUI*pThis,LPVOIDpData);-查找需要刷新的控件
- staticCControlUI*CALLBACK__FindControlFromNameByParent(CControlUI*pThis,LPVOIDpData);-查找子控件
- HWNDm_hWndPaint;//绘制窗口句柄
- HDCm_hDcPaint;//绘制DC
- HDCm_hDcOffscreen;//屏幕兼容DC
- HDCm_hDcBackground;//背景DC
- HBITMAPm_hbmpOffscreen;//屏幕DIB
- HBITMAPm_hbmpBackground;//背景DIB
- HWNDm_hwndTooltip;//提示窗口句柄
- TOOLINFOm_ToolTip;//提示结构
- boolm_bShowUpdateRect;//是否更新
- //
- CControlUI*m_pRoot;//根控件指针
- CControlUI*m_pFocus;//获得焦点控件指针
- CControlUI*m_pEventHover;//鼠标停留控件指针
- CControlUI*m_pEventClick;//点击事件控件指针
- CControlUI*m_pEventKey;//相应键盘事件控件指针
- //
- POINTm_ptLastMousePos;//鼠标位置
- SIZEm_szMinWindow;//窗口最小限制
- SIZEm_szMaxWindow;//窗口最大限制
- SIZEm_szInitWindowSize;//初始化窗口大小
- RECTm_rcSizeBox;//托腮大小
- SIZEm_szRoundCorner;//圆角大小
- RECTm_rcCaption;//标题大小
- UINTm_uTimerID;//计时器ID
- boolm_bFirstLayout;//是否为第一层
- boolm_bUpdateNeeded;//是否需要更新
- boolm_bFocusNeeded;//是否需要焦点
- boolm_bOffscreenPaint;//是否绘制m_hDcOffscreen
- boolm_bAlphaBackground;//背景是否透明
- boolm_bMouseTracking;//是否追踪鼠标
- boolm_bMouseCapture;//是否捕获鼠标
- CStdPtrArraym_aNotifiers;//Listener列表
- CStdPtrArraym_aTimers;//计时器列表
- CStdPtrArraym_aPreMessageFilters;//预处理消息列表
- CStdPtrArraym_aMessageFilters;//消息处理列表
- CStdPtrArraym_aPostPaintControls;//PostPaint控件列表
- CStdPtrArraym_aDelayedCleanup;//延迟释放控件列表
- CStdStringPtrMapm_mNameHash;//控件名哈希列表
- CStdStringPtrMapm_mOptionGroup;//选项组列表
- CPaintManagerUI*m_pParentResourcePM;//当前绘制管理者的上一层绘制管理者(父绘制管理者)
- DWORDm_dwDefalutDisabledColor;//默认非可用状态字体颜色
- DWORDm_dwDefalutFontColor;//默认字体颜色
- DWORDm_dwDefalutLinkFontColor;//默认链接颜色
- DWORDm_dwDefalutLinkHoverFontColor;//默认鼠标漂浮时字体颜色
- DWORDm_dwDefalutSelectedBkColor;//默认被选择后背景颜色
- TFontInfom_DefaultFontInfo;//默认字体信息
- CStdPtrArraym_aCustomFonts;//字体列表
- CStdStringPtrMapm_mImageHash;//图片资源名哈希表
- CStdStringPtrMapm_DefaultAttrHash;//默认属性哈希表
- staticHINSTANCEm_hInstance;//应用程序对象实例句柄
- staticHINSTANCEm_hResourceInstance;//资源对象实例句柄
- staticCStdStringm_pStrResourcePath;//资源路径
- staticCStdStringm_pStrResourceZip;//zip包资源名称
- staticCStdPtrArraym_aPreMessages;//预处理消息队列
10 class UIMarkup -解析XML
- CMarkup()
- 功能-构造函数
- pstrXML-xml数据
- 实现-
- 初始化成员变量
- 调用Load()
- ~CMarkup()
- 功能-析构函数
- Load()
- 功能-加载xml数据
- pstrXML-xml数据
- LoadFromMem()
- 功能-从内存中加载xml数据
- pByte-内存数据指针
- dwSize-大小
- encoding-编码方式XMLFILE_ENCODING_UTF8(默认)XMLFILE_ENCODING_UNICODEXMLFILE_ENCODING_ASNI
- 实现-
- 进行编码转换
- 申请控件
- 复制数据
- LoadFromFile()
- 功能-从文件中加载xml数据
- pstrFilename-文件名
- encoding-编码方式
- 实现-
- 判断资源类型是否为zip包,如果为zip包则进行解压
- 调用LoadFromMem()
- Release()-释放xml数据和元素信息数据
- IsValid()-Markup是否有效
- SetPreserveWhitespace()-设置是否保存空白行
- GetLastErrorMessage()
- 功能-得到错误信息
- pstrMessage-[out]错误信息内容
- cchMax-信息长度
- GetLastErrorLocation
- 功能-得到出错位置
- pstrSource-错误所在位置内容
- cchMax-内容长度
- GetRoot()-得到根节点
- rivate:
- tagXMLELEMENT//元素结构
- {
- ULONGiStart;//在m_pstrXML中起始位置
- ULONGiChild;//子标签在m_pstrXML中的位置
- ULONGiNext;//同级下一个标签在m_pstrXML中的位置
- ULONGiParent;//上一级标签在m_pstrXML中的位置
- ULONGiData;//元素数据在m_pstrXML中的位置
- }XMLELEMENT;
- LPTSTRm_pstrXML;//xml数据
- XMLELEMENT*m_pElements;//元素列表
- ULONGm_nElements;//元素数量
- ULONGm_nReservedElements;//存储元素空间
- TCHARm_szErrorMsg[100];//错误消息
- TCHARm_szErrorXML[50];//错误内容
- boolm_bPreserveWhitespace;//是否过滤空白
- 解析xml数据
- bool_Parse();
- bool_Parse(LPTSTR&pstrText,ULONGiParent);
- 实现-
- for(;;)
- {
- 如果为顶层则返回
- 填充element
- 解析名字
- 解析属性
- 标签闭合方式
- 如果为/>则continue
- 如果为>则递归调用_Parse()
- 如果为该标签的对应闭合标签continue
- }
- XMLELEMENT*_ReserveElement();-申请保存元素空间
- 跳过空白
- inlinevoid_SkipWhitespace(LPTSTR&pstr)const;
- inlinevoid_SkipWhitespace(LPCTSTR&pstr)const;
- 跳过标识符
- inlinevoid_SkipIdentifier(LPTSTR&pstr)const;
- inlinevoid_SkipIdentifier(LPCTSTR&pstr)const;
- bool_ParseData(LPTSTR&pstrText,LPTSTR&pstrData,charcEnd);
- 功能-解析数据
- pstrText-被解析的数据字符串
- pstrData-解析后的数据字符串
- cEnd-终止字符
- 解析转义字符
- void_ParseMetaChar(LPTSTR&pstrText,LPTSTR&pstrDest);
- 解析属性
- bool_ParseAttributes(LPTSTR&pstrText);
- 记录错误信息返回错误
- bool_Failed(LPCTSTRpstrError,LPCTSTRpstrLocation=NULL);
11 class CMarkupNode
CMarkupNode
11 class CMarkupNode
- CMarkupNode()-构造函数构造一个空节点
- CMarkupNode(CMarkup*pOwner,intiPos)
- 功能-构造函数
- pOwner-CMarkup指针
- iPos-在xml数据中的位置
- IsValid()-节点对象是否有效
- GetParent()-得到父节点
- GetSibling()-得到兄弟节点
- GetChild()-得到子节点
- GetChild(LPCTSTRpstrName)
- 功能-按名字得到子节点
- 实现-循环查找所有子节点,直到名字匹配
- HasSiblings()-是否有兄弟节点
- HasChildren()-是否有子节点
- GetName()-得到节点对应的标签名
- GetValue()-得到节点对应的标签数据值
- HasAttributes()-是否有属性
- HasAttribute(LPCTSTRpstrName)-是否有名为pstrName的属性
- GetAttributeCount()-得到节点属性的数量
- GetAttributeName(intiIndex)-按序号得到属性名称
- boolGetAttributeValue(intiIndex,LPTSTRpstrValue,SIZE_TcchMax)
- 功能-得到属性
- iIndex-属性序号
- pstrValue-[out]属性值字符串
- cchMax-属性值字符串长度
- boolGetAttributeValue(LPCTSTRpstrName,LPTSTRpstrValue,SIZE_TcchMax)
- 功能-得到属性
- pstrName-属性名
- pstrValue-[out]属性值字符串
- cchMax-属性值字符串长度
- _MapAttributes()-解析xml属性建立属性名和值的表映射到xml数据的位置
- enum{MAX_XML_ATTRIBUTES=64};//属性最大数量限制
- typedefstruct
- {
- ULONGiName;
- ULONGiValue;
- }XMLATTRIBUTE;//属性结构
- intm_iPos;//节点在xml数据中的位置
- intm_nAttributes;//属性数量
- XMLATTRIBUTEm_aAttributes[MAX_XML_ATTRIBUTES];//属性-值映射xml位置列表
- CMarkup*m_pOwner;-CMarkup指针
12 class IDialogBuilderCallback - 构建UI时回调类 用于创造用户自定义的控件
- virtualCControlUI*CreateControl(LPCTSTRpstrClass)=0-创建用户自定义控件,pstrClass控件名
13 class CDialogBuilder - 构建UI
- CControlUI*Create();
- 功能-构建UI
- STRINGorIDxml-可以是一个内存xml数据或一个文件名
- STRINGorIDtype=(UINT)0-如果xml数据位于EXE资源中则type指定资源类型
- IDialogBuilderCallback*pCallback=NULL-回调函数
- CPaintManagerUI*pManager=NULL-绘制管理者指针
- 实现-
- 判断xml类型
- 加载xml数据
- 调用Create(pCallback,pManager)构建
- CControlUI*Create(IDialogBuilderCallback*pCallback=NULL,CPaintManagerUI*pManager=NULL);
- 功能-构建UI
- 实现-
- 得到顶层Window标签,并解析属性
- 调用_Parse()解析xml
- voidGetLastErrorMessage(LPTSTRpstrMessage,SIZE_TcchMax)const;-错误信息
- voidGetLastErrorLocation(LPTSTRpstrSource,SIZE_TcchMax)const;-出错位置
- CControlUI*_Parse(CMarkupNode*parent,CControlUI*pParent=NULL,CPaintManagerUI*pManager=NULL);
- 实现-
- for(循环顶级标签)
- {
- 按xml标签创建控件对象
- 如果不是标准控件则调用m_pCallback->CreateControl()创建用户自定义控件对象
- 如果有子节点则递归调用_Parse()
- 因为某些属性和父窗口相关,比如selected,必须先Add到父窗口
- 初始化控件默认属性
- 根据xml数据解析处理控件属性
- }
- CMarkupm_xml;//CMarkup对象
- IDialogBuilderCallback*m_pCallback;//构建控件回调
14 class CControlUI 控件
- GetName()-得到控件名称名称为控件的唯一ID
- SetName()-设置控件名称
- GetInterface()-得到控件指针
- GetClass()-得到控件类名
- GetControlFlags()-得到控件类型标志
- Activate()-控件是否活跃(非不可用状态,非不可见状态)
- GetManager()-得到绘制管理者
- SetMananer()
- 功能-设置控件的绘制管理者
- 实现-
- 设置控件管理者
- 初始化
- GetParent()-得到父控件
- GetText()-得到控件显示内容
- SetText()-设置控件显示内容
- GetBkColor()-得到背景色
- GetBkColor2()-得到背景色2
- SetBkColor2()-设置背景色2
- GetBkColor3()-得到背景色3
- SetBkColor3()-设置背景色3
- *背景色1,2,3用于渐变色颜色渐变过程为1->2->3
- GetBkImage()-得到背景图片
- SetBkImage()-设置背景图片
- GetBorderColor()-得到边的颜色
- SetBorderColor()-设置边的颜色
- GetFocusBorderColor()-设置获得焦点时边的颜色
- GetBorderSize()-得到边的宽度
- SetBorderSize()-设置边的宽度
- GetBorderRound()-得到圆角
- SetBorderRound()-设置圆角
- DrawImage()-绘制图片
- GetPos()-得到控件位置
- SetPos()-设置控件位置并重绘
- GetWidth()-得到控件宽度
- GetHeight()-得到控件高度
- GetX()-得到控件横坐标位置(左上点横坐标)
- GetY()-得到控件纵坐标位置(左上点纵坐标)
- GetPadding()-设置外边距,由上层窗口绘制(求周围控件离它远点或近点(负值,不过受绘制顺序影响,比较少用)
- SetPadding()-设置外边距,由上层窗口绘制
- GetFixedXY()-实际大小位置使用GetPos获取,这里得到的是预设的参考值
- SetFixedXY()-仅float为true时有效
- GetFixedWidth()-实际大小位置使用GetPos获取,这里得到的是预设的参考值
- SetFixedWidth()-预设的参考值
- GetFixedHeight()-实际大小位置使用GetPos获取,这里得到的是预设的参考值
- SetFixedHeight()-预设的参考值
- 设置大小的限制值
- GetMinWidth()
- SetMinWidth()
- GetMaxWidth()
- SetMaxWidth()
- GetMinHeight()
- SetMinHeight()
- GetMaxHeight()
- SetMaxHeight()
- SetRelativePos()-设置相对位置比例
- SetRelativeParentSize()-设置父控件大小
- GetRelativePos()-得到相对位置比例
- IsRelativePos()-是使用相对位置
- 获取/设置提示信息
- GetToolTip()
- SetToolTip()
- 获取/设置快捷键
- GetShortcut()
- SetShortcut()
- 获取/设置上下文菜单是否被使用
- IsContextMenuUsed()
- 获取/设置用户数据(字符串)
- GetUserData()
- SetUserData()
- 获取/设置用户指针
- GetTag()
- SetTag()
- 获取/设置控件是否可见
- IsVisible()
- SetVisible()
- SetInternVisible()//仅供内部调用,有些UI拥有窗口句柄,需要重写此函数
- 有窗口句柄的UI在设置不可见时,需要先失去焦点
http://blog.csdn.net/daoqin121/article/details/26234181