GTK+里为什么不能显示透明背景?
这具是我的代码,基本上是照着网上找的资料来的,但是为什么不能显示透明背景呢?
这里的cheng.png是背景为透明的图片,效果如附件中所示
#include<gtk/gtk.h>
#include"pixmap.h"
int main(int argc, char * argv[])
{
GtkWidget * window, * fixed, * image, * eventbox;
GdkPixbuf * pixbuf;
GdkPixmap * pixmap, * pixmap2;
GdkBitmap * bitmap, bitmap2;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "bg"
// Very important!!
gtk_widget_set_app_paintable(window, TRUE);
gtk_widget_realize(window);
// gtk_window_fullscreen(GTK_WINDOW(window));
gtk_widget_set_size_request(window, 412, 550);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(gtk_main_quit), NULL);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
// set_widget_bg(fixed, "cheng.png"
pixbuf = gdk_pixbuf_new_from_file("cheng.png", NULL);
// gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap2, &bitmap2, 12;
pixmap = gdk_pixmap_new(fixed->window, gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf), -1);
gdk_pixbuf_render_to_drawable(pixbuf, pixmap,
fixed->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);
gdk_window_set_back_pixmap(fixed->window, pixmap, FALSE);
// gtk_widget_shape_combine_mask(fixed, bitmap2, 0, 0);
gtk_widget_show(fixed);
gtk_widget_show(window);
gtk_main();
return 0;
}
[ 本帖最后由 It'sGifted 于 2008-12-17 18:38 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
要修改gtk lib
首先要window manager支持composite, 然后可以gtk中通过alpha来实现
确实是高手,曾经想过,不过被一些帖子给吓住了,。。。
高手很多啊。
需要composite支持。
在最后画图的地方应该又alpha值判断的地方,在那里作alpha叠加或者透明处理
不会吧???
那请问高人,怎么改呢?
这个需要修改gtk lib的