如何设置不规则窗口GTK

为了体现高度的可制定性.

对于GTK来说,肯定可以实现不规则的窗口.

但是如何实现呢?

在网上找到了一些资料.主要是用透明的图片来实现的.

下面我们来分析一下实现的过程.

 

pixbuf = gdk_pixbuf_new_from_file("./1.png",NULL);

gdk_pixbuf_render_pixmap_and_mask(pixbuf,&pixmap,&bitmap,128);

image = gtk_image_new_from_pixbuf(pixbuf);

gtk_container_add(GTK_CONTAINER(window),image);

pixmap = gdk_pixmap_new(image->window,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),-1);

gdk_pixbuf_render_to_drawable(pixbuf,pixmap,image->style-fg_gc[GTK_STATE_NORMAL],0,0,0,0,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),GDK_RGB_DITHER_NORMAL,0,0);

g_object_unref(pixbuf);

 

上面这些语句基本完成了对透明图像处理,形成不规则窗口的过程。

下面我们逐步分析。

 

pixbuf = gdk_pixbuf_new_from_file("./1.png",NULL);

创建一个新的pixbuf通过从文件中读取图像。第二个参数是出错处理的,可以不管。第一个参数是图像文件的名字。一般来讲我们把这个文件做成想要的形状,不需要的地方设置成透明的,一般用PS或者GIMP来处理。

gdk_pixbuf_render_pixmap_and_mask(pixbuf,&pixmap,&bitmap,128);

创建一个pixmap和bitmap,通过第二第三个参数返回。并且设置与pixbuf相同的透明度。这个函数只是一个转换函数。

image = gtk_image_new_from_pixbuf(pixbuf);

通过pixbuf创建一个image。

gtk_container_add(GTK_CONTAINER(window),image);

要显示image。

pixmap = gdk_pixmap_new(image->window,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),-1);

创建一个pixmap用给出的大小和深度。

gdk_pixbuf_render_to_drawable(pixbuf,pixmap,image->style-fg_gc[GTK_STATE_NORMAL],0,0,0,0,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),GDK_RGB_DITHER_NORMAL,0,0);

这个函数应该用gdk_draw_pixbuf代替。

让pibuf变得可绘图。

g_object_unref(pixbuf);

减少一个pixbuf的引用计数。

gdk_window_set_back_pixmap(image->window,pixmap,FALSE);

设置窗口的背景图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值