⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spinbutton.c

📁 《Linux程序设计权威指南》源代码
💻 C
字号:
	/* File: spinbutton.c */	#include <stdio.h>	#include <gtk/gtk.h>	static GtkWidget *spinner1;	void toggle_snap( GtkWidget *widget, GtkSpinButton *spin )	{		gtk_spin_button_set_snap_to_ticks (spin, 			GTK_TOGGLE_BUTTON (widget)->active);	}	void toggle_numeric( GtkWidget *widget, GtkSpinButton *spin )	{		gtk_spin_button_set_numeric (spin, 			GTK_TOGGLE_BUTTON (widget)->active);	}	void change_digits( GtkWidget *widget, GtkSpinButton *spin )	{		gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),			gtk_spin_button_get_value_as_int (spin));	}	void get_value( GtkWidget *widget, gpointer data )	{		gchar buf[32];		GtkLabel *label;		GtkSpinButton *spin;		spin = GTK_SPIN_BUTTON (spinner1);		label = GTK_LABEL(gtk_object_get_user_data(GTK_OBJECT(widget)));		if (GPOINTER_TO_INT (data) == 1)			sprintf (buf, "%d", 				gtk_spin_button_get_value_as_int (spin));		else			sprintf (buf, "%0.*f", spin->digits,				gtk_spin_button_get_value_as_float (spin));		gtk_label_set_text (label, buf);	}	int main( int   argc, char *argv[] )	{		GtkWidget *window;		GtkWidget *frame;		GtkWidget *hbox;		GtkWidget *main_vbox;		GtkWidget *vbox;		GtkWidget *vbox2;		GtkWidget *spinner2;		GtkWidget *spinner;		GtkWidget *button;		GtkWidget *label;		GtkWidget *val_label;		GtkAdjustment *adj;		//初始化		gtk_set_locale();		gtk_init(&argc, &argv);		window = gtk_window_new (GTK_WINDOW_TOPLEVEL);		gtk_signal_connect (GTK_OBJECT (window), "destroy",			GTK_SIGNAL_FUNC (gtk_main_quit), NULL);		gtk_window_set_title (GTK_WINDOW (window), "Spin Button");		main_vbox = gtk_vbox_new (FALSE, 5);		gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);		gtk_container_add (GTK_CONTAINER (window), main_vbox);   		frame = gtk_frame_new ("Not accelerated");		gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);   		vbox = gtk_vbox_new (FALSE, 0);		gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);		gtk_container_add (GTK_CONTAINER (frame), vbox);   		//年月日按钮 		hbox = gtk_hbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);   		vbox2 = gtk_vbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);  		 		label = gtk_label_new ("日:");		gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);		gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);  		 		adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,                                               		5.0, 0.0);		spinner = gtk_spin_button_new (adj, 0, 0);		gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);		gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),                                 		GTK_SHADOW_OUT);		gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);  		 		vbox2 = gtk_vbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);				label = gtk_label_new ("月:");		gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);		gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);				adj = (GtkAdjustment *)gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,				5.0, 0.0);		spinner = gtk_spin_button_new (adj, 0, 0);		gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);		gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),			GTK_SHADOW_ETCHED_IN);		gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);  		 		vbox2 = gtk_vbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);				label = gtk_label_new ("年:");		gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);		gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);				adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,			1.0, 100.0, 0.0);		spinner = gtk_spin_button_new (adj, 0, 0);		gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), FALSE);		gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),                                 		GTK_SHADOW_IN);		gtk_widget_set_usize (spinner, 55, 0);		gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);				frame = gtk_frame_new ("加速的");		gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);				vbox = gtk_vbox_new (FALSE, 0);		gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);		gtk_container_add (GTK_CONTAINER (frame), vbox);				hbox = gtk_hbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);				vbox2 = gtk_vbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);				label = gtk_label_new ("数值 :");		gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);		gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);				adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 			-10000.0, 10000.0, 0.5, 100.0, 0.0);		spinner1 = gtk_spin_button_new (adj, 1.0, 2);		gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);		gtk_widget_set_usize (spinner1, 100, 0);		gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);				vbox2 = gtk_vbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);				label = gtk_label_new ("数字 :");		gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);		gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);				adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);		spinner2 = gtk_spin_button_new (adj, 0.0, 0);		gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);		gtk_signal_connect (GTK_OBJECT (adj), "value_changed",                    		GTK_SIGNAL_FUNC (change_digits),                    		(gpointer) spinner2);		gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);				hbox = gtk_hbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);				button = gtk_check_button_new_with_label ("设为0.5步长");		gtk_signal_connect (GTK_OBJECT (button), "clicked",                    		GTK_SIGNAL_FUNC (toggle_snap),                    		spinner1);		gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);				button = gtk_check_button_new_with_label ("只输入数字模式");		gtk_signal_connect (GTK_OBJECT (button), "clicked",                    		GTK_SIGNAL_FUNC (toggle_numeric),                    		spinner1);		gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);				val_label = gtk_label_new ("");				hbox = gtk_hbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);		button = gtk_button_new_with_label ("整数值");		gtk_object_set_user_data (GTK_OBJECT (button), val_label);		gtk_signal_connect (GTK_OBJECT (button), "clicked",                    		GTK_SIGNAL_FUNC (get_value),                    		GINT_TO_POINTER (1));		gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);				button = gtk_button_new_with_label ("小数值");		gtk_object_set_user_data (GTK_OBJECT (button), val_label);		gtk_signal_connect (GTK_OBJECT (button), "clicked",                    		GTK_SIGNAL_FUNC (get_value),                    		GINT_TO_POINTER (2));		gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);				gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);		gtk_label_set_text (GTK_LABEL (val_label), "0");				hbox = gtk_hbox_new (FALSE, 0);		gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);				button = gtk_button_new_with_label ("关闭");		gtk_signal_connect_object (GTK_OBJECT (button), "clicked",                           		GTK_SIGNAL_FUNC (gtk_widget_destroy),                           		GTK_OBJECT (window));		gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);				gtk_widget_show_all (window);				gtk_main ();    		 		return(0);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -