[钦点]GUI误区若干
c++吧
全部回复
仅看楼主
level 15
幻の上帝 楼主
原主题问题大意是用C艹撸GUI怎么搞要看什么视屏……回了一番莫名其妙炸了,还搞得我FF崩溃。好在本来就是提纲作文范围内。
未经允许删贴问题秋后算账。
2017年07月08日 09点07分 1
level 15
幻の上帝 楼主
回复:
这里我也列个提纲,准备加入豪华午餐:
https://gist.github.com/FrankHB/00731fedf07b4ea271afa70a5cdc8d9d1.目的。
如果是上班,要你撸什么用什么,当然基本上靠视频都是低效做法。如果是瞎忽悠要你调研自己不清楚的东西还负责选型,出问题谁背?这样的单位趁早跑路。
如果是自己撸……没事撸毛GUI?还用C艹?
技术选型能力比起语言使用能力在这里很可能更重要。
2.所谓GUI。
三流科班和野路子出身的往往喜欢望文生义GUI=G+UI=G+U+I,结果把经典GUI成功的如WIMP metaphor比如全给扔了。不是说不能创新(比如说从桌面迁移当然应该有变化),但是一问三不知,是罪。
3.抽象层次。
这里着重需要婊的是所谓“立即模式”GUI(IMGUI)。说白了就是早年性能等限制导致的一个实现泄漏出来的抽象,近些年居然好意思开宗立派了……
对付这类玩意儿,一概同没有AST的辣鸡编译器一样论处。
(另一个要婊的是FRP和UI相关的倾向,但这个也坑着。)
这类玩意儿,倒不是说学了完全没用,一些时候也就是需要这样解决实际问题。但完全没基础的学这个就是毁三观的歪门邪道。
4.依赖。
首先,没法划清边界,无原则依赖具体实现的所有软件都是半吊子。GUI也不例外。需要拎出来说是因为历史原因造成了GUI不方便跨平台的错觉,而实际上只是因为有兴趣和耐心搞GUI框架的,大多对正常姿势的软件工程方法和码农手段一窍不通而已,自然上梁不正下梁歪。
这里需要着重婊的是凡学GUI先讲Win32的Win32中心主义(即便没有Win32外的跨平台需求)。实际上Win32的实现从ReactOS等途径扒出来就可以看到极其狼狈,而接口抽象设计上也是非常拙计。应用层实现不算C的辣鸡风格API的问题还有一大坨破事,比如WndProc加个void*会死?——这类烧饼问题基本上现代的其它解决方案都不会有。强行Win32能和其它方案同等质量地完成项目的确可以算是炫技,但另一方面在实现出来前,光是选型就是炫蠢了。
MFC为什么zz?主要原因也是类似,真正干活的几乎全是外包给Win32的。所以就学习而言MFC还不如Win32,即便项目做起来代码看起来没那么屎(但这也仅相对Win32而言)。架构嘛,Document-View的过气笑话也不值得浪费时间。至于CArray被吊打几条街之类的玩意儿就不提了,反正设计MFC的在非GUI的问题上往往更加外行。
所谓的DUI(Direct UI)是另一个典型反面教材的例子。DUI原本只是微软的某个实现中发明的架空HWND(Win32窗口句柄)的技巧,说白了是一种hack,结果莫名其妙被没见过世面的井底之蛙搬过来变成了架构创新层面的大煋闻。实际上,如果真按所谓DUI的精神,世界上的GUI从来都是DUI的,只不过实现了Win32之后HWND成了DUI的一个实现极烂的代理。会有这种错觉,主要原因恐怕就是上面所说的Win32中心主义,以及本身学习能力、眼界、想象力和品味太差,空有生产烂轮子的山寨水平这个原因了。
至于BCB这样(某种意义上包括整个所谓的RAD行业)的过气玩意儿,不予多评论(现在叫BCB的和VC6一样古董我就不多戳穿了)。就说一点:鼓吹BCB好转进C
#?那为什么不直接学C#
?
2017年07月08日 09点07分 2
重复抽风的删。
2017年07月08日 09点07分
level 15
幻の上帝 楼主
2017年07月08日 09点07分 4
level 15
幻の上帝 楼主
哦摩西罗伊。
怎丶样丶02月29日 19:46c++图形化界面怎么弄,有没有教学视频啊好难!! 删贴 小言seo 2017-07-0816:55
@小言seo 要求解释吧务操作适用条款。
EOF(插楼随意)。
2017年07月08日 09点07分 5
知道了,下次删看一下。
2017年07月08日 09点07分
@小言♬ 。@sunchy12345678 @萧の十三郎 误删恢复一下。
2017年07月08日 09点07分
回复 幻の上帝 :已恢复
2017年07月08日 09点07分
为什么把我给禁了
2017年07月08日 10点07分
level 12
深奥
2017年07月08日 09点07分 6
level 15
竟然不是坟
2017年07月08日 10点07分 8
level 9
我看这种文章还是太勉强了……
2017年07月09日 06点07分 9
level 14
非要用C艹写GUI的话,Qt是最好的选项了吧……
2017年07月10日 01点07分 10
看目的和资源。Qt只是勉强“能用”,因为一直有很多用户而持续维护,但质量嘛……对我来说直接撸个框架肛了Qt也没啥难度,虽然靠时间堆出来的涵盖的功能是没办法的不过也不会是重点。
2017年07月10日 11点07分
@幻の上帝 这么说的话,那只能是用C++写GUI库,而不是用C++写GUI了,最后还是得造轮子……
2017年07月10日 14点07分
@幻の上帝 误人子弟....
2017年07月11日 07点07分
@炮祺泡祺君 用C++写GUI的现在还没死的项目有几个不是造轮子?能继续往C++的方向造?Qt糊了moc不够还不是要造QML。
2017年07月11日 15点07分
level 13
搬凳子围观。
2017年07月10日 12点07分 11
level 7
gacui 最好了
2017年10月07日 15点10分 12
level 9
C++ Builder是什么?
  C++ Builder是基于可视组件技术和C++语言的快速应用程序开发工具。C++ Builder的前身是Borland C++,而Borland C++最早是Turbo C,在DOS界面编程的年代,对于每一个工科学生,几乎是无人不知。学习C++ Builder最常用的版本是C++ Builder 6.0,C++ Builder 2010等,最新的版本还支持iOS、安卓平台软件的开发。
  Windows是图形用户界面(Graphical User Interface)操作系统,标准的Windows应用程序也是图形用户界面的。传统上,SDK方式开发Windows应用程序的GUI界面是一个很繁琐的工作,界面相关的代码量甚至占到项目总代码量的一半以上,而且业务逻辑代码和界面相关的代码是混杂在一起的,难以扩展、重用和维护。
  C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面,利用可视的组件/控件像“搭积木”一样,以“所见即所得”的方式搭建应用程序的界面,这也是C++ Builder这个名字中Builder的概念。这样,只需要用C++语言编写业务逻辑代码,类似于DOS下文本界面编程,只要专注于实现业务逻辑功能就可以了,代码非常简洁。数据的输入和表现,都在图形用户界面,非常直观、易用。这就是RAD开发(Rapid Application Development,快速应用程序开发)。
  VCL是Visual Component Library的缩写,即可视组件库,它是Delphi和C++ Builder编程语言的基本类库。VCL以组件化、可视化为设计方向,是新一代的应用程序框架(Framework)。它拥有封装纯粹、可扩展性强、操作方便等特点。如果是一个非常繁杂的Win32 API,在经过VCL封装后,使用也是非常简便的。VCL对事件的支持及封装也是非常完整的,通过事件对象的声明,可以将任意的外部事件源绑定到VCL控件。
  在VCL类库中,窗体和每一种控件都是一个类,它们和基类(比如TObject、TControl、TWinControl类等)之间通过继承关系,共同组成了VCL类库,基类有一些共同的属性、方法和事件,控件类比如TButton(按钮类)继承了它的基类的属性、方法和事件,并增加了它自己的一些属性和方法。VCL中还有一些不可视的组件(组件(Component)概念上包括可视的控件(Control)和不可视的组件),比如TTimer(定时器)。VCL类库支持了C++ Builder的RAD开发。
  C++ Builder的VCL类库和Visual C++的MFC类库是同一个级别的概念,VCL比MFC出现较晚,在技术架构上领先了一代。它的PME架构(Property属性、Method方法、Event事件)也是VCL类库和RAD开发的基础。
书籍推荐:
《C++Builder 6程序设计教程(第二版)》 (陆卫忠,刘文亮 等编著 /2011-04-01 /科学出版社)(当当网)
《C++Builder 6编程实例精解》(赵明现),PDF,是数字版的,非扫描版的,里面还有一个俄罗斯方块游戏的完整实现。
《精彩C++Builder 6程序设计》(台湾 吴逸贤),里面有10几个简单小游戏的实现,可以自己看懂以后再重写,才是自己掌握的。
《C++ Builder 5高级编程实例精解》(刘滨 编著)都是较大的实用的程序。
2017年10月08日 01点10分 13
1