gtk图形界面编程day02
来源:互联网 发布:淘宝售后申请时间限制 编辑:程序博客网 时间:2024/05/17 23:32
消息和回调函数
void callback_func(GtkWidget *widget,gpointer func_data);
这是消息处理函数的原型。参数widget指向要接受消息的控件,参数func_data指向消息产生时传递给该函数的数据
gulong g_signal_connect(GtkObject *object,gchar *name, Gcallback callback_func,gpointer func_data);
各参数说明如下:
object:指向产生消息的控件
name:消息或事件的名称
callback_func:事件发生后要执行的回调函数
func_data:传递给回调函数的数据,与callback_func()的第二个参数相同
GTK+提供列两种排列控件的方法:一是使用box(盒子),二是使用table(表格)
使用box排列控件
1,创建和使用box容器
box是一种不可见的widget容器,他有水平排列和垂直排列两种。水平排列是控件按放入窗口的顺序水平排列,垂直排列是按控件放入窗口的顺序垂直排列。水平排列box容器使用函数gtk_hbox_new生成,而垂直排列box使用函数gtk_vbox_new生成。box容器生成后,使用函数gtk_box_pack_start或gtk_box_pack_end将控件放入容器中。前者由左至右,从上到下将控件放入box容器后者由右至左,从下到上将控件放入box容器
Widget *gtk_hbox_new(gint homogeneous,gint spacing);
参数含义如下:
homogeneous:控制每个放入box的控件是否有同样的高或宽
spacing:是否在控件之间填充空白
void gtk_box_pack_start(GtkBox *box, GtkWidget *child, gint expand, gint fill, gint padding);
参数含义如下:
box:要放入控件的box容器
child:要放入box容器的控件
expand:是否填满box所有额外控件,TRUE表示是,如果为FALSE则该box按控件原始大小显示。
gtk_hbox_new函数的参数homogeneous值为TRUE时,该参数才有效
fill:该值如果为TRUE,控件自行产生外控件。如果为FALSE,box在控件周围产生反白区域。只有
expand为TRUE,该参数才有效
生成一般的按钮有两个函数gtk_button_new()和gtk_button_new_with_label()在开发中,也常常使用check按钮和radio按钮。它们都是以双态按钮为基础的。可以使用以下函数生成一个双态按钮,第一个生成无标签按钮,第二个生成有文本标签的按钮。
GtkWidget *gtk_toggle_button_new(void);GtkWidget *gtk_toggle_button_new_with_label(gchar *label);
对于双态按钮,经常需要在回调函数中判断按钮的状态是否被选中。方法如下:
void toggle_button_callback(GtkWidget *widget,gpointer data){ if(GTK_TOGGLE_BUTTON(widget)->active) { // 按钮被选择时的处理代码 }}
可以使用下面这个函数,设置按钮的状态
void gtk_toggle_button_set_state(GtkToggleButton *toggle,gint state);
toggle:要设置状态的按钮
state:要设置的状态,值为TRUE把按钮设置为未选中状态,FALSE把按钮设置为选中
生成check按钮的函数为:
GtkWidget *gtk_check_button_new(void);GtkWidget *gtk_check_button_new_with_label(gchar *label);
生成radio按钮的函数为:
GtkWidget *gtk_radio_button_new(GSList *group);GtkWidget *gtk_radio_button_new_with_label(GSList *group,gchar *label);
button_box.c
#include<stdio.h>#include<gtk/gtk.h>/* 按下某个按钮后,在命令行上打印出按钮名和新状态 */void click_button(GtkWidget *widget,gpointer *data){ g_print("%s ",(char *)data); if(GTK_TOGGLE_BUTTON(widget)->active) g_print("state is active\n"); else g_print("state is not active\n");}void destory(GtkWidget *widget,gpointer *data){ gtk_main_quit();}int main(int argc,char *argv[]){ GtkWidget *window; GtkWidget *box; GSList *group; GtkWidget *check,*radio; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(GTK_OBJECT(window),"destory",GTK_SIGNAL_FUNC(destory),NULL); gtk_container_border_width(GTK_CONTAINER(window),50); /* 生成一个垂直box容器,并将该容器加入到box容器中,并显示出来 */ box = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),box); /* 以下生成两个check按钮,将它们加入到box容器中,并显示出来 */ check = gtk_check_button_new_with_label("coffee"); g_signal_connect(GTK_OBJECT(check),"clicked",GTK_SIGNAL_FUNC(click_button),"click button1"); gtk_box_pack_start(GTK_BOX(box),check,TRUE,TRUE,0); gtk_widget_show(check); check = gtk_check_button_new_with_label("tea"); g_signal_connect(GTK_OBJECT(check),"clicked",GTK_SIGNAL_FUNC(click_button),"click button2"); gtk_box_pack_start(GTK_BOX(box),check,TRUE,TRUE,0); gtk_widget_show(check); /*以下生成3个radio按钮,将它们加入到box容器中,并显示出来*/ /* * 注意:生成第一个radio按钮时group参数为NULL,而后每次在该组中创建 * 一个radio按钮都要使用gtk_radio_button_group函数获取新的group值 */ radio = gtk_radio_button_new_with_label(NULL,"Apple"); g_signal_connect(GTK_OBJECT(radio),"clicked",GTK_SIGNAL_FUNC(click_button),"Apple"); gtk_box_pack_start(GTK_BOX(box),radio,TRUE,TRUE,0); gtk_widget_show(radio); group = gtk_radio_button_group(GTK_RADIO_BUTTON(radio)); radio = gtk_radio_button_new_with_label(group,"Banana"); g_signal_connect(GTK_OBJECT(radio),"clicked",GTK_SIGNAL_FUNC(click_button),"Banana"); gtk_box_pack_start(GTK_BOX(box),radio,TRUE,TRUE,0); gtk_widget_show(radio); group = gtk_radio_button_group(GTK_RADIO_BUTTON(radio)); radio = gtk_radio_button_new_with_label(group,"Orange"); g_signal_connect(GTK_OBJECT(radio),"clicked",GTK_SIGNAL_FUNC(click_button),"Orange"); /*将第三个radio按钮设置为选中状态*/ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio),TRUE); gtk_box_pack_start(GTK_BOX(box),radio,TRUE,TRUE,0); gtk_widget_show(radio); gtk_widget_show(box); gtk_widget_show(window); gtk_main(); return 0;}
阅读全文
0 0
- gtk图形界面编程day02
- GTK+图形界面编程
- gtk图形界面编程day01
- gtk图形界面编程day03
- Linux下的GTK图形界面编程
- Linux下的GTK图形界面编程
- Linux下的GTK图形界面编程
- Linux下的GTK图形界面编程
- GTK+ 图形界面编程--个人总结
- 关于GTK -- Linux下的GTK图形界面编程
- Linux操作系统下的GTK图形界面编程方法
- Linux操作系统下的GTK图形界面编程方法
- Linux操作系统下的GTK图形界面编程方法(转)
- gtk图形界面强制刷新
- GTK、KDE、Gnome、XWindows 图形界面
- GTK、KDE、Gnome、XWindows 图形界面
- GTK图形界面之登录器界面
- GTK 编程
- 设计模式的基础——类图以及类与类之间的关系
- dedecms判断栏目是否有下级菜单
- 【hibernate】配置hbm2ddl.auto属性
- Elasticsearch 5 Ik+pinyin分词配置详解
- Java编程之Annotation全解析
- gtk图形界面编程day02
- Scala(3)-Traits
- C语言随机获取小写字母
- Scipy安装
- 关于结构体成员的直接赋值
- 数字图像处理——边缘检测
- 统计字符串中字符的频数
- 开发环境搭建
- Linux获取Root