GTK进阶学习:设置窗口背景图(可指定其大小)

设置窗口背景图(可指定其大小):

源代码:

#include <gtk/gtk.h>

void change_background(GtkWidget *widget, int w, int h, const gchar *path)
{
        //1.允许窗口可以绘图
        gtk_widget_set_app_paintable(widget, TRUE);
        gtk_widget_realize(widget);

	/* 更改背景图时,图片会重叠 
	* 这时要手动调用下面的函数,让窗口绘图区域失效,产生窗口重绘制事件(即 expose 事件)。 
	*/ 
        gtk_widget_queue_draw(widget);
        GdkPixbuf *src = gdk_pixbuf_new_from_file(path, NULL);
        GdkPixbuf *dst = gdk_pixbuf_scale_simple(src,w,h,GDK_INTERP_BILINEAR);

	/* 创建pixmap图像;  
	* NULL:不需要蒙版;  
	* 123: 0~255,透明到不透明 
	*/
        GdkPixmap *pixmap = NULL;
        gdk_pixbuf_render_pixmap_and_mask(dst,&pixmap,NULL,128);
		
	// 通过pixmap给widget设置一张背景图,最后一个参数必须为: FASL
        gdk_window_set_back_pixmap(widget->window,pixmap,FALSE);
        

        g_object_unref(src);
        g_object_unref(dst);
        g_object_unref(pixmap);

        return;
}

int main(int argc, char *argv[])
{
        //1.gtk环境的初始化
        gtk_init(&argc, &argv);

        //2.创建一个window
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

        //3.设置窗口标题
        gtk_window_set_title(GTK_WINDOW(window), "设置窗口背景图");
        gtk_widget_set_size_request(window, 500,450);

        //4.设置窗口图片
        change_background(window, 500, 400, "./img/1.jpg");

        //5.显示所有窗口
        gtk_widget_show_all(window);

        //6.主事件循环
        gtk_main();

        return 0;
}


运行结果:

GTK进阶学习:设置窗口背景图(可指定其大小)_第1张图片


源码下载:http://download.csdn.net/download/lianghe_work/8945211

转自:

你可能感兴趣的:(gtk,gtk学习)