linux下显示不规则图片窗口

55 篇文章 1 订阅

测试环境是ubuntu15.04,使用的图形库是gtk+。

图片格式采用的是X11的xpm格式,首先从网上找一个背景透明的png图片,然后用图形转换工具(比如gimp)转换为xpm格式。

程序代码如下:

#include <gtk/gtk.h>

void close_app(GtkWidget *widget,GdkEvent *event,gpointer data){
    gtk_main_quit();
}

int main(int argc,char **argv){
    GtkWidget *window,*pixmap,*fixed;
    GdkPixmap *gdk_pixmap;
    GdkBitmap *mask;
    GtkStyle *style;
    GdkGC *gc;

    gtk_init(&argc,&argv);
    window = gtk_window_new(GTK_WINDOW_POPUP);
    gtk_signal_connect(GTK_OBJECT(window),"delete_event",
        GTK_SIGNAL_FUNC(close_app),NULL);

    gtk_widget_set_events(window,gtk_widget_get_events(window)|GDK_BUTTON_PRESS_MASK);
    gtk_signal_connect(GTK_OBJECT(window),"button_press_event",
        GTK_SIGNAL_FUNC(close_app),NULL);
    gtk_widget_show(window);

    style = gtk_widget_get_default_style();
    gc = style->black_gc;
    gdk_pixmap = gdk_pixmap_create_from_xpm(window->window,&mask,
        &style->bg[GTK_STATE_NORMAL],"./start.xpm");
    pixmap = gtk_pixmap_new(gdk_pixmap,mask);
    gtk_widget_show(pixmap);
    fixed = gtk_fixed_new();
    gtk_widget_set_usize(fixed,256,256);
    gtk_fixed_put(GTK_FIXED(fixed),pixmap,0,0);
    gtk_container_add(GTK_CONTAINER(window),fixed);

gtk_widget_shape_combine_mask(window,mask,0,0);
    gtk_widget_set_uposition(window,20,400);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

编译命令:

clang `pkg-config --libs --cflags gtk+-2.0` -O3 -g0 -s -o pixmap pixmap.c

执行效果如下:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值