
本来打算研究一下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那些是多么的丑陋。不要抱怨它的函数名很长,其实那样很自然,你一看就知道这个函数是干什么的了。哈哈!!!
终于有沙发啦!
GTK+,哈哈。。只是我觉得它写起来有点干体力活的味道,,别的都好,还有至今我还不会做皮肤^_^
PS:搞成黑色干啥?以前的风格不是很好吗?
的确,GObject写一个类真是累人。
支持长函数名,一眼就猜出来它大概什么滴干活。
@lianjiefly:反色也不错!!!想玩一下,有空再改过来。
很好看!
于我而言,背景是黑色的切换到别的页面(大部分都是白色吧)发差太多,眼睛会刺痛的。
@vanxining:嗯,黑白反差很强烈!!!
不错,支持