DirectUI 最早见到时是拿spy++照microsoft的msn发现的,有人在论坛上抱怨说软件的mfc自己人都不用,其中就有举例说msn得directUI结构。其实我倒觉得,各有各的长处,directUI的设计初衷是去除窗口的概念,所有的元素都是逻辑上的窗口,而不是真正意义上有句柄的窗口。即这些元素都是直接在"父窗口"中绘制并响应事件。这个也不是什么新的思路,VCL中早就有这种实现,VCL的TControl和从TControl继承的类都可以响应事件,而从TControl继承的可以是无句柄的组件。所以看看VCL的设计,就大概知道一个无句柄的DirectUI该什么设计了。
     所有的大型网游客户端基本上都是DirectUI的方式来创建的,所不同的是,普通的应用程序的DirectUI方式界面库中如Edit,ComboBox,ListCtrl等复杂控件还是使用win32控件来创建的,其虚拟的只是Static,Button,progressBar等控件。而一些大型的游戏客户端可能这些元素可能也是自己处理。
    说说directUI的好处,没了句柄和窗口的概念,首先得一个好处是要做一些好的界面效果变得更加容易。举例来说在有窗口句柄时 要实现Static,Button等控件是见麻烦的事,Static还好说,win32有WM_CTRLCOLOR消息支持,可以做透明,Button或者别的控件就麻烦了,需要采用发消息给父窗口,让父窗口在子窗口的DC上先绘制,然后子窗口再绘制自己的TEXT。而在DirectUI下,这种效果简直太简单了,子元素只绘制自己的Text,那就是透明效果。这中情况下,很容易做出带底纹的,比较炫一些的界面。另一个好处就是一些效率问题,现在我们实际上处理的界面只有父窗口,如果我们实现皮肤换色,换肤等效果,效率要提高许多。实际上我们处理的界面或者说DC要少了很多,这样效率或者逻辑应该就相对简单了,同时对系统资源的占用也少了很多。

Q:

对于使用DirectUI的窗口,如何去找到他的“子窗口”的位置和其他“属性”(如果有的话)?

A:

是这样的,位置在DirectUI里肯定是一个区分消息分配的重要条件,但不是唯一条件。一般实现DirectUI的库里面都会采用配置文件或者XML来描述界面,这样程序在加载的时候实际上就已经得到了一个所有控件位置的表,而DirectUI中控件的属性肯定是自己根据需要来定义的,比如left,top,width,height,是否透明等。还是需要有个对象如DirectUIButton来和这个虚拟的对象绑定的。
   具体的你可以参考下现在QQ的版本,QQ的主窗体实现是一个DirectUI的方式,在皮肤目录下有个config.xml,还有个脚本文件.vbs 的VB脚本。
   这方面进来接触了些,有时间可能会做个比较完整的出来。

主要就是分割区域然后画了,至于他们怎么知道位置,很简单,里面有对象来处理这些,比如你的鼠标在(x,y)单击了一下,父窗口就会向所有的子对象(内部对象,没有Handle属性)转发这个消息,或者查找位于这个位置的最上层对象,然后转发消息给他,这样就可以做到那个对象响应这个消息了(和Button处理方式一样,只是没有句柄了,也不依赖以Windows来分发消息)。至于WM_Paint消息比较好处理,父窗口先将底色画好,然后就分发这个消息给所有子对象,子对象根据自己记录的位置和范围,在指定的Rect中画好自己的东西就可以了。
大致就是这样,虽然是很炫的玩意,但还是基于原来的技术的。

DirectUI相关文章(三)-DirectUI 设计思路分析相关推荐

  1. iOS-组件化 —— 路由设计思路分析

    iOS 组件化 -- 路由设计思路分析 一缕殇流化隐半边冰霜2017-03-01 10:48:3117066 原文 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各 ...

  2. iOS 组件化,插件化,模块化设计思路分析

    iOS 组件化,插件化设计思路分析 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,V ...

  3. Verilog 序列信号发生器的三种设计思路

    文章目录 前言 一.由移位寄存器构成 二.由移位寄存器和组合逻辑电路构成 三.由计数器构成 前言 在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件 ...

  4. 天津地铁出行线路规划项目需求分析与设计思路分析

    天津地铁出行线路规划项目需求分析与设计思路分析 项目概要 以下是天津地铁线路总图,本项目的受众可以通过本软件,获得天津市地铁出行最便捷,最快速的线路推荐. 需求分析 实现一个帮助进行地铁出行路线规划的 ...

  5. iOS 组件化 —— 路由设计思路分析

    原文 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构.更换适合业 ...

  6. 借助尾号限行 API 实现限行规则应用的设计思路分析

    引言 尾号限行是指根据车牌号的末尾数字,规定某些时段内不能在特定区域行驶,这是城市交通管理的一种措施.尾号限行政策的实施可以缓解城市交通拥堵问题,减少环境污染和交通事故等问题. 尾号限行 API 是一 ...

  7. iOS路由设计(四)路由设计思路分析

    http://www.jianshu.com/p/76da56b3bd55 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将Ap ...

  8. 育碧是如何做AI的? 《全境封锁》敌人AI设计思路分析

    2016年,Tom Clancy's The Division 将玩家们带到了饱受战火蹂躏的曼哈顿市区,并在此与各个派系的敌人和其他特工展开战斗.这款Ubisoft出品的RPG式射击游戏为了让玩家们时 ...

  9. 微服务架构下的自动化测试全链路设计思路分析

    背景 从 SOA 架构到现在大行其道的微服务架构,系统越拆越小,整体架构的复杂度也是直线上升,我们一直老生常谈的微服务架构下的技术难点及解决方案也日渐成熟(包括典型的数据一致性,系统调用带来的一致性问 ...

最新文章

  1. pdf怎么压缩大小?
  2. 把Cloud for Customer的attachment视图直接放到工作中心视图去
  3. Linux系统编程---18(线程池相关概念及其实现)
  4. 调用IOS邮件系统发送邮件
  5. Effective Java~34. 用enum 代替 int 常量
  6. 吴裕雄--天生自然 高等数学学习:平面及其方程
  7. spring @component的作用详细介绍
  8. cpu开机就是60℃_注意,制冷机组开机前这些检查很重要
  9. Java高阶入门N篇
  10. 系统学习NLP(十五)--seq2seq
  11. SpringBoot-配置文件创建Bean的过程
  12. 基于matlab的车牌识别系统的实现
  13. android微软雅黑字体,关于 Android 默认字体以及对比微软雅黑字体
  14. android 自定义消息,TUIKit Android自定义消息
  15. 使用Hbase Shell和Java API分别进行Hbase的增删改查操作
  16. Python从入门到数据分析第一篇—Python简介- Python介绍与初探
  17. 订单用户表2(用户名查询、手机号查询、选择城市、选择状态、选择月份、ID排序、添加数据、批量发货、批量删除、敏感字、修改数据)
  18. Linux代理服务器 Centos Nginx安装、反向代理配置、Nginx开机自启动及日志每天自动分割压缩
  19. 【四十六】Python全栈之路--bootstrap
  20. 游戏开发相关书籍推荐,简介

热门文章

  1. js学习笔记(1)什么是JavaScript
  2. 单元测试mock框架——jmockit实战
  3. $.ajax({});的各个参数的理解
  4. [译]C++ 协程:理解 co_await 运算符
  5. vivo手机部分log不打印
  6. csv文件——简单读操作01
  7. intellij HTTP状态 404 - 未找到_了解你的业务状态!使用 Nagios 打造专业的业务状态监控...
  8. python程序设计丁亚涛版_Python程序设计
  9. 管理信息系统【二】之 管理信息系统与组织变革
  10. 软件开发Share the Cakes