一个简易桌面,只有一个贴图背景,主要是记录更改分辨率大小时可以缩放的部分。 #include <gtk/gtk.h> GtkWidget *window = NULL; GdkPixbuf *pixbuf = NULL; GdkPixmap *pixmap = NULL; static gboolean on_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer data) { gint w, h; GdkScreen *gscreen; gscreen = gdk_screen_get_default(); w = gdk_screen_get_width(gscreen); h = gdk_screen_get_height(gscreen); gtk_widget_set_size_request(window, w, h); pixbuf = gdk_pixbuf_new_from_file_at_scale ("./bg.png", w, h, FALSE, NULL); pixmap = gdk_pixmap_new (window->window, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), -1); gdk_draw_pixbuf (pixmap,NULL,pixbuf, 0,0,0,0, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), GDK_RGB_DITHER_NORMAL,0,0); g_object_unref(pixbuf); gdk_window_set_back_pixmap (window->window, pixmap, FALSE); } int main(int argc, char *argv[]) { gtk_init(&argc,&argv); /* Create the window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Set as Desktop */ gtk_window_set_type_hint (GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DESKTOP); gtk_window_set_title(GTK_WINDOW(window),"User Define Button Demo"); gtk_widget_set_app_paintable(window,TRUE); gtk_widget_realize (window); gint w,h; GdkScreen *gscreen; gscreen = gdk_screen_get_default(); w = gdk_screen_get_width(gscreen); h = gdk_screen_get_height(gscreen); gtk_widget_set_size_request(window, w, h); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL); pixbuf = gdk_pixbuf_new_from_file_at_scale ("./bg.png", w, h, FALSE, NULL); pixmap = gdk_pixmap_new (window->window, w, h, -1); gdk_draw_pixbuf (pixmap,NULL,pixbuf, 0,0,0,0, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), GDK_RGB_DITHER_NORMAL,0,0); g_object_unref(pixbuf); gdk_window_set_back_pixmap (window->window, pixmap, FALSE); g_signal_connect (G_OBJECT(window), "expose-event", G_CALLBACK(on_expose_event), NULL); gtk_widget_show_all(window); gtk_main(); return 0; }