我有一个GUI系统的想法,不知道能不能找到投资人、开发、推广团队
现在的GUI设计非常复杂,实际上,GUI程序,可以分成好几个部分:一是图形界面部分,其次是交互,处理键盘、鼠标事件,第三可能则是程序背后的逻辑了,也许你的GUI程序是要看网络视频,或者本地文件。
我们的GUI系统主要解决第一和第二部分,也就是图形界面的描述、布局以及键盘鼠标处理函数。
至于第三部分,有各种相应的库,比如网络库,数学库,影视频解码库等等,不在我们的考虑之内。
一个界面描述文件大致是这样的:
(Window
(Id first)
(Click "Firstclick")
(Title "First Window")
(Top 100)
(Left 100)
(Width 100)
(Height 100)
(Image "D:\test.bmp")
(Text
(Top 100)
(Left 100)
(size 12)
(Caption "My name is zhang xiao ping")
)
)
)
(Window
(ID "Second")
(Click "SecondClick")
(Title "This is Second Window")
(Top 50)
(Left 50)
(Width 50)
(Height 50))
(Image "D:\test.bmp")
)
我们的库能简单调用一个函数读取该文件,当分析得到一个(window ...)时,就知道,用户想创建一个窗口,该窗口有最大化最小化按钮,top left width height分别表示左上坐标和宽度、高度。
然后,读到WIndow里有个(Text)就知道,要在Windows里写一个字符串,字符串内容、字体大小等信息都在(Text)里描述。
比较难一点的是控件的处理函数,也就是(Click "Firstclick"),每个控件都有一个处理函数,用于处理键盘和鼠标事件。
你的程序必须写好FirstClick来处理点击函数。这里问题也很多,单击、双击、滚轮滑动,键盘都要处理。如果不提供,则使用系统默认的处理函数 --- 最好是什么都不做。
我觉得,我的这一套系统非常容易理解,易于编程,强过市面所有的GUI库。其特点是:排版设计和程序设计要分开,类似于浏览器用html和javascript来处理页面排版和程序设计。
另外,到底哪些控件应该被实现非常值得商酌。Window,一个标准的窗口,Text,在窗口上画文本,这是少不了的,其余呢?需要慢慢打磨。
目前,我有一个基于json描述的C程序:
https://github.com/zhangyun00...
这个程序读取一个json文件,该文件描述窗口的布局,大致这样:
https://github.com/zhangyun00...
\[
{
"Name": "Window",
"ID": "First",
"Click": "FirstClick",
"Title": "First Window",
"Top": "100",
"Left": "100",
"Width": "100",
"Height": "100",
"Image": "D:\\test.bmp",
"Child": \[{
"Name": "Window",
"ID": "Sc",
"Click": "FirstClick",
"Title": "Second",
"Top": "50",
"Left": "50",
"Width": "50",
"Height": "50",
"Image": "D:\\test.bmp",
"Child": \[{
"Name":"Text",
"Caption":"My name is zhang xiao ping"
}\]
},{
"Name": "Window",
"ID": "three",
"Click": "three",
"Title": "The three Window",
"Top": "50",
"Left": "50",
"Width": "50",
"Height": "50",
"Image": "D:\\test.bmp"
}\]
},
{
"Name": "Window",
"ID": "Forth",
"Click": "SecondClick",
"T": "80",
"L": "70",
"W": "60",
"H": "30",
"Comments" : "Child中即使只有一项,也要用\[\]。"
}
\]
这里用json,是因为网上很容易找到开源的分析读取json文件的cpp库,而文章开头的()形式的语法分析,则要自己做 ---- 实际上,()语法分析更简单。
上面的C程序可以读取json文件,并创建显示窗口,窗口里又有两个窗口,目前的问题是,文本显示不出来。
等这套GUI系统完成后,程序设计者的主要工作变成了,如何编写这个“窗口描述文件”。实际上,编写这个窗口布局描述文件的过程非常像编写html,特别是文章开头的()语法,如果你把(Window ...)改成,<window> </window>,其实就是xml/html了,这两者形式不同,但是意义相等。
总之,网页设计师知道,编写网页时,html和Javascript可能各占一半,当我们的用户使用EasyGUI时,可能也是这样,一半时间用于设计窗口显示布局,另一半时间则是编写各种窗口处理函数...
早期网页设计也出现了各种“可视化工具”,但是这些工具都消失了,现在人们几乎都是手工编写html和javascript。可以预见的将来,GUI设计,特别是PC,Mac上的GUI设计,将来也是这种,可视化的窗口设计将会消失。手机上也许是个例外,毕竟我对手机GUI几乎没有研究。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不明白为什么这个回答会被踩,我寻思我的回答也不算没有帮助或有什么违规的地方吧?如果是题主踩的,那只能说没有交流的必要了.
编辑:
<body>...</body>
在没有子节点的情况下本来就支持<body />
的形式. 另外请注意你说的<body ... />
里的...
是节点属性而不是子节点内容;<
、>
吗?单就 WEB 前端领域都有 emmet 这样的工具可以通过div[tab]
(中括号表示按下该键)来输出<div></div>
. 少敲几个字现在并不是什么 特殊 的优势;最后重申一遍:我作为开发者,关心的是框架、库能不能提高我的效率,少打几个字符这种 IDE/编辑器能帮我搞定的我并不在意(就个人来说),我在意是否有/能接入现有的生态从而避免重复开发一些组件.
提一个场景:一个列表框,里面有一万到十万行的内容,每行内容有十几个到几十个列,这种情况下显然不能直接生成那么多行数去绘制,那么你的工具在这种场景下能提供什么样的帮助呢?
可以看看轮子哥的 Gaclib.
事实上这种东西虽然不能说烂大街但已经是很常见的思路了:用 XML 描述界面。
包括但不限于:
要知道我本职是 Java WEB 开发,但就 win32 平台 GUI 开发而言我也知道有上面那两个.
你的设计目前来说有一个问题:看不出在复杂界面下有什么显而易见的优势,相比起任何(可能需要装插件的)编辑器 都能格式化的 XML,你的语法会是一堆括号互相嵌套分不清主次.
你可以先试着用你的语法描述一个稍微复杂的界面:任意 App、网页、或者你熟悉的 native 应用. 看看你的语法的表现力是否如你预想的那样.
针对标签页,我们使用<tabview>标签,你的窗口描述大致是这样的 (这里便于阅读,我们使用xml描述)
总之,我们的任务是尽可能像html,因为html的使用者广泛。
实际上,我的这种()语法,其实是Lisp、Scheme语法,Notepad++ Sumblime Txt都支持多种程序设计语言,当然也支持()语法,也就是lisp和scheme。你只要把光标移动到一个"("或")"上,系统会高亮显示对应的另一半。这不是问题。
这里我强调的是,xml语法和lisp的()语法,完全等价,完全可以互相转换。也就是说,你的lisp程序完全可以用xml格式来写,多敲几个字;xml也完全可以转化成(),看起来不那么明显。
实际上,考虑众多的html网页开发者,我也是支持使用xml语法描述窗口的。
比如这个tinyxml,可能能为为我们所用:
http://www.grinninglizard.com...
我先折腾下这个,把上面的读取json的程序改成读取xml,做出了,让大家看一下。只要资金到位,人才到位,使用一个合适的开源xml解析库,我的这种设想,其实一步步来,很容易做到。绝对秒杀一切GUI。
至少,庞大的html网页设计者会使用,倘若我们的后端语言不仅仅支持C/C++,而且支持node.js,他们就会更喜欢了!我也会更喜欢。
楼主的回答不能说错,我也没工夫踩。不过你说的这些,作为GUI使用者,确实够了,实际上我用Delphi也够了。
但是,这不是不造轮子的理由,WPF不支持Linux GTK, QT的QML,用过的人都在抱怨代码描述混乱。
好吧,我不多说了。总之没有在追求的人总是满足于现存的各种垃圾。
你告诉我的那些,我10几年前就知道了。但是,有点追求的人还是应该造更好的轮子,哪怕世人愚昧。
确实CreateWindowEX只是稍微复杂一点,但是掌握这一套API能造出一套GUI的人却很少,否则为什么这么多年,一直都是垃圾GUI呢。特别是C++GUI库都这么垃圾呢。
并不是你会用这个创建一个窗口就算会用了,我们是在造GUI图形系统。
搞不清重点,呵呵。
我再多说一点,给你们上点课:
一个平台无关的描述,就好比html是在PCLinuxMAcOS 上都可以用,同一套窗口描述语言,你实际可以用各种程序设计语言来实现,也就说,我设想的这个东西,你可以用C/C++来实现,理论上,你用任何程序设计系统都能实现。
没有想像力的人是看不到这些的。
<body onload="fun()"> Hellow World<body>
这种语法和这种等价:
(body (onload fun) hello world)
再复杂一点,怎么写这段?自己思考。不要非要我把什么话和道理都说的明明白白,没意思。毕竟这不是,多么难的问题。
body的属性值和子节点都可以写进去,我说这个,是强调S表达式的表达能力和xml html相当,只是形式上不一样。而解析S表达式要比解析XML简单不不少,也许只需要1/3的代码量甚至更少,解析速度也会更快。
Linus就喷过xml是一坨crap,即不适合人类阅读,也并不适合计算机解析。这是事实,并不是偏见,除非你们质疑linus解析文本的编程功底差,解析不了xml吗?
好吧,要让人们也来搞GUI设计,确实有点为难你们,算了。你们忙自己的事情,转自己的钱就成,别来给我添乱就成。