现在的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几乎没有研究。
不明白为什么这个回答会被踩,我寻思我的回答也不算没有帮助或有什么违规的地方吧?如果是题主踩的,那只能说没有交流的必要了.
编辑:
<body>...</body>
在没有子节点的情况下本来就支持<body />
的形式. 另外请注意你说的<body ... />
里的...
是节点属性而不是子节点内容;<
、>
吗?单就 WEB 前端领域都有 emmet 这样的工具可以通过div[tab]
(中括号表示按下该键)来输出<div></div>
. 少敲几个字现在并不是什么 特殊 的优势;最后重申一遍:我作为开发者,关心的是框架、库能不能提高我的效率,少打几个字符这种 IDE/编辑器能帮我搞定的我并不在意(就个人来说),我在意是否有/能接入现有的生态从而避免重复开发一些组件.
提一个场景:一个列表框,里面有一万到十万行的内容,每行内容有十几个到几十个列,这种情况下显然不能直接生成那么多行数去绘制,那么你的工具在这种场景下能提供什么样的帮助呢?
可以看看轮子哥的 Gaclib.
事实上这种东西虽然不能说烂大街但已经是很常见的思路了:用 XML 描述界面。
包括但不限于:
要知道我本职是 Java WEB 开发,但就 win32 平台 GUI 开发而言我也知道有上面那两个.
你的设计目前来说有一个问题:看不出在复杂界面下有什么显而易见的优势,相比起任何(可能需要装插件的)编辑器 都能格式化的 XML,你的语法会是一堆括号互相嵌套分不清主次.
你可以先试着用你的语法描述一个稍微复杂的界面:任意 App、网页、或者你熟悉的 native 应用. 看看你的语法的表现力是否如你预想的那样.