分类: 嵌入式
2009-11-26 13:35:48
二、触发按钮
触发按钮(toggle button,GtkToggleButton)是GtkButton派生而来。它的外观类似GtkButton,但运行方式稍有不同。触发按钮与一种状态结合在一起。它可以按下和弹回。触发按钮的外观反映它的状态。在开始,触发按钮看上去和普通按钮一样。如果按下按钮,它就停留在下面。触发按钮需要再按一次才能弹回来。下面是触发按钮的两种状态:
可以使用gtk_toggle_button_new_with_labal函数建立带标号的触发按钮,或者使用gtk_toggle_button_new函数建立不带标号的触发按钮。因为触发按钮是由普通按钮派生而来的,所以所有可以用在普通按钮上的事件和函数都可以用在触发按钮上。并且触发按钮增加了一个信号”toggled(触发)”,当按钮的状态改变时它发送”触发”信号。
2.
名称:: |
gtk_toggle_button_new gtk_toggle_button_new_with_label |
功能: |
创建一个不带标号的触发按钮 (gtk_toggle_button_new) 创建一个带标号的触发按钮 (gtk_toggle_button_new_with_label) |
头文件: |
#include |
函数原形: |
GtkWidget *gtk_toggle_button_new(void); GtkWidget *gtk_toggle_button_new_with_labal(const gchar *label); |
参数: |
label 触发按钮正文 |
返回值: |
新的触发按钮 |
我们对button1程序稍加改动,并且添加了对“toggled”信号的处理。
/*button2.c*/ #include void button_event(GtkWidget *,gpointer *); int main(int argc,char *argv[ ]) { GtkWidget *window; GtkWidget *button; gtk_init(&argc,&argv); /*初始化*/ window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/ gtk_signal_connect(GTK_OBJECT(window),”delete_event”,G_CALLBACK(gtk_main_quit),NULL); /*登记窗体delete_event信号的回调函数*/ button=gtk_toggle_button_new_with_label(“Button”); /*创建带标号的触发按钮*/ gtk_signal_connect(GTK_OBJECT(button),”pressed”,GTK_SIGNAL_FUNC(button_event),”pressed”); /*登记按钮pressed信号的回调函数*/ gtk_signal_connect(GTK_OBJECT(button),”released”,GTK_SIGNAL_FUNC(button_event),”released”); /*登记按钮released信号的回调函数*/ gtk_signal_connect(GTK_OBJECT(button),”clicked”,GTK_SIGNAL_FUNC(button_event),”clicked”); /*登记按钮clicked信号的回调函数*/ gtk_signal_connect(GTK_OBJECT(button),”enter”,GTK_SIGNAL_FUNC(button_event),”enter”); /*登记按钮enter信号的回调函数*/ gtk_signal_connect(GTK_OBJECT(button),”leave”,GTK_SIGNAL_FUNC(button_event),”leave”); /*登记按钮leave信号的回调函数*/ gtk_signal_connect(GTK_OBJECT(button),”toggle”,GTK_SIGNAL_FUNC(button_event),”toggle”); /*登记按钮toggle信号的回调函数*/ gtk_container_add(GTK_CONTAINER(window),button); /*把按钮加入窗体*/ gtk_widget_show(button); /*显示触发按钮*/ gtk_widget_show(window); /*显示窗体*/ gtk_main(); return 0; } void button_event(GtkWidget *widget,gpointer *data) /*回调函数*/ { g_print(“Button event:%s\n”,data); } |
当用户点击Button然后移开,终端会显示如下信息:
Button event: enter
Button event: pressed
Button event: toggled
Button event: clicked
Button event: released
Button event: leave
可以看到与上面的区别是增加了Button event: toggled信息。这是由“触发”信号产生的。
三、检查按钮
检查按钮就是我们通常来说的复选框。检查按钮(check button,GtkCheckButton)由触发按钮(GtkToggleButton)派生而来。GtkCheckButton的表现类似GtkToggleButton。两者的主要差别是按钮在屏幕上的显示方式不同。两种构件完成同样的功能,选择哪一种按钮纯粹是用户爱好。下面是选择按钮的两种状态。
下面是创建检查按钮的函数:
3.
名称:: |
gtk_check_button_new gtk_check_button_new_with_label |
功能: |
创建一个不带标号的检查按钮 (gtk_check_button_new) 创建一个带标号的检查按钮 (gtk_check_button_new_with_label) |
头文件: |
#include |
函数原形: |
GtkWidget *gtk_check_button_new(void); GtkWidget *gtk_check_button_new_with_labal(const gchar *label); |
参数: |
label 检查按钮正文 |
返回值: |
新的检查按钮 |
只要把button2.c中的button=gtk_toggle_button_new_with_label(“Check Button”);
替换为:button=gtk_check_button_new_with_label(“Button”);就可创建如图所示的按钮
了。