今天在写 Linux 下的 Gappproxy 图形界面,运行后发现,任务栏是难看得 DOS 默认图标,很难看,上网搜了一下,如何添加任务栏图标,现在将代码转换过来,做点小解释吧。
#include <gtk/gtk.h>
GdkPixbuf *create_pixbuf(const gchar * filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
if(!pixbuf) {
fprintf(stderr, "%sn", error->message);
g_error_free(error);
}
return pixbuf;
}
int main( int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "icon");
gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));
gtk_widget_show(window);
g_signal_connect_swapped(G_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
上面的就是为一个填加上图标的窗口程序了
gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));
函数gtk_window_set_icon() 是为窗口设置图标用的。函数 create_pixbuf() 作用是从一个png图象文件中生成 GdkPixbuf 类型数据。
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
根据官方公布的文档说明,函数 gdk_pixbuf_new_from_file() 一个文件中加载图象数据,从而生成一个新的 pixbuf。 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL的话,程序就会出现错误。
顺便晒一下我写得gappproxy图形界面。刚刚开始写,还没完整。

一片茫然。
这个我想只有学GTK编程的,才会看得懂吧,呵呵。
是啊,惭愧!咱也看不懂哟
呵呵,互相学习嘛。
看这个,也加上去呗~
https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators
。。。全英文,要点时间来研究哦。准备为我写的gappproxy ubuntu客户端添加到通知区域的图标
这个就是吖,我见你说要添加这个功能,就顺便给你了,当时我是找Python tray icon的时候找到的,费了不少时间找到这个满意的,其中也有C的版本~哈~
其实我看到全英文,直接跳到代码处看了~
顶。
不过,你确定你能编译通过吗? 我编译的时候报错了,undefined reference to “gdk_pixbuf_new_from_file_utf8″,能告诉我下怎么解决啊?!
我的编译通过了的。undefined是没定义的意思,不知道是不是你用的gtk版本没有这个函数呢。
我今天中午解决了。这个是因为我使用code::blocks,没有link file造成的。已经编译通过了,呵呵。