2013-04-24 1 views
2

저는 gtk와 GtkD의 초보자입니다.
이제 키보드에서 this을 참조하여 입력을 얻으려고합니다.
그러나 3 년 동안 툴킷을 일부 변경 한 것으로 보입니다.
아래 코드를 작성했습니다. 그러나 콜백 함수에서 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* 인 서명은 오래된 것 같습니다. Event을 위해 get_key을 변경하고 당신은 올바른 결과를 얻을해야합니다

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

내가 GtkD 아무것도를 해본 적이 있고,이이 문서를 통해 몇 가지 시선 단지 결과입니다. 그래서, 아마도 모범 사례는 아니지만, 도로에서 다시 당신을해야합니다.

+0

이 작품은! 나는 더 많은 문서를 읽으려고 노력할 것이다. 고맙습니다!! – ggkuron