Chinaunix首页 | 论坛 | 博客
  • 博客访问: 655368
  • 博文数量: 237
  • 博客积分: 4285
  • 博客等级: 上校
  • 技术积分: 2701
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-15 14:05
文章分类

全部博文(237)

文章存档

2014年(2)

2013年(3)

2012年(47)

2011年(15)

2010年(68)

2009年(102)

我的朋友

分类: 嵌入式

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”);就可创建如图所示的按钮

了。

阅读(649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~