问题描述
在 gtkmm 4 中,如何从继承自 $('#submit').click(function(){
var pickedImage = new Image();
pickedImage.src = "{% static '/draw/hurricane.PNG' %}"
pickedImage.onload = function() {
context.drawImage(pickedImage,0);
}
var pngUrl = canvas.toDataURL();
socket.send("{\"url\" : " + pngUrl + "}");
});
socket.onmessage = function(receivedMessage) {
var received = JSON.parse(receivedMessage.data); [ERROR ON THIS LINE]
console.log("Received: " + JSON.stringify(received));
}
的类内部获取 XID
中定义的 X11/X.h
类型的 X Window ID?
解决方法
并非所有人都有。
那些小部件将实现 GtkNative
接口,该接口提供 gtk_native_get_surface
函数,允许您获取 GdkSurface
。在 gtkmm 中,这将对应于强制转换为 Gtk::Native
和调用 get_surface
。
要从中获取 Window
句柄,您可以使用 GDK_SURFACE_XID
宏。为此,我认为不存在 C++ 包装器;您必须调用 Gdk::Surface::gobj
才能获得 GdkSurface *
并使用 C API。
我想在接受的答案中添加两件事
-
检查
来实现get_surface()
是否确实返回了有效的非零对象当然很重要。否则在 Widget 的signal_realize()
发出后获取 ID,这是在将 Widget 分配给表面后完成的。这可以通过覆盖默认处理程序on_realize()
-
除了转换和调用
((Gtk::Native)this)->get_surface()
之外,还可以像get_native()->get_surface()
一样调用。
结论是
void myWidget::on_realize() {
// Call default handler
Gtk::Widget::on_realize();
XID x_window = GDK_SURFACE_XID(get_native()->get_surface()->gobj());
}
尽早获取X窗口ID。