飘荡软件--绿色软件下载站!

  • 软件大小: 555KB
  • 软件语言: 简体中文
  • 软件类别: 国产软件 | 其它书籍
  • 运行环境: 2000/Xp/2003/Vista/Win7
  • 授权方式: 免费版
  • 软件等级:
  • 更新时间: 2013/8/8 10:34:08
  • 开 发 商:
  • 分享到:
  • 立即下载
  • 一键复制
  • 收藏该软件

软件介绍:

    DUILIB 帮助文档

    DUILIB 帮助文档

    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都不处理的消息交由系统默认处理)



    关键字: DUILIB 帮助文档

相关说明

  • 如果您发现该软件不能下载, 请通知管理员
  • 为了保证您快速的下载,推荐使用[网际快车]等专业工具下载.
  • 为确保所下软件能正常使用,请使用[WinRAR v3.8]或以上版本解压本站软件.
  • 站内软件都是由网上收集,只供网友学习使用,如果所收集的软件侵犯了您的版权,请 来信 告知。