在 1980 年代的 Apple II BASIC 上,您将使用“HGR”来访问屏幕,“HCOLOR”将设置颜色,而“HPLOT”将绘制点。您还可以操作屏幕字节数据,而不必将程序控制权交给任何事件处理程序。今天,每种语言和每个库似乎都缺少这种可笑的基本功能。
因此,我使用X Window API在 C 中编写了一个小型库来执行此操作:HGR(x,y) 建立一个 XWindow,HCOLOR(i) 设置颜色,HPLOT(i,j) 绘制一个点,再加上你提取窗口的位图,可以修改它并显示修改后的东西。这并不简单,我不想再经历一次。
我现在正在使用 Perl 做一些事情,我需要这样一个用于 Perl 的工具,您可以在其中调用一个子例程,该子例程最好在不产生新线程的情况下返回,并输出一个窗口,您可以在其中向窗口添加图形内容,并且当您的程序喜欢它时查询事件。这是 1980 年代 BASIC 的功能,所以应该不难。但是我看到的工具没有做到这一点:
- GD:据我所知,这是生成图形文件,而不是图形窗口。看来您需要将其通过管道传输到另一个程序。
- Gtk2:我必须分叉出一个单独的线程来捕获事件,否则它不会显示窗口。我不想分叉任何东西,而且我基本上不关心任何事件,除非我特别要求稍后查看堆积在队列中的东西。
- Qt:在这里,您还需要将控制权移交给事件处理程序,不移交,不显示。在 C++ 版本中,我可以让 Qt 显示和绘制而无需切换。
- PerlTk:又是愚蠢的交接。
- OpenGL:在这里,当我想看看发生了什么时,我不知道如何捕捉 X Window 事件,比如按键。
有谁知道如何从正在运行的应用程序中建立一个 XWindow,而无需分叉 GUI 应用程序进程,您可以在窗口中绘制原始的东西,如点和线,以及您可以根据自己的时间表查询窗口的事件?我简要地查看了 Perl 的 X Window API,它和 C 一样可怕,并且将 C 代码与 Perl 接口也是可怕的。如果有必要,我会做的。但也许不是。Perl 已经有 HGR 了吗?
如果您想知道我的意思是什么,没有事件循环图形库,请参阅这个链接的论文,不幸的是它是针对 C 的。这样的东西对于科学知识非常有用,除了介绍性编程课程之外。