私のコード(以下)が行うこと:
- 背景色付きの XLIB ウィンドウを作成します
- ウィンドウに文字列を描画します
- ウィンドウに線を引く
- GTK+ ウィンドウを作成します
- GTK+ ウィンドウに、GDK ウィンドウを介して XLIB ウィンドウが存在することを認識させます。
- XLIB ウィンドウの出力を GTK+ ウィンドウ内に表示する
それは機能し、正しい色のウィンドウを作成しますが、画面に文字列や線を描画しません。それをどのように表示するか、またはどこが間違っているかについてのアイデアはありますか?
私が GTK+ 描画関数を使用しない理由は、これがテスト プログラムであり、実際にはすべての描画が xlib ウィンドウから取得される必要があるためです。
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void destroy(GtkWidget *widget, gpointer data ) {
gtk_main_quit ();
}
int main(int argc, char** argv) {
GtkWidget *xwindow;
//Open the display
Display *display = XOpenDisplay(NULL);
int screen = DefaultScreen(display);
//Create the window
Window w = XCreateSimpleWindow(display, DefaultRootWindow(display), 0, 0,
200, 100, 20, black, 10201020);
XSelectInput(display, w, StructureNotifyMask);
XMapWindow(display, w);
GC gc = XCreateGC(display, w, 0, NULL);
for(;;) {
XEvent e;
XNextEvent(display, &e);
if (e.type == MapNotify)
break;
}
XDrawString(display, w, gc, 10, 10, "HelloWorld!", 12);
XDrawLine(display, w, gc, 10, 60, 180, 20);
XFlush(display);
//SET UP
gtk_init (&argc, &argv);
//xwindow
xwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect (xwindow, "destroy",
G_CALLBACK (destroy), NULL);
g_signal_connect (xwindow, "destroy",
G_CALLBACK (print), NULL);
gtk_widget_realize(xwindow);
xwindow->window = gdk_window_foreign_new((guint32)w);
//SET UP
gtk_widget_show(xwindow);
gtk_main ();
return 0;
}