Linux学习笔记--GTK入门【0609】
2009-06-09 21:20
274 查看
Linux学习笔记
----GTK入门【0609】
Written By Pingf
例程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;
}
----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 ) { ……………………… }
相关文章推荐
- GTK入门学习:glade的环境搭建
- GTK入门
- Linux学习笔记一 ---- Linux基础知识认知以及初识Linux下C编程入门
- Linux学习笔记--5.vim入门
- Linux学习笔记--5.vim入门
- gtk学习笔记-gtk入门
- linux学习笔记分享 (Linux入门绝佳)
- GTK入门学习:控件的添加
- GTK入门学习:布局容器之固定布局
- GTK入门学习:Libglade 和 GtkBuilder 的区别使用
- GTK的入门使用
- Linux学习笔记1:bash入门
- linux学习笔记一(入门)
- GTK入门学习:布局容器之表格布局
- GTK入门学习:glade的介绍
- GTK入门学习:Libglade 和 GtkBuilder 的区别使用
- GTK编程基础---入门篇(helloworld)
- Linux学习笔记--5.vim入门
- Linux学习笔记--5.vim入门
- GTK入门学习:布局练习之计算器