我有一个GUI系统的想法,不知道能不能找到投资人、开发、推广团队

发布于 2022-09-12 03:00:43 字数 2955 浏览 19 评论 0

现在的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

可爱暴击 2022-09-19 03:00:43

不明白为什么这个回答会被踩,我寻思我的回答也不算没有帮助或有什么违规的地方吧?如果是题主踩的,那只能说没有交流的必要了.


编辑:

  1. <body>...</body> 在没有子节点的情况下本来就支持 <body /> 的形式. 另外请注意你说的 <body ... /> 里的 ... 是节点属性而不是子节点内容;
  2. 在现代开发环境下,有 IDE/编辑器的支持你真的需要每次都手打 <> 吗?单就 WEB 前端领域都有 emmet 这样的工具可以通过 div[tab] (中括号表示按下该键)来输出 <div></div>. 少敲几个字现在并不是什么 特殊 的优势;
  3. 我回答中并不是说只能用 xml 来描述界面,我说的是这种思路并不是什么新鲜东西;
  4. 为什么大家用 xml?因为你要允许用户自定义扩展组件,当某个组件只希望暴露特定的属性或有额外的自定义属性时,xml 这种载体能很好的适应. 我相信你的语法或许也能提供这样的能力,但我只是在告诉你一件事:这种做法大家已经用了很多年了.
  5. win32 createWindow(Ex) 这东西真没你想得那么少人会,你可以搜搜关键字 windows 自绘. win32 上窗口应用麻烦的地方不在于如何描述界面,而是如何高效率的绘制组件:计算可重绘区域、计算各 DPI 下的组件区域、避免嵌套组件间的事件冲突. 如果你提供的工具仅仅用于 描述界面,那么为什么要舍弃 Qt、WPF 这些成熟、已有生态、提供了高效率自定义组件的框架呢.
  6. 举一个小栗子,腾讯 QQ 的密码输入框,在几年或者十几年前,使用的系统自己的 msg_queue 来处理字符输入事件,导致 spy++、全局键盘监听 hook 这类工具都能获取到密码,后来腾讯为了搞定这个事情,自己额外做了一些逻辑,那么这种情况下你该如何允许代码接管 msg_queue 呢?
  7. 补充:当然,出于性能考虑,现在越来越多的应用开始直接用 DirectX 来绘制界面了,毕竟能显卡加速.

最后重申一遍:我作为开发者,关心的是框架、库能不能提高我的效率,少打几个字符这种 IDE/编辑器能帮我搞定的我并不在意(就个人来说),我在意是否有/能接入现有的生态从而避免重复开发一些组件.

提一个场景:一个列表框,里面有一万到十万行的内容,每行内容有十几个到几十个列,这种情况下显然不能直接生成那么多行数去绘制,那么你的工具在这种场景下能提供什么样的帮助呢?


可以看看轮子哥Gaclib.

事实上这种东西虽然不能说烂大街但已经是很常见的思路了:用 XML 描述界面。

包括但不限于:

要知道我本职是 Java WEB 开发,但就 win32 平台 GUI 开发而言我也知道有上面那两个.

你的设计目前来说有一个问题:看不出在复杂界面下有什么显而易见的优势,相比起任何(可能需要装插件的)编辑器 都能格式化的 XML,你的语法会是一堆括号互相嵌套分不清主次.

你可以先试着用你的语法描述一个稍微复杂的界面:任意 App、网页、或者你熟悉的 native 应用. 看看你的语法的表现力是否如你预想的那样.

只是在用心讲痛 2022-09-19 03:00:43

针对标签页,我们使用<tabview>标签,你的窗口描述大致是这样的 (这里便于阅读,我们使用xml描述)

<window name="first">
   <!--默认显示第一个标签页,及其内部的元素-->
   <tabview> FIrst Tab VIew...  </tabview>
   <tabview> </tabview>
   <tabview> </tabview>
</window>

<!--第二个窗口默认不显示,但是可能在第一个窗口及其子窗口、控件的窗口处理过程中创建并显示-->
<window name="second">
   Hello,World
</window>

总之,我们的任务是尽可能像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设计,确实有点为难你们,算了。你们忙自己的事情,转自己的钱就成,别来给我添乱就成。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文