2011-05-13 3 views
2

나는 그들이 위젯의 ​​표준 핸들러에 전달되기 전에 여러 이벤트를 가로 챌 필요, 그래서이 이미 완료했습니다 :Gdk.Window.AddFilter에 전달 된 FilterFunction을 어떻게 사용할 수 있습니까?

그래서
//Inside the definition of my custom widget 
protected override void OnRealized() 
{ 
    base.OnRealized(); 
    this.GdkWindow.AddFilter(PreFilterMessage); 
    ... 
} 

가, 나중에 내가 PreFilterMessage 방법을 정의

public Gdk.FilterReturn PreFilterMessage(IntPtr xEvent, Gdk.Event evnt) 
{ 
    Console.WriteLine(evnt.Type); 
    ... 
} 

그러나 문제는 내가 테스트 할 때 어떤 메시지가 창 (KeyEvent, ButtonEvent 등)에 도착하더라도 항상 "아무것도"를 출력하지 않으므로 매번 빈 이벤트 만 가져옵니다. 어딘가에 실제 정보가 xEvent 매개 변수를 통해 읽히지 만 IntPtr이므로 필요한 정보 (이벤트 유형, 포인터 좌표 등)를 얻는 방법을 알지 못합니다.

아무에게도 어떻게 할 수 있습니까? 미리 감사드립니다.

답변

0

gtk.org 웹 사이트의 문서에 따르면 필터 func에서받은 GdkEvent는 채워지지 않습니다. 이 AddFilter 메커니즘의 목적은 gdk 이벤트 처리가 시작되기 전에 사용자가 X 이벤트를 가로 챌 수있게하는 것입니다. Gtk #의 X 데이터 구조를 바인딩하지 않으므로 System.Runtime.InteropServices Marshal을 사용하여 IntPtr에서 해당 데이터를 수동으로 마샬링해야합니다.

그래서 지금까지 익숙하지 않은 것을 제외하고는 다른 대안을 고려해 볼 수 있습니다.

관련 문제