1 普通按扭
1.1 按扭信号处理
- pressed:按下按扭时发送的信号
- released:释放按扭时发送的信号
- clicked:点击按扭时发送的信号,点击为按下按扭和释放按扭的组合
- enter:鼠标移动按扭上时发送的信号
- leave:鼠标离开按扭时发送的信号
- 当有多个单选按钮而且它们的信号处理函数相同时,我们可以通过分析往回调函数传递的用户数据来判断到底用户选择的是哪个按钮因为不同构件在注册某个信号时可以传递各自的用户数据)
1.2 普通按扭的创建
GtkButton是直接从GtkBin派生而来的,它本身就是一个容器,因此可以在按钮上放置一副图片、动画等。GtkButton构件也是一个基类,GtkToggleButton(开关按钮)、GtkCheckButton(复选框)、GtkRadioButton(单选框)都是从它继承而来的。
*.xpm文件即像素图文件,它是一个文本文件,在该文本文件中用一个字符指针数组来保存位图数据。gdk_pixmap_create_from_xpm用来从一个xpm文件中创建一个GdkPixmap像素图片
2 开关按扭GtkToggleButton
开关按钮有两种状态:按下和弹起。GTK_TOGGLE_BUTTON (widget)->active字段用来表明开关按钮的状态。当该值为TRUE时,表明按钮被按下;当它为FALSE时,则表明按钮处于弹起状态。
- gtk_toggle_button_set_active:设置开关按钮的状态。当将按钮的状态设为“按下”状态时,将产生一个clicked信号
- gtk_toggle_button_toggled:切换开关按钮的状态,并产生一个toggled信号。当单击一个开关按钮时,将产生一个toggled信号
3 复选框GtkCheckButton
- gtk_check_button_new和gtk_check_button_new_with_label用来创建一个复选框按钮。
- GTK_CHECK_BUTTON(widget)->active字段用来表明复选框的状态。当该值为TRUE时,表明复选框被选中了;当它为FALSE时,则表明按钮未被选中
- gtk_toggle_button_set_active可以用来设置单选按钮的状态
- gtk_toggle_button_toggled函数用来切换开关按钮的状态,并产生一个toggled信号。当单击一个复选框时,也会产生toggled信号。
4 单选框GtkRadioButton
- gtk_radio_button_new和gtk_radio_button_new_with_label用来创建一个单选框按钮,这两个函数都有一个group参数用来表明单选按钮所属的按钮组。创建按钮组中的第一个按钮时,group参数值为NULL,此后每创建一个按钮,都必须使用使用GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button)来获取该按钮所属的按钮组,而不能使用前一次创建前一个按钮时的调用保存下来的结果
- GTK_RADIO_BUTTON(widget)->active字段用来表明复选框的状态。当该值为TRUE时,表明复选框被选中了;当它为FALSE时,则表明按钮未被选中
- gtk_toggle_button_set_active可以用来设置单选按钮的状态
- gtk_toggle_button_toggled函数用来切换开关按钮的状态,并产生一个toggled信号。当单击一个复选框时,也会产生toggled信号。
- 补充:GtkCheckButton和GtkRadioButton都是从GtkToggleButton继承来的,它们能够使用GtkToggleButton所具有的很多函数
5 分隔条
- 分隔条实际上是一种特殊形式的按扭
- gtk_hseparator_new用来创建一个水平分割条
- gtk_vseparator_new用来创建一个垂直分割条
补<1>:单选按扭的创建
#include
int main(int argc,char** argv)
{
GtkWidget *window,*hbox,*button1,*button2,*button3;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"Radio button");
gtk_container_set_border_width(GTK_CONTAINER(window),3);
g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),0);
hbox=gtk_hbox_new(TRUE,3);
/* 单选按钮的创建 */
button1=gtk_radio_button_new_with_label(NULL,"button1");
/* 每创建一个单选按钮时,都必须调用一次gtk_radio_button_get_group,否则出错*/
button2=gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1)),"button2");
button3=gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1)),"button3");
/* 设置第三个按钮为激活状态 */
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3),TRUE);
/* 将单选按钮添加到hbox内 */
gtk_box_pack_start(GTK_BOX(hbox),button1,TRUE,TRUE,3);
gtk_box_pack_start(GTK_BOX(hbox),button2,TRUE,TRUE,3);
gtk_box_pack_start(GTK_BOX(hbox),button3,TRUE,TRUE,3);
gtk_container_add(GTK_CONTAINER(window),hbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}