我是gtk和GtkD的初学者。
现在,我正在尝试从键盘上获取与这相关的输入。
但是,三年似乎在工具包上做了一些改变。
我在下面写了代码。然而,在回调函数中,我得到了ev的奇怪值。
独自一人走,我看不出有什么决心。
那么,你能告诉我修改的地方吗?
我提前感谢你,也感谢你对我糟糕的英语的耐心。
我使用的是gtkD-2.1.1和gtk+3.2.3。
这是完整的代码:
import std.stdio;
import gtkc.gdktypes;
import gtk.MainWindow;
import gtk.Widget;
import gdk.Event;
import gtk.Main;
class Window : MainWindow{
immutable width = 200;
immutable height = 200;
this(){
super("input test");
setDefaultSize(width,height);
setEvents(EventMask.KEY_PRESS_MASK); // Actually I don't know how this works
auto callback_func = cast(bool delegate(Event,Widget))&get_key; // I doubt this cast
this.addOnKeyPress(callback_func);
showAll();
}
bool get_key(GdkEventKey* ev, Widget widget){
writefln("sender %s", widget);
writefln("type %x",ev.type);
writefln("window* %x",ev.window);
writefln("send_event %x",ev.sendEvent);
writefln("time %x",ev.time);
writefln("state %x",ev.state);
writefln("keyval %x",ev.keyval);
writefln("length %x",ev.length);
writefln("gchar* %x",ev.string);
writefln("hardware_keycode %x",ev.hardwareKeycode);
writefln("group %x",ev.group);
writefln("is_modifier %x\n",ev.bitfield0);
return true;
}
}
void main(string[] args){
Main.init(args);
auto win = new Window();
Main.run();
}发布于 2013-04-26 13:17:00
是的,那个演员是错的。我想GdkEventKey*的签名已经过时了。将您的get_key更改为接受Event,您应该得到适当的结果:
...
auto call = &get_key;
...
bool get_key(Event e, Widget widget){
GdkEventKey* ev = e.key();
...我从来没有对GtkD做过任何事情,这仅仅是对文档的一些浏览的结果。所以,这可能不是最好的练习,但它应该能让你重新上路。
https://stackoverflow.com/questions/16198211
复制相似问题