开始之前,先奉上下载地址: MYUI界面库下载地址
(下载完成后,如果需要想学习MYUI的相关文章,请切换到 Branch_csdn_study 分支,我们将以此分支的代码作为讲解。如果直接在 master 分支进行讲解的话,将来版本迭代,可能出现代码跟文章对不上的情况)
大家下载后,直接编译运行即可。如果想在自己的项目中使用myui,可以使用源码集成(将源码直接拷贝到项目中并引用文件),或者使用常规编译 lib 或 dll 的方法引用即可。
MYUI 特性
界面库功能要求
以现在的开发需求来看,一款界面库的需要以哪些功能要求作为基础支撑呢?
一、提供基础控件类封装(class CContrlUI),让开发者可以从此基类继承开发出新控件
二、提供一个窗口类封装(class CWindow),该类负责对窗口功能进行管理
三、提供消息处理机制,实现的方式因人而异,MYUI的消息处理机制主要在CWindow类里面实现。
四、提供独立的渲染封装,将控件类的渲染动作与用户交互(键鼠消息)等动作分离
五、提供资源管理方案,因为传统的WIN32资源管理方案十分麻烦
六、提供 DPI 处理方案,让开发者能够根据 DPI 作出界面调整
以上是一些界面库开发的基本要求,大家想定制自己的界面库,可以以此为参考。
MYUI开发思想
MYUI 开发的核心思想是方便简单。因为当代计算机的运行速度越来越快,效率已经不是问题,用户端更加在意界面的美感,而开发者方面,由于很多界面设计方案已经成熟,所以开发者们更加在意界面开发的效率问题,希望在更短时间内开发出美观的界面。
而MYUI也贯彻落实了方便简单的概念。
可以看到,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 的相关介绍文章(持续更新中):