2013-04-24 2 views
2

Я новичок как gtk, так и GtkD.
Теперь я пытаюсь получить ввод с клавиатуры со ссылкой на this.
Но, кажется, что три года внесли некоторые изменения в Toolkits.
Я написал код ниже. Тем не менее, я получил странные значения ev в функции обратного вызова.Ключ ввода с использованием GtkD

Я не мог видеть никакой перспективы разрешения, оставаясь в одиночестве.
Итак, не могли бы вы показать мне, где изменить?

Я ценю вас заранее, а также вашего пациента с моим бедным английским языком.


Я использую 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(); 
    } 

ответ

1

Да, литые неправильно. Я предполагаю, что подпись с GdkEventKey* устарела. Изменение get_key принять Event и вы должны получить правильные результаты:

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

Я никогда не делал ничего с GtkD, и это просто результат некоторых взорами над Docs. Таким образом, это, вероятно, не лучшая практика, но она должна вернуть вас в путь.

+0

Это работает! Я попытаюсь прочитать документы больше. Спасибо!! – ggkuron