Gtk2写系统托盘图标

本来打算研究一下libindicate,后来发觉自己搞不懂。于是去搞system tray。这个东西在windows上叫notification area。

在gtk里,用GtkStatusIcon来创建一个可爱的系统托盘图标!

代码如下:


#include <stdio.h>
#include <gtk/gtk.h>

void cb_login()
{
    printf("cb_login\n");
}

void cb_logout()
{
    printf("cb_logout\n");
}

void cb_log()
{
    printf("cb_log\n");
}

void cb_exit()
{
    gtk_main_quit();
}

GtkWidget *menu;
void init_menu()
{
    menu =  gtk_menu_new();
    GtkWidget *item;

    item = gtk_menu_item_new_with_label("登录");
    g_signal_connect(G_OBJECT(item), "activate",
                G_CALLBACK(cb_login), NULL);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

    item = gtk_menu_item_new_with_label("注销");
    g_signal_connect(G_OBJECT(item), "activate",
                G_CALLBACK(cb_logout), NULL);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

    /* 可爱的分割线 */
    item = gtk_separator_menu_item_new();
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

    item = gtk_menu_item_new_with_label("日志");
    g_signal_connect(G_OBJECT(item), "activate",
                G_CALLBACK(cb_log), NULL);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

    /* 可爱的分割线 */
    item = gtk_separator_menu_item_new();
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

    item = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
    g_signal_connect(G_OBJECT(item), "activate",
               G_CALLBACK(cb_exit), NULL);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
}

void show_menu(GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer pos)
{
    gtk_menu_popup(GTK_MENU(menu),
               NULL,
               NULL,
               NULL,
               NULL,
               button,
               activate_time);
    gtk_widget_show_all(GTK_WIDGET(menu));
}


int main(int argc, char **argv)
{
    gtk_init(&argc, &argv);
    GtkStatusIcon* status_icon =   gtk_status_icon_new_from_file("cmcclogin.png");
    if(!status_icon){
        fprintf(stderr, "failed to load icon file.\n" );
        return 1;
    }
    gtk_status_icon_set_tooltip(status_icon, "CMCC Login");
    gtk_status_icon_set_visible(status_icon, (gboolean)TRUE);
    init_menu();
    g_signal_connect(G_OBJECT(status_icon), "popup_menu",
        G_CALLBACK(show_menu), status_icon);
    gtk_main();

    return 0;
}



gtk这个强大东西感觉很简单,很容易上手,基本不需要学习什么原理,你只需要有一个api手册,就大概知道如何使用了。我没有任何关于gtk的教程和书籍,也没有时间去学,但我看了一段gtk的示例代码之后,我觉得我已经知道如何写gtk程序了。不知道其他人是否也有同样感受!

 

gtk的代码看起来很可爱,对比起来,mfc那些是多么的丑陋。不要抱怨它的函数名很长,其实那样很自然,你一看就知道这个函数是干什么的了。哈哈!!!

Gtk2写系统托盘图标》有9个想法

  1. lianjiefly

    GTK+,哈哈。。只是我觉得它写起来有点干体力活的味道,,别的都好,还有至今我还不会做皮肤^_^
    PS:搞成黑色干啥?以前的风格不是很好吗?

    回复
  2. vanxining

    于我而言,背景是黑色的切换到别的页面(大部分都是白色吧)发差太多,眼睛会刺痛的。

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据