在GTK下設置窗口背景圖片


源代碼如下:

#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當中。

 

 

 

正是步行者,一步步登峰!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM