GTK進階學習:設定視窗背景圖(可指定其大小)
阿新 • • 發佈:2019-01-25
設定視窗背景圖(可指定其大小):
程式執行效果圖如下:#include <gtk/gtk.h> /* 功能: 設定背景圖 * widget: 主視窗 * w, h: 圖片的大小 * path: 圖片路徑 */ void chang_background(GtkWidget *widget, int w, int h, const gchar *path) { gtk_widget_set_app_paintable(widget, TRUE); //允許視窗可以繪圖 gtk_widget_realize(widget); /* 更改背景圖時,圖片會重疊 * 這時要手動呼叫下面的函式,讓視窗繪圖區域失效,產生視窗重繪製事件(即 expose 事件)。 */ gtk_widget_queue_draw(widget); GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(path, NULL); // 建立圖片資源物件 // w, h是指定圖片的寬度和高度 GdkPixbuf *dst_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR); GdkPixmap *pixmap = NULL; /* 建立pixmap影象; * NULL:不需要蒙版; * 123: 0~255,透明到不透明 */ gdk_pixbuf_render_pixmap_and_mask(dst_pixbuf, &pixmap, NULL, 128); // 通過pixmap給widget設定一張背景圖,最後一個引數必須為: FASLE gdk_window_set_back_pixmap(widget->window, pixmap, FALSE); // 釋放資源 g_object_unref(src_pixbuf); g_object_unref(dst_pixbuf); g_object_unref(pixmap); } int main( int argc, char *argv[]) { gtk_init(&argc, &argv); //主視窗操作 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "設定視窗背景圖"); gtk_widget_set_size_request(window, 500, 450); chang_background(window, 500, 400, "image.jpg"); // 設定視窗背景圖 gtk_widget_show_all(window); // 顯示所有部件 gtk_main(); return 0; }