源代碼如下:
#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); //以TRUE標准,設置APP允許窗口可以繪圖 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, "../18DataStruct/success.jpg"); // 設置窗口背景圖,特別注意圖片的路徑 gtk_widget_show_all(window); // 顯示所有部件 gtk_main(); return 0; }
本程序的過程:通過參數傳遞圖片路徑->設置APP允許窗口繪圖->等待重繪制發生->為窗口創建圖片資源->創建的圖片要經修改並保存到dst_pixbuf中->然后才能被pixmap調用實現->實現之后要釋放掉圖片資源
注意:當選擇圖片路徑的時候可以選擇絕對路徑或相對路徑
我較傾向於絕對路徑!
oyx@oyx-Inspiron-5584:~/GTK$ ls anniu box1 entry entry2 entry3.c hello2 hello3.c movies root table.c anniu.c box1.c entry1 entry2.c entry.c hello2.c hello.c picture root.c window box box.c entry1.c entry3 hello1.c hello3 menu picture.c table window.c oyx@oyx-Inspiron-5584:~/GTK$ vim picture.c
oyx@oyx-Inspiron-5584:~$ ls 18DataStruct classCode home pp.py test1.py tingchechuang.c youxi.c 1.py c.py huocheruchengchaxunxitong.c praise.py test2.c tongxue 公共的 2.py danci.c kaoshi.c -pthread test2.py t.py 模板 2test1.c dianti.c main.c qq test3.c tupian 視頻 a.out dianti.h.gch migong.c reusableShapes.py test.c tupian.c 圖片 background drawShape.py one.h shapes.py TEST.c turtie.py 文檔 background.c examples.desktop ouyangxi shiyan.c testchazhao.c tushu.c 下載 biscuit.py 'E:\課程設計\01.txt' parking.c sqlist.c testc.py vending.py 音樂 button.py file parking.h story.py test.h word.c 桌面 chat.py GTK password.py student testparking.c word.h
使用路徑../18DataStruct/success.jpg即可將GTK上一級目錄18DataStruct中的圖片插入到GTK中的文件picture.c當中。
正是步行者,一步步登峰!