您现在的位置是:网站首页> 软件下载软件下载
DUILIB帮助文档下载-软件下载
2021-05-18
64人已围观
简介 DUILIB帮助文档下载-软件下载
DUILIB 整体框架 源码阅读
2. 组件与控件层模块;
3. XML 数据加载层模块
4. 渲染模块
2. 窗口过程在哪里定义, 如何修改窗口过程?
3. 如何加载XML , 加载的XML 数据放到哪个数据结构中.如何建立起关联的?
4. 界面元素 (控件) 是如何动态建立起来的?
5. 如何让控件与事件关联起来?
-> WinMain(入口函数)
-> CPaintManagerUI::SetResourceInstance (实例句柄与渲染类关联)
-> ::CoInitialize (初始化COM库, 为加载COM库提供支持)
-> new C360SafeFrameWnd (创建窗口类)
-> pFrame->Create (注册窗口类与创建窗口)
-> RegisterSuperclass (注册一个超类 即已有一个窗口类的基上再注册一个窗口类)
-> RegisterWindowClass (注册窗口类)
-> ::CreateWindowEx (创建窗口,此时触发 WM_CREATE 消息)
-> HandleMessage ( WM_CREATE消息处理OnCreate)
-> pFrame->CenterWindow (窗口居中显示)
-> CPaintManagerUI::MessageLoop (处理消息循环)
-> ::CoUninitialize(); (退出程序并释放COM库)
②:上面的流程图是一个基本的WIN32 程序框架,相对于 DUILIB 库,此时我们应关心的是窗口上的元素是如何建立起来的。这时我们应关心WM_CREATE的消息处理函数OnCreate的实现
-> C360SafeFrameWnd:: OnCreate
-> m_pm.Init(m_hWnd) (主窗口类与窗口句柄关联)
-> CControlUI* pRoot = builder.Create (加载XML并动态创建界面无素,与布局界面元素,核心函数 单独分析 注意:CDialogBuilder 并不是一个对话框类)
-> m_pm.AttachDialog (附加控件数据到HASH表中)
-> InitControls (初始化控件)
-> FindControl
-> __FindControlFromNameHash
->pManager->m_mNameHash.Insert(把控件插入到Hash中)
-> m_pm.AddNotifier 增加通知处理
③:接下来我们应关心的是XML的加载过程,及XML中的数是如何与窗口类进行关联的
-> CDialogBuilder::Create (加载XML文件)
-> m_xml.LoadFromFile
-> CMarkup::LoadFromFile (也可从资源文件中加载::LoadResource)
-> CMarkup::LoadFromMem (把外部XML数据加入到内存)
-> m_xml.GetRoot (获得XML 根结点, 开始解析XML数据)
-> "window" (解析根结点window下的三个公共元素属性)
-> "image" pManager->AddImage (加载设备无关位图并关联到图像HASH中m_mImageHash.Insert)
-> "font" pManager->AddFont (增加字体)
-> CPaintManagerUI::AddFont (增加字体 并关联字体数组m_aCustomFonts.Add)
-> "default" (增加默认属性 如:垂直滚动条和水平滚动条)
-> _Parse (解析具体的控件元素 动态生成控件元素)
-> node.GetName (跳过已经解析过的三个元素 "image" "font" "default")
-> _tcscmp (根据元素的名称 动态生成控件 "Edit" "List" "Text" "Combo" "Label" "Button" "Option" "Slider" "Control" "ActiveX" "Progress" "Container" "TabLayout" "ListHeader" "TileLayout" "DialogLayout" "VerticalLayout" "ListHeaderItem" "ListTextElement" "HorizontalLayout" "ListLabelElement" "ListExpandElement" "ListContainerElement" )
-> pContainer->Add(pControl) (增加控件)
-> m_items.Add (关联于控件数组中)
-> pControl->SetAttribute 设置控件属性
④ 上面的工作完成了XML 数据的加载,并动态生成了控件,把控件加载到了控件列表,建立了与控件相关的HASH 表 。接下来我们应关心的是控件如何显示在界面上的。
通过上面的源码,我们应关心几个核心类的关联:
->首先产生主窗口类:C360SafeFrameWnd ,
->在主窗口类中放置成变量 CPaintManagerUI m_pm; 与 控件绘制和消息处理关联起来
->CPaintManagerUI::MessageHandler WM_PAINT
->双缓存绘图
-> m_pRoot->DoPaint 绘背景图
-> CControlUI::DoPaint
-> CRenderEngine 真正的绘图类
-> pPostPaintControl->DoPostPaint 在背景图上绘制控件
->::BitBlt 把离屏视图画到主屏上
⑤ 当界面元素正常显示后,接下来我们应关心的是如何处理控件的事件
-> C360SafeFrameWnd:: HandleMessage (应用需要处理的消息及处理函数)
-> m_pm.MessageHandler (DUILIB 库帮我们处理的消息及相关的处理函数)
-> CWindowWnd::HandleMessage (应用层和 DUILIB都不处理的消息交由系统默认处理)
整体框架组件模块:
1. 层用层模块;2. 组件与控件层模块;
3. XML 数据加载层模块
4. 渲染模块
5. 具体数据模块PNG BMP ICO XML(界面布局数据)
问题导读:
1. 入口函数是什么?2. 窗口过程在哪里定义, 如何修改窗口过程?
3. 如何加载XML , 加载的XML 数据放到哪个数据结构中.如何建立起关联的?
4. 界面元素 (控件) 是如何动态建立起来的?
5. 如何让控件与事件关联起来?
6. 如何编写XML 文件?
一步一步源码阅读
①: 框架程序基本流程-> WinMain(入口函数)
-> CPaintManagerUI::SetResourceInstance (实例句柄与渲染类关联)
-> ::CoInitialize (初始化COM库, 为加载COM库提供支持)
-> new C360SafeFrameWnd (创建窗口类)
-> pFrame->Create (注册窗口类与创建窗口)
-> RegisterSuperclass (注册一个超类 即已有一个窗口类的基上再注册一个窗口类)
-> RegisterWindowClass (注册窗口类)
-> ::CreateWindowEx (创建窗口,此时触发 WM_CREATE 消息)
-> HandleMessage ( WM_CREATE消息处理OnCreate)
-> pFrame->CenterWindow (窗口居中显示)
-> CPaintManagerUI::MessageLoop (处理消息循环)
-> ::CoUninitialize(); (退出程序并释放COM库)
②:上面的流程图是一个基本的WIN32 程序框架,相对于 DUILIB 库,此时我们应关心的是窗口上的元素是如何建立起来的。这时我们应关心WM_CREATE的消息处理函数OnCreate的实现
-> C360SafeFrameWnd:: OnCreate
-> m_pm.Init(m_hWnd) (主窗口类与窗口句柄关联)
-> CControlUI* pRoot = builder.Create (加载XML并动态创建界面无素,与布局界面元素,核心函数 单独分析 注意:CDialogBuilder 并不是一个对话框类)
-> m_pm.AttachDialog (附加控件数据到HASH表中)
-> InitControls (初始化控件)
-> FindControl
-> __FindControlFromNameHash
->pManager->m_mNameHash.Insert(把控件插入到Hash中)
-> m_pm.AddNotifier 增加通知处理
③:接下来我们应关心的是XML的加载过程,及XML中的数是如何与窗口类进行关联的
-> CDialogBuilder::Create (加载XML文件)
-> m_xml.LoadFromFile
-> CMarkup::LoadFromFile (也可从资源文件中加载::LoadResource)
-> CMarkup::LoadFromMem (把外部XML数据加入到内存)
-> m_xml.GetRoot (获得XML 根结点, 开始解析XML数据)
-> "window" (解析根结点window下的三个公共元素属性)
-> "image" pManager->AddImage (加载设备无关位图并关联到图像HASH中m_mImageHash.Insert)
-> "font" pManager->AddFont (增加字体)
-> CPaintManagerUI::AddFont (增加字体 并关联字体数组m_aCustomFonts.Add)
-> "default" (增加默认属性 如:垂直滚动条和水平滚动条)
-> _Parse (解析具体的控件元素 动态生成控件元素)
-> node.GetName (跳过已经解析过的三个元素 "image" "font" "default")
-> _tcscmp (根据元素的名称 动态生成控件 "Edit" "List" "Text" "Combo" "Label" "Button" "Option" "Slider" "Control" "ActiveX" "Progress" "Container" "TabLayout" "ListHeader" "TileLayout" "DialogLayout" "VerticalLayout" "ListHeaderItem" "ListTextElement" "HorizontalLayout" "ListLabelElement" "ListExpandElement" "ListContainerElement" )
-> pContainer->Add(pControl) (增加控件)
-> m_items.Add (关联于控件数组中)
-> pControl->SetAttribute 设置控件属性
④ 上面的工作完成了XML 数据的加载,并动态生成了控件,把控件加载到了控件列表,建立了与控件相关的HASH 表 。接下来我们应关心的是控件如何显示在界面上的。
通过上面的源码,我们应关心几个核心类的关联:
->首先产生主窗口类:C360SafeFrameWnd ,
->在主窗口类中放置成变量 CPaintManagerUI m_pm; 与 控件绘制和消息处理关联起来
->CPaintManagerUI::MessageHandler WM_PAINT
->双缓存绘图
-> m_pRoot->DoPaint 绘背景图
-> CControlUI::DoPaint
-> CRenderEngine 真正的绘图类
-> pPostPaintControl->DoPostPaint 在背景图上绘制控件
->::BitBlt 把离屏视图画到主屏上
⑤ 当界面元素正常显示后,接下来我们应关心的是如何处理控件的事件
-> C360SafeFrameWnd:: HandleMessage (应用需要处理的消息及处理函数)
-> m_pm.MessageHandler (DUILIB 库帮我们处理的消息及相关的处理函数)
-> CWindowWnd::HandleMessage (应用层和 DUILIB都不处理的消息交由系统默认处理)
相关内容
- BMI体重指数计算器(FitTrack)下载V1.0 汉化绿色特别版-软件下载
- OpenGL ES 2.0编程指南下载中文版-软件下载
- 牛路客下载v3.0 免费安装版-软件下载
- 116个EXCEL统计报表模板打包下载-软件下载
- 多文件重命名(File Attribute Changer)下载1.1.1.61 官方版-软件下载
- 电机驱动L298N带光耦下载-软件下载
- aft3代引擎注册机全套下载免费版-软件下载
- DTD教程下载chm-软件下载
- iTextAsianCmaps.jar下载-TextAsianCmaps.jarireport打印PDF的亚洲字体包软件下载
- SQL参考手册下载chm-软件下载
点击排行
- ChrisPC Free Video Converter 影片视频格式转换 官方安装版 下载-
- 雷特视频TGA唱词生成系统 官方安装版 下载-
- All Recorder v1.8 录音软件 汉化特别版 下载-
- All Editor v2.4 录音软件 汉化修正版 下载-
- DebugMode FrameServer v2.7 Premiere 专用版帧服务器 中文安装版 下载-
- 视频编辑器 Free Video Dub v2.0.14.822 英文免费安装版 下载-
- EMDB(艾瑞克电影资料库) v3.0.9.0 绿色中文免费版 DVD收藏归类软件 下载-
- 宅男播放器 V3.0.0.0 宅男专用播放器 简体中文官方版 下载-


