SwiftForth-linux 有一个严格的 CLI 接口,因此尝试编写代码来创建自定义窗口需要GTK+之类的东西,我使用了这个。
我的问题出在回调过程中。编写接受按键的代码需要一个合适的回调来配合适当的 signal_connect 函数。
在将 C 代码翻译成 Forth 时,我仍然有一个涉及 event_key 结构的绊脚石,我需要它来处理所按下键的代码。
我认为(但我可能是错的)GTK+ 系统将创建它并将地址传递给我以插入变量并稍后使用,但这是如何完成的?
在我的几个例子中,没有提到事件 * 或任何类似返回的东西。是否有一个小部件函数将返回 event_key 结构的地址?
我快到了,但我需要一些精通 GTK+ 和 C(希望是 Forth)的人的帮助,任何提示都将不胜感激。
TCG
回应第一条评论:我需要访问 event_key 结构来提取按下的键的键码。这如何呈现给回调函数对我来说是个谜。
我的部分问题是,为了将 C 函数翻译成 Forth,我需要了解 G_CALLBACK() 等函数的内部工作原理。我看到的用于接收按键的代码将 GtkWidgit * 和 GtkEventKey * 作为处理程序的输入参数。例如,
static gboolean key_event(Gtk_Widget *widget, GdkEventKey * event)
我可以编写一个自定义包装器,在执行处理程序之前将这些参数放在返回堆栈上,但这是 GTK+ 所期望的吗?
另外一个:“指向函数的指针”这个术语可能会以一种令人困惑的方式使用。是=“函数的地址”还是“包含函数地址的变量的地址”?