yang131

导航

GUI随笔

####GUI是一个很大的话题,从Win32(windows基础API编程)到MFC,QT再到DuiLib,WPF,Winform再到Html这是一个很漫长的路,下面是我对这个界面库的见解 就对我而言,或者说目测软件开发,工具开发以及游戏开发等,GUI分为系统提供的API,以及窗口内自绘制两种。但涉及到具体类型,包括工具类软件,报表类,图表类 网页类甚至音视频渲染,以及游戏开发等众多领域, 本人均有涉及,至少略懂一二。 此界面库使用了OpenGL,最主要的目的是一是想跨平台,二是很好的嵌入到图形引擎中做交互,在此基础上实现杂七杂八的技能。

win32 : 使用windows最基础的接口实现界面库编程,每一个Control比如Label,text,Button都有一个类ID,linux中有类似的GTK+,不过接口要比这个好用。
MFC : 微软的C++界面库,从CDialog到SDI再到MDI,一路做完,发现MFC的强大之处到现在没有什么界面库能随随便便替代,但是他的开发也是及其复杂,特别是对界面比较友好的那种,MFC需要各种自定义控件,而且有刷新的问题
DirectUI : duilib,也有其他的商业版本,Soui等,使用微软的GDI绘制,从XML解析,在c++中提供了比较灵活的界面开发方式。其中自身的消息循环是一大亮点(相比于win32)还有消息映射(Duilib也有采用)
QT : 在windows端底层都一样的,对其自身分为QT4,QT5, 高端点的也需要QSS甚至QML开发,使用信号槽的凡是完成各种功能,而且对MFC的各种功能都有封装,是一个不错的库,根据使用经验,QT4一般被人当做界面库的使用,qt5则是一个非常强大的闭合的qt帝国,非常完善的API。 Winform : MFC的c#版本,很多情况会有效率问题,相对于win32更强大,c#也是微软的主推语言,很多逻辑和底层MFC类似。
WPF : 使用MVVM开发的,做出的界面很炫酷,后面微软也提供了UWP等开发,属于windows端比较好用的一个界面库。XAML中加载界面思想和Duilib有着异曲同工之妙,自身使用style来控制样式有brush,storyboard做动画,以及Bind可以绑定元素,还有和ControlTemplate实现控件模板实现各种功能的自定义控件。 HTML : HTML网页开发,从最基本的js开始到Canvas绘制,再到JQuery,以及VUE,element,mint等的开发,前者比较基础类似操作xml,后者类似于WPF做各种控件,体现了业务的变迁
网页开发客户端提供浏览器适配所做的界面比如Electron(逻辑线程与渲染线程的分离,和CEF本身一样),Duilib的CefWebControl控件等。页面灵活如果需要新窗口就很难受

多媒体类: SDL :支持游戏开发和音频播放以及视频渲染(支持多种像素格式),简单的2d小游戏以及音视频播放,ffmpeg的音视频教程用的这个,用起来简单方便。
DX9 :可以用来渲染视频。完善的工具集合DirectUI.

游戏类: 引擎中常用的mygui,cegui等 这个没怎么了解
GWen (Renderer专门的接口用来适配不同API,其他控件的Renderer也采用这个),sfml,imgui等这一类使用多种图形API OpenGL,DirectX控制绘制,自身组装控件逻辑,而这个界面库采用该种设计方式。
UE 的GUI,slot框架做的还不错,以及事件分发机制等。自己的蓝图和界面设计器也是一大特色,比如绑定,描点,各种布局容器以及灵活的功能
Unity 的UGUI:还没了解
当然除了以上这些还有一些基于业务级别的框架比如:Flutter,一些工作流,但是c++封装完整的工作流,类似的有boost,搜狗的workflow以及Poco(我的一个http库很好的借鉴了Poco,他对http中url的解析封装做的不错)。

虽然有以上这么多界面库,设计成自己喜欢的界面库并不容易,需要对每一种界面库都要熟练,达到采百家之长的境界。

有兴趣的先对其他的界面库多熟悉熟悉,遇到优秀的比较有特色的设计或者用法和大家分享。

posted on 2022-12-21 15:02  NoNight  阅读(43)  评论(0编辑  收藏  举报