开始之前,先奉上下载地址: MYUI界面库下载地址
(下载完成后,如果需要想学习MYUI的相关文章,请切换到 Branch_csdn_study 分支,我们将以此分支的代码作为讲解。如果直接在 master 分支进行讲解的话,将来版本迭代,可能出现代码跟文章对不上的情况)

大家下载后,直接编译运行即可。如果想在自己的项目中使用myui,可以使用源码集成(将源码直接拷贝到项目中并引用文件),或者使用常规编译 lib 或 dll 的方法引用即可。

MYUI 特性

  1. MYUI采用原生WIN32 API 开发,接口和接口使用方面也积极参考 WIN32 窗口开发规范,目的是方便开发者学习与快速上手。
  2. Control 代码目录为已经实现的成品控件,ExtControl 代码目录为半成品控件(存在明显缺陷的控件)。关于控件属性设置,可参考 Attribute.xml 文件说明
  3. 支持拓展新的自定义渲染引擎。内置自实现的Me渲染引擎, Me引擎采用直接在内存位图进行渲染的方式,简单高效,并支持抗锯齿。
  4. 支持主题设置,字体,颜色,控件等,任意元素均可作为主题,可以在多个窗口中使用同一个主题风格。
  5. dpi 无感知模式。支持DPI 动态自适应,第三方开发者只需要关注100% dpi 比例即可。
  6. 支持资源打包,资源路径可以是一个文件夹,或者ZIP 压缩文件,也可以将ZIP文件添加到资源文件中进行访问。

界面库功能要求
以现在的开发需求来看,一款界面库的需要以哪些功能要求作为基础支撑呢?
一、提供基础控件类封装(class CContrlUI),让开发者可以从此基类继承开发出新控件
二、提供一个窗口类封装(class CWindow),该类负责对窗口功能进行管理
三、提供消息处理机制,实现的方式因人而异,MYUI的消息处理机制主要在CWindow类里面实现。
四、提供独立的渲染封装,将控件类的渲染动作与用户交互(键鼠消息)等动作分离
五、提供资源管理方案,因为传统的WIN32资源管理方案十分麻烦
六、提供 DPI 处理方案,让开发者能够根据 DPI 作出界面调整

以上是一些界面库开发的基本要求,大家想定制自己的界面库,可以以此为参考。

MYUI开发思想
MYUI 开发的核心思想是方便简单。因为当代计算机的运行速度越来越快,效率已经不是问题,用户端更加在意界面的美感,而开发者方面,由于很多界面设计方案已经成熟,所以开发者们更加在意界面开发的效率问题,希望在更短时间内开发出美观的界面。
而MYUI也贯彻落实了方便简单的概念。

  1. 代码使用,只需要直接引用代码即可(或编译成lib、dll),无需进行一些乱七八糟的编译配置,也无需声明一些额外的配置文件。(一些界面库在初次编译配置方面都要花费大量时间)
  2. 对于复杂的 DPI 处理,也提供了自适应方案,使开发者只需关注 100% dpi 的开发环境(目前大部分主流界面库还需要开发者在开发时额外进行 dpi 计算)。
  3. 在资源管理方面,可以只在代码中指定资源路径,无需再在资源文件中再次声明。
  4. 学习方便,因为尽量贴近了WIN32 的设计思想和用法,有WIN32基础就可以快速上手。(比如Close动作,有些界面库只能用class的 Close 函数才能正确关闭,原因是因为没有兼容系统特性,而MYUI不管是用 class 的Close 函数,还是系统的 WM_CLOSE 消息,两者都是同义操作,你可以在MYUI-API 和 WIN32-API 中自由切换)
  5. 内部对回调接口的设计尽量精简,开发者主要关心CWindowUI 对象的窗口回调和控件回调函数即可。(很多界面库的回调接口是各种类,由于类太多,开发者不知道回调接口的存在,也不知道接受某个事件应该继承哪个类)
  6. xml 声明支持文件嵌套与复用,这样就可以让开发者写最少的代码,却能轻易实现多个界面同一主题,或者多个控件同一特性的管理。

可以看到,MYUI 在致力于减少开发者工作量的同时,灵活性也很高。那MYUI的性能怎么样呢?额,MYUI的性能我没仔细测试过,但是肯定不会太差,而界面的性能指标,很大一部分来自于渲染。MYUI内部提供了多渲染引擎的接口支持,内部也提供了一款自实现的 Me(微)引擎。Me引擎十分的精小,实现原理是通过提取HDC的位图指针,直接对BITMAP结构进行填充,效率不容小觑。Me 引擎支持脏区域计算(发生了变化的区域),也就是说你可以把脏区域告诉Me引擎,Me内部进行渲染时,会跳过非脏区域的计算,大大节约效率。
其实也有人向我推荐过使用 SKIA 渲染引擎,但MYUI的定位只是常规界面(比如酷狗,QQ,360杀毒等),实在没必要接入如此庞大的渲染引擎。此外所谓多渲染引擎支持,只是听起来高大上,其实是内部提供的渲染方式还不够优秀的一个代替品。虽然Me引擎的渲染效率真的很高,但不得不承认目前它内部的渲染接口还不够丰富。(目前主流的界面库都存在渲染引擎不给力的问题)

而相比渲染引擎的实现,MYUI的控件查找算法,和属性设置,看上去就很矬了。控件查找算法用的是for循环查找,属性匹配时,用的是 if-else 语句进行长判断。其实这些算法要优化还是十分简单的,之所以被保留下来,是因为它们的阅读性好,暂时没发现对性能有所影响。
界面库性能这一块,我个人觉得真的没有必要进行极致的优化,因为它只是界面库而已,不是浏览器。而对于界面运行是否良好的判定标准,这里给大家提供一个冷门的知识点,就是当你的界面变化动作,能在七分之一秒(约140毫秒)内完成,用户就察觉不到卡顿。

demo与源码解释
文章开头处已经介绍,将分支切换到 Branch_csdn_study 直接编译即可,里面有一个基础 demo ,大家可以以此 demo 一步步跟踪展开 myui 源码的阅读。后续我也会不断完善 myui 的原理介绍和功能实现等文章。或许你实际的开发中未必会用到 myui ,但是我相信,myui 的功能实现和封装概念,让你对界面UI的深入理解,将非常有帮助!

下面贴一下 myui 的相关介绍文章(持续更新中):

MYUI的基本使用 - demo讲解

MYUI 界面库 (前言)相关推荐

  1. C#/.NET Winform 界面库推荐

    前言: winform在windows平台,一直以来没有好看完美的自定义界面库(wpf不属于winform),如何才能达到高度自定义的美化属性设置 出 媲美C++界面库的效果? CSkin界面库可以帮 ...

  2. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——代码结构(完)

    三年前,准备将金山界面库做一个全面的剖析.后来由于种种原因,这个系列被中断而一直没有更新.时过境迁,现在在windows上从事开发的人员越来越少,关注这块的技术的朋友也很少了.本以为这系列也随着技术的 ...

  3. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——资源读取模块分析

    按照软件的执行流程,我们首先遇到<以金山界面库(openkui)为例思考和分析界面库的设计和实现--问题>中提出的最后一个问题:界面描述文件的放置位置.我们曾提出一种方案:将界面描述文件打 ...

  4. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题

    随着物质生活的丰富,人们的精神生活也越来越丰富.人们闲暇的时间也相对变多,于是很多人就开始寻找打发时间的方法.其中电视便是其中一种非常重要的消遣方式.假如我们打开电视机,看到了一个电视台正在播一部我们 ...

  5. JQuery EasyUi之界面设计——前言与界面效果(一)

    为什么80%的码农都做不了架构师?>>>    如果冯巩的开场白是"观众朋友们,我想死你们了",那么我的开场白是"最近一直很忙,很久没有发文了" ...

  6. 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?

    20190809上面答案没提到的,个人认为好用的 1.LittlevGL LittlevGL 是一个开源免费(MIT许可)的GUI,支持触摸屏操作,移植简单方便,开发者一直在不断完善更新.Little ...

  7. Duilib界面库学习笔记

    1.Duilib的下载编译 由于一些事件google无法访问,托管在其上的项目也无法检出也基本无人更新,因此从第三方代码仓库同步下载代码, 地址如下: 1.https://github.com/Cod ...

  8. VC界面库BCGControlBar和Xtreme Toolkit详细对比评测

    概述:如今对软件界面的要求越来越高,如用Delphi.VS2008等开发底层的应用程序时,效率远不如VC++.虽然Visual Studio集成了一些MFC的类库,但是这些只是基础应用,并不能满足大多 ...

  9. 炫彩界面库使用方法问题记录

    1. 'ele_event' : undeclared identifier  'RegisterAll': identifier not found 在使用炫彩界面库时,如果遇到以上错误,一般是由于 ...

最新文章

  1. iOS开发之--解决 swap file “*.swp”already exists!问题
  2. win10输入法简体繁体切换
  3. button的OnClick与OnClientClick事件
  4. 微信小程序python_用python一步一步教你玩微信小程序【跳一跳】
  5. 关于RadUpload上传问题总结
  6. 计算机思维导论第二讲答案,大学计算机计算思维导论第2讲习题及解析
  7. matlab对函数时间抽样,信号与系统实验报告4 matlab时间抽样
  8. 安卓手机使用Tasker实现应用级功能,屏幕翻译v9,翻译复制贴图
  9. 算法:凸多边形最优三角剖分
  10. EZCast v2.8.0.1206
  11. SpringBoot Mybatis 读写分离配置
  12. ROSGazebo自定义多旋翼无人机仿真——环境搭建和模型建立
  13. CentOS7 安装 TomCat 7
  14. NIST的安全内容自动化协议(SCAP)以及SCAP中文社区简介
  15. 电脑故障排除方法(风扇转一下,马上就停,主板没有其它任何响应)
  16. parameterType的用法
  17. DOM JDOM DOM4J
  18. 从恶意程序对LNK格式的利用方法看防护趋势
  19. 2015华为校园招聘机试题一
  20. html简单个人网页制作——我的家乡——四川文化(4页) HTML+CSS+JavaScript 家乡主题HTM5网页设计作业成品

热门文章

  1. 那些重要的质量管理图表,你都掌握了吗?
  2. Linux中的18个tar命令
  3. java游戏开发入门(七) - 计时器
  4. 简述电子计算机的用途和特点_计算机作业答案
  5. 数据筛选特征方法-决策树法
  6. 使用maven构建ear工程
  7. BruteXSS漏洞测试工具
  8. 2019/10/17 05-文件对象的读写方法
  9. scrollTo平滑滚动
  10. [python学习笔记]loc与iloc函数的用法及区别