- 79
- 0
我不认为自己智商有问题,有问题的是各种GUI,包括Java Swing以及所有的语言GUI库。这样,打击面似乎有点广。
我研究过Delphi,JavaSwing,WIn32API,MFC扫过一些程序,Python tkinter。即使是实现一些常见的功能都非常困难,不是做不到,而是缺乏系统的说明书,只能搜索相关键词,找相关的代码试验,某个类、方法的具体意义。
没错,就是乱试一通。网上有些蠢猪说你不会看文档吗?首先,英文的,大多看不懂或者一知半解,多数靠猜,我也不相信,有谁真能掌握所有控件灵活运用,因为目前GUI的设计确实反人类的,充斥着一堆垃圾设计。其次,文档太多,打印出来可能是一部字典那么厚,有哪个小学生造句需要通读字典呢?
虽然现在各种GUI库,各种系统、程序设计语言,但是毫不客气的说,它们都是垃圾;当然,那些用这些垃圾制造出实用、精美的软件的程序设计者是可敬的。
希望将来会出现这样一种GUI库,只需要掌握很少的概念 -- 比如某种组件(类),就能掌握该GUI的精髓,用户只要掌握不超过10个最多几十个函数就能组合出各种软件界面。
以我的标准,现在的GUI库确实都是垃圾,说明文档更是垃圾。我学的最好GUI,居然是html、CSS、JavaScript这一套网页设计标准。
我寻思着,把html这一套东西用于桌面软件开发难道是一件很难或者不可能的事情吗?理想情况下,我们把设计好的网页(由html css JavaSCript完成),然后在某个IDE里打开这这些文件,然后点击一个按钮,然后,原生的exe生成了,其显示和用浏览器打开一样!多么惬意!
只有这种GUI库或者叫框架,才是合格、勉强能算优秀的框架。
html、css、javascript之所以相对优秀,因为这三者是将页面排版和用户程序交互分离的开来,html负责排版、javascript则用于用户和各种控件的交互处理,而css似乎是用于自定义标签。
将来的GUI框架、库都应该有类似这样一套哲学:排版和交互的分离,Python等语言有流程、循环等控制结构,用于处理用户和程序的互动(鼠标、键盘操作),而页面布局,则应该专门设计一套类似html标签性质的东西。
实际上,这一套东西,并不是没有。Delphi里的窗体文件是类似的作用,但是很少用户懂得编辑窗体文件,毕竟,delphi为快速设计窗体开发,用户通过鼠标拖放控件来设计窗体。几乎没有人会教你直接编辑窗体文件来设计窗体。
很可惜,GUI设计是如此之难,而网页排版似乎又很容易,这很奇怪,不是吗?
上面说的把网页设计直接编译成exe过于理想化,但是,把html标签用到Java、C++、Python等各种程序设计环境中,似乎是可以做到的。
我希望,将来的GUI库,设计者,要认真严肃的考虑这个问题,就是直接支持html标签,或者支持其中的一个子集。html也是不断发展变化的。
总之,我这篇文章的意思其实前人都提过了,就是把排版(窗体界面设计)和程序设计(交互、功能)分离开来。
各种程序语言,并非用来设计排版的,而目前的GUI系统,以Swing为例,用了一个很原始的layout对象来定义“排版对象”不伦不类,勉强能用。
将来的GUI框架,首相应该开门见山,告诉你,我们这一套框架有两个组成部分:
一、窗体排版,实用类似html标签的方式。
二、交互设计。使用各种带if while等流程、过程式设计的程序设计语言。我不反对类、对象的使用,但是用户设计窗体界面时,不应该考虑这些问题。
总之,面向对象是个毒瘤,为什么GUI设计会如此之难,因为它们都被所谓的面向对象设计方法给毒害太深。也许是因为,它们没有给html这种控制页面起一个很好听的方法或者名字,才抛弃了这种优秀的设计,转而去搞那些不伦不类的垃圾。
我鼓励程序员制造优秀的GUI框架,因为目前的GUI框架,可能上百上千,但没一个能用的,只要记住一条,设计好排版系统,也就是设计好类似html这样的标签控制,你可以直接使用html标签,如果你能设计一套更为简单易懂的排版,我也支持 --- 但是出于现实考虑,大量懂得网页排版的前端,我认为直接使用html的一个子集作为GUI库的窗体排版(布局)比较好。
为什么BS架构比CS架构更为流行?也许是因为html比较人性化。倘若我上面所说类似html排版的GUI库能出现,那时候,使用用C/++或者Java做CS架构会更多。
GUI库,需要的并不是面向对象(封装、继承、多态),类似C这样的过程式程序设计语言,已经足够,GUI库需要的是一个简单易懂的窗体排版系统!
所以,我说,目前所有的GUI库,都是垃圾。其中,delphi的窗体文件设计、QT的QML勉强算是摸到门路了,但是还是太复杂,而且它们的目的就不对,它们是为了可视化设计,但是如果GUI设计的发展和html的发展一样,可视化设计窗体的方式将来也会消失。现在谁还用Fontpage、Dreamwaver设计网页 ?-- 这两都是所谓的所见即所得的设计软件。
实际上,有经验的人们都知道,所谓的所见即所得,是个彻头彻尾的谎言,因为不同的电脑,显示器大小是不一样的,你所见的网页,在另一台电脑、甚至同一台电脑不同的浏览器、即使相同的浏览器、不同的分辨率都可能是不一样的。并不存在所谓的所见即所谓,这是程序员们欺骗那些眼神不好,看东西不仔细的人编出的谎言,当然,乍一看,同一个程序在不同的电脑表现差不多。
Delphi里,几乎没有人会手动编辑窗体文件,很可惜,因为Delphi强调的是快速开发,本身就是为了鼠标拖放控件来设计窗体的,QT的QML也是这样。它们的理念是一种进步 -- 也就是将版面设计和交互流程分开设计。但是,它们错误的使用了所见即所得的设计方式,这是一颗毒瘤。
正确的设计方式是:使用屏幕分辨率坐标。Java Swing Delphi、Win32API都使用屏幕左上角作为(0,0)坐标,屏幕右下角坐标则是则是你的屏幕分辨率,除此之外,html/css还是用百分比坐标控制,比如你的UI里使用一个button,你也许可以指定按钮到屏幕左边的距离占整个屏幕宽度的30%,而不是指定分辨率,也许百分比的概念可能比屏幕分辨率更容易理解,这不一定。
- 共 0 条
- 全部回答
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
