win32 플랫폼에서 GtkWidget을 사용하여 클라이언트 이벤트를 보내고 받으려고합니다. 클라이언트 이벤트를 비동기 적으로 GtkWidget으로 보내려면 어떻게해야합니까?
static gboolean MyClientEvent(GtkWidget *widget, GdkEventClient *ev, MyWnd *Wnd)
{
// breakpoint here...
return TRUE;
}
GtkWidget *Wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect( G_OBJECT(Wnd),
"client-event",
G_CALLBACK(MyClientEvent),
this);
gtk_widget_add_events(Wnd, GDK_ALL_EVENTS_MASK);
내가 메시지를 전송하기 볼 ++ 스파이를 사용, 그래서 송신 측이 괜찮 알고
GtkWidget *Wnd;
GdkNativeWindow Hnd =
#ifdef WIN32
GDK_WINDOW_HWND(Wnd->window);
#else
GDK_WINDOW_XWINDOW(Wnd->window);
#endif
GdkEvent *Event = gdk_event_new(GDK_CLIENT_EVENT);
// fill out Event params
gdk_event_send_client_message(Event, Hnd);
받기 코드는 다음과 같습니다 보내는 코드는 다음과 같습니다. 그러나 수신 측에서는 클라이언트 이벤트를 수신하지 않습니다. 콜백에서 중단 점이 트리거 될 것으로 예상했지만 ... 그렇지 않습니다.
GtkWindow가 클라이언트 이벤트를 수신 할 수 있는지 확실치 않습니다 ... X11에서의 과거 경험에서 나는 그 점에서 다른 GtkWidget과 거의 같다고 생각했습니다. 어쩌면 win32 플랫폼에서는 다소 다릅니다. 하지만 여전히 나는이 일을 할 수 있기를 바랍니다.
비동기 적으로 스레드 안전 모드에서 작업 할 수 있도록 작업자 스레드에서 GUI 스레드까지 이벤트를 보낼 수 있습니다.
왜 GtkWindow가 아닌 기본 창을 통해 보내고 있습니까? 최신 버전의 Gtk는 네이티브 창과 위젯간에 1 : 1로 대응하지 않으므로 GdkWindows 또는 GtkWidgets에만 전적으로 의존해야합니다. 물어 보는 문제는 네이티브 윈도우의 모든 이벤트가 GDK의 체인으로 전달되기를 기대하지만 더 이상 발생하지 않는다는 것입니다. http://library.gnome.org/devel/gtk/을 참조하십시오. stable/gtk-migrating-ClientSideWindows.html – Spudd86
그래, 클라이언트 사이드 윈도우를 이해하고 있지만 클라이언트 메시지를 GtkWindow 또는 GtkWidget에 보내려면 어떻게해야합니까? (GdkNativeWindow와 반대 됨) – fret
방금 gtk_propagate_event ...를 사용하는 것이 올바른 방법인가요? – fret