您的位置:首页 > 运维架构 > Linux

Linux学习笔记--GTK入门【0609】

2009-06-09 21:20 274 查看
Linux学习笔记

----GTK入门【0609】

Written By Pingf

简单记录一下,下面的代码基本来自gtk的官网,加了些中文的注释便于理解,仅次而已。

例程1 简单使用

Code[/b]
#include <gtk/gtk.h>

gint count = 0;
char buf[5
];
void increase(GtkWidget *
widget, gpointer label)
{
count++
;
sprintf(buf, "%d"
, count);
gtk_label_set_text(label, buf);
}
void decrease(GtkWidget *
widget, gpointer label)
{
count--
;
sprintf(buf, "%d"
, count);
gtk_label_set_text(label, buf);
}

int main(int argc, char**
argv)
{

//标签

GtkWidget *label;
//窗体

GtkWidget *window;
//框架

GtkWidget *frame;
//按钮

GtkWidget *plus;
//按钮

GtkWidget *minus;

gtk_init(&argc, &
argv);
window =
gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 180
);
gtk_window_set_title(GTK_WINDOW(window), "+-"
);
//
fixed_new产生确定位置的窗体,和其它GTK窗体构建不同
//其不会随着窗体比例的改变而改变

frame = gtk_fixed_new();
//将frame加入windows

gtk_container_add(GTK_CONTAINER(window), frame);
//声明button窗体

plus = gtk_button_new_with_label("+");
//设置窗体的大小

gtk_widget_set_size_request(plus, 80, 35);
//将窗体加入fixed框架

gtk_fixed_put(GTK_FIXED(frame), plus, 50, 20);
minus = gtk_button_new_with_label("-"
);
gtk_widget_set_size_request(minus, 80, 35
);
gtk_fixed_put(GTK_FIXED(frame), minus, 50, 80
);
label = gtk_label_new("0"
);
gtk_fixed_put(GTK_FIXED(frame), label, 190, 58
);
gtk_widget_show_all(window);
//连接回调函数

g_signal_connect(window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect(plus, "clicked"
,
G_CALLBACK(increase), label);
g_signal_connect(minus, "clicked"
,
G_CALLBACK(decrease), label);
gtk_main();
return 0
;
}


一些简单的补充和说明

关于信号的连接,还是举一个例子
例如
g_signal_connect (G_OBJECT (window), "delete_event",G_CALLBACK (delete_event), NULL);
四个参数分别对应了,1发出信号的窗体,2信号或事件的类型,3回调函数的名称,4传入数据
这里在顺带说明下,与g_signal_connect相对应的回调函数的传入参数是gpointer型的,也就是一个空指针型,这就意味着我们可以传入几乎任意形态的数据,可以是字符,也可以是窗体!
而与其对应回调函数应类似如下的声明
gint delete_event( GtkWidget *widget, GdkEvent  *event, gpointer   data )
{
……………
}
如果是普通的信号,则省略中间的那一项!
另外前面的程序中还涉及到了另一个信号连接函数,这里也作简要的说明,当然还是举例来说
g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy), window);
可以看到几乎与前面的那种相同,但最后的那个window其实并不是传入的窗体【这样说不一定科学】
它所表示的意思是click由button发出,但到了回调函数中,回调函数则认为发出者是window,暗中进行了交换!
如果回调函数的意图是自身窗体的销毁,那么此时销毁的就是window而不是button了!
另外,由于其并不显示的传入指定的数据,其回调函数的参数中只有一项就够了
void callback_func( GtkObject *object )
{
………………………
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: