2

私は gtk と GtkD の両方の初心者です。今、これ
を参照してキーボードから入力を取得しようとしています。 しかし、Toolkits には 3 年間でいくつかの変更が加えられたようです。 以下にコードを書きました。しかし、コールバック関数で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();  
    }
4

1 に答える 1

1

はい、そのキャストは間違っています。GdkEventKey*Signature withは時代遅れだと思います。get_keyを take に変更するEventと、適切な結果が得られるはずです。

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

私は GtkD で何もしたことがありません。これはドキュメントをざっと見ただけの結果です。したがって、これはおそらくベスト プラクティスではありませんが、道に戻る必要があります。

于 2013-04-26T13:17:00.653 に答える