【问题标题】:Key Input using GtkD使用 GtkD 的键输入
【发布时间】:2013-04-24 17:14:05
【问题描述】:

我是 gtk 和 GtkD 的初学者。
现在,我正在尝试参考this 从键盘获取输入。
但是,工具包似乎三年来发生了一些变化。
我在下面写了代码。但是,我在回调函数中得到了奇怪的 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();  
    }

【问题讨论】:

    标签: events user-interface gtk d gtkd


    【解决方案1】:

    是的,演员阵容是错误的。我猜GdkEventKey* 的签名已经过时了。将您的get_key 更改为Event,您应该会得到正确的结果:

        ...
        auto call = &get_key;
        ...
        bool get_key(Event e, Widget widget){
            GdkEventKey* ev = e.key();
        ...
    

    我从未对 GtkD 做过任何事情,这只是浏览文档的结果。因此,这可能不是最佳做法,但它应该能让您重回正轨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多