Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9412814
  • 博文数量: 1748
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20070
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1748)

文章存档

2024年(24)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2009-06-25 15:11:40

/**************************************************************************************************************
*函数功能:改变控件的背景图片
*filename:图片文件的路径
*widget:要改变背景的控件
*该函数不能改变所有控件的背景,只能对部分控件起作用
***************************************************************************************************************/
static void set_background_pixmap(const gchar *filename,GtkWidget *widget)
{
       GdkPixbuf *pbuf,*bg;
       GdkPixmap *pixmap;
       gint width,height;

       if(GTK_WIDGET_NO_WINDOW(widget))
       {
            g_print("the widget has not window\n");   
       }
  
       if(!GTK_WIDGET_REALIZED(widget))
       {
             gtk_widget_realize(widget);
       }
  
       if(!filename)
       {
             gdk_window_set_back_pixmap(widget->window,NULL,FALSE);
       }
 
       pbuf = gdk_pixbuf_new_from_file(filename,NULL);
       if(!pbuf)
       {
            g_print("fail\n"); 
            return;
       }
       width = gdk_pixbuf_get_width(pbuf);
       height = gdk_pixbuf_get_height(pbuf);

       bg = gdk_pixbuf_new(GDK_COLORSPACE_RGB,TRUE,
               gdk_pixbuf_get_bits_per_sample(pbuf),width,height);
       gdk_pixbuf_fill(bg,0);
       gdk_pixbuf_composite(pbuf,bg,0,0,width,height,0,0,1,1,
               GDK_INTERP_BILINEAR,0xFF);
  
       pixmap = gdk_pixmap_new(widget->window,width,height,-1);
       gdk_draw_pixbuf(widget->pixmap,NULL,pbuf,0,0,0,0,-1,-1,
               GDK_RGB_DITHER_NORMAL,1,1);
 
       gdk_pixbuf_unref(pbuf);
       gdk_pixbuf_unref(bg);
    
       gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
               pixmap,
               0, 0,
               0, 0,
               width, height);
  
       gtk_widget_set_app_paintable(widget,TRUE);
       gdk_window_set_back_pixmap(widget->window,pixmap,FALSE);

       gtk_widget_queue_draw(widget);
}
阅读(3165) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~