浅谈图形界面引擎开发 - 如何用 C++ 从零编写 GUI

本人在知乎上关于 如何用 C++ 从零编写 GUI? 问题的回答,算是比较粗浅的讲解了GUI引擎的一些开发心得

https://www.zhihu.com/question/24462113/answer/108810406

搬到csdn上保存一下

虽然高票答案回答的比较全面了,作为一个自主开发界面引擎多年的老司机,还是补充一下内容,同时show一下自己做得引擎和大家交流一下
本人前后做过三代HMI图形界面引擎, 从传统基于控件组织的GUI界面引擎,到现在移动平台使用的主流的支持各种动态效果的NUI(natural user interface)界面引擎。先上一个使用我的NUI界面引擎开发的产品例子视频,这是一个图形化的轻量级项目管理工具
Youku Universal Player
如下地址可以下载到这个软件的windows版本 NPlan项目管理软件 ,免费

我的图形引擎是C++语言开发,跨平台的,支持windows Linux android Mac IOS等主流系统
也就是基于本引擎开发的界面,不仅能在windows上运行,也可直接移植到其他平台,而应用层UI代码不变。
同时对于各种动态界面效果实现(要知道用Windows MFC来实现iphone创建的滑来滑去的界面,对于程序员是巨大的噩梦),也毫无压力,使用接口也很简单,不会比cocoa android java framework更复杂
知友可能有疑问:
1. 那同HTML5一样吗?
不一样,HTML5是解释型语言,写完源码各个平台就可以用,依赖各平台浏览器解释,我们用的是C++,不同平台需要重新编译。
2. android的UI是用Java写的,IOS是objectC,你这C++引擎能支持这两个平台? 吹牛吧
IOS的objectC完全兼容C++,可以理解为C++的升级,C++引擎使用完全没问题
android底层还是linux,C++代码可以在JNI下层运行,只需Java层进行一个封装即可
也就是说,你可以在windows平台把界面开发好,然后到其他平台编译运行,运行效果可以做到一致
3. 为什么要自己做引擎,现有的引擎不都很酷很好吗?
首先,同我们的业务有关,我们做车载设备软件,早期要面对各种各样的平台,wince,各种定制化嵌入式linux,qnx,不可能针对每个系统做一套UI,还有像
wince这种基本就没有带什么好图形引擎的系统,你说MFC?在那时的嵌入式设备其运行速度完全不能忍(CPU 200Hz)
唯一靠谱一点的跨平台图形界面引擎就是QT,嗯,这个商用的话,要钱,也不便宜
所以我开始自己写引擎,还真的从轮子和火重新搭建

再来谈谈题主的问题,如何用轮子和火搭建图形界面?

  • 轮子和火
    首先,我们看看轮子和火是什么。所谓图形界面,就是解决两个问题,“输入”和“输出”
    “输入”就是用户通过键盘,鼠标,触摸屏 定制设备按钮等各种硬件装置进行的输入操作,通过这些设备的驱动,最后被操作系统转化为各种事件消息,图形界面要响应并管理好这些消息;
    “输出”就是显示,让用户看到的内容,图形界面最终要在屏幕上显示出来,需要操作系统提供这个接口,本质还是显示芯片的驱动提供这个功能。不考虑效率的话,给个画点的函数就够了。但画点肯定太慢,所以一般会是一个拷屏的上屏操作,用缓冲防止闪烁;

“获取输入消息”,“输出上屏”,这两点就是图形界面的“轮子”和“火”。两个方式都依赖操作系统提供的接口,而且不同操作系统的接口也不定相同,甚至同一操作系统也有不同的方法实现。对于跨平台图形界面引擎,这两部分的基本代码是不跨平台的,针对不同平台会有不同实现,但是这两部分代码不会很多,封装的好也不影响上层开发。

轮子和火都具备了,那么怎么着手搭建一个图形界面引擎呢。


  • 图形引擎和基本库
    首先要说明的是,虽然经常说图形界面引擎,但界面
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值