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

📄 box.c

📁 这些GTK+程序都是基于常用的API来实现熟悉这些API为目的
💻 C
📖 第 1 页 / 共 2 页
字号:
	label = gtk_label_new( "Padding: " );  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);	settingsData.pad_entry = entry = gtk_entry_new();  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);	sprintf( buf, "%d", ((BoxData *) current->data)->padding );	gtk_entry_set_text( GTK_ENTRY(entry), buf ); 	hbox = gtk_hbox_new (FALSE, 1);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->vbox),    hbox, FALSE, FALSE, 0);	label = gtk_label_new( "Spacing: " );  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);	settingsData.space_entry = entry = gtk_entry_new();	sprintf( buf, "%d", ((BoxData *) current->data)->spacing );	gtk_entry_set_text( GTK_ENTRY(entry), buf );  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);	// fill in the buttons  button = gtk_button_new_with_label ("OK");  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area),    button, FALSE, FALSE, 0);  gtk_signal_connect(GTK_OBJECT (button), "clicked", 	  GTK_SIGNAL_FUNC(ClickedCallback), NULL);  button = gtk_button_new_with_label ("Cancel");  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area),    button, FALSE, FALSE, 0);  gtk_signal_connect(GTK_OBJECT(button), "clicked",    GTK_SIGNAL_FUNC(CancelCallback), dialog_window);  gtk_widget_show_all (dialog_window);}// menu-related codeGtkItemFactory *item_factory;// make sure settings menu checkboxes jive with settings of current boxvoidResetSettingsMenuItems( void ){	GtkCheckMenuItem *item; 	item = (GtkCheckMenuItem *) gtk_item_factory_get_widget(item_factory, 		"/Settings/Homogeneous");	item->active = ((BoxData *) current->data)->homogeneous;	item = (GtkCheckMenuItem *) gtk_item_factory_get_widget(item_factory, 		"/Settings/Expand");	item->active = ((BoxData *) current->data)->expand;	item = (GtkCheckMenuItem *) gtk_item_factory_get_widget(item_factory, 		"/Settings/Fill");	item->active = ((BoxData *) current->data)->fill;}// callback for Options menu itemsstatic void handle_option( gpointer data, guint callback_action, GtkWidget *w ){	GtkCheckMenuItem *item = (GtkCheckMenuItem *) w;	gboolean homogeneous;	switch( callback_action )	{	case 1:		((BoxData *) current->data)->expand = item->active; 		break;	case 2:		((BoxData *) current->data)->fill = item->active; 		break;	case 3:		((BoxData *) current->data)->homogeneous = 			homogeneous = item->active; 		gtk_box_set_homogeneous(GTK_BOX(((BoxData *) 			current->data)->container), homogeneous);		break;	case 4:		GetPaddingAndSpacing();		break;	}	UpdateChildren();}static voidMoveClickedCallback(GtkWidget *widget, gpointer unused){	char *data;	int start, end;	data = gtk_entry_get_text( GTK_ENTRY(settingsData.pad_entry) );	start = atoi( data );	data = gtk_entry_get_text( GTK_ENTRY(settingsData.space_entry) );	end = atoi( data );	gtk_widget_destroy( settingsData.dialog );}// move child widgetstatic void move_child( gpointer data, guint callback_action, GtkWidget *w ){  GtkWidget *button, *label, *entry, *hbox, *dialog_window;	char buf[ 64 ];		// create the dialog and set attributes  settingsData.dialog = dialog_window = gtk_dialog_new();	gtk_window_set_modal(GTK_WINDOW(dialog_window), TRUE);  gtk_window_position(GTK_WINDOW (dialog_window), GTK_WIN_POS_MOUSE); 	gtk_window_set_title(GTK_WINDOW(dialog_window), "Move Child");	// fill in the content area 	hbox = gtk_hbox_new (FALSE, 1);	gtk_box_set_homogeneous( GTK_BOX( hbox ), FALSE );  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->vbox),    hbox, FALSE, FALSE, 0);	label = gtk_label_new( "Start: " );  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);	settingsData.pad_entry = entry = gtk_entry_new();  gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);	sprintf( buf, "%d", ((BoxData *) current->data)->padding );	gtk_entry_set_text( GTK_ENTRY(entry), buf ); 	hbox = gtk_hbox_new (FALSE, 1);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->vbox),    hbox, FALSE, FALSE, 0);	label = gtk_label_new( "End: " );  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);	settingsData.space_entry = entry = gtk_entry_new();	sprintf( buf, "%d", ((BoxData *) current->data)->spacing );	gtk_entry_set_text( GTK_ENTRY(entry), buf );  gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);	// fill in the buttons  button = gtk_button_new_with_label ("OK");  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area),    button, FALSE, FALSE, 0);  gtk_signal_connect(GTK_OBJECT (button), "clicked", 		GTK_SIGNAL_FUNC(MoveClickedCallback), NULL);  button = gtk_button_new_with_label ("Cancel");  gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area),    button, FALSE, FALSE, 0);  gtk_signal_connect(GTK_OBJECT(button), "clicked",    GTK_SIGNAL_FUNC(CancelCallback), dialog_window);  gtk_widget_show_all (dialog_window);}static voidshow_about( gpointer data, guint callback_action, GtkWidget *w ){	char	buf[128];	sprintf( buf, "Gtk+ Box Office Version %d.%d Copyright 2000, Syd Logan",		VERSION_MAJOR, VERSION_MINOR );	MessageBox(buf);}// menu definition based on item factorystatic GtkItemFactoryEntry menu_items[] = { 	{ "/_File", NULL, NULL, 0, "<Branch>" }, 	{ "/File/Quit", "<control>Q", gtk_main_quit, 0, NULL }, 	{ "/Settings", NULL, NULL, 0, "<Branch>" }, 	{ "/Settings/Expand", NULL, handle_option, 1, "<CheckItem>" }, 	{ "/Settings/Fill", NULL, handle_option, 2, "<CheckItem>" }, 	{ "/Settings/Homogeneous", NULL, handle_option, 3, "<CheckItem>" }, 	{ "/Settings/sep1",     NULL,         NULL, 0, "<Separator>" }, 	{ "/Settings/Padding and Spacing...", NULL, handle_option, 4, "" }, 	{ "/_Traverse", NULL, NULL, 0, "<Branch>" }, 	{ "/Traverse/Up", NULL, go_up, 0, NULL }, 	{ "/Traverse/Down", NULL, go_down, 0, NULL }, 	{ "/Traverse/Next", NULL, go_next, 0, NULL }, 	{ "/Traverse/Previous", NULL, go_previous, 0, NULL }, 	{ "/Add _Box", NULL, NULL, 0, "<Branch>" }, 	{ "/Add Box/Vertical Box, Start", NULL, add_vert_box, 0, NULL }, 	{ "/Add Box/Vertical Box, End", NULL, add_vert_box, 1, NULL }, 	{ "/Add Box/Horizontal Box, Start", NULL, add_horz_box, 0, NULL }, 	{ "/Add Box/Horizontal Box, End", NULL, add_horz_box, 1, NULL }, 	{ "/Add _Child", NULL, NULL, 0, "<Branch>" }, 	{ "/Add Child/Pack Start", NULL, add_button_to_box_start, 0, NULL }, 	{ "/Add Child/Pack End", NULL, add_button_to_box_end, 0, NULL }, 	{ "/Add Child/Move child", NULL, move_child, 0, NULL }, 	{ "/_View", NULL, NULL, 0, "<Branch>" }, 	{ "/View/Tree", NULL, dump_tree, 0, NULL },	{ "/_Help",         NULL,         NULL, 0, "<LastBranch>" }, 	{ "/Help/About...", NULL, show_about, 0, NULL }};// create menu bar and menus using item factoryvoid get_main_menu( GtkWidget  *window, GtkWidget **menubar ){ 	GtkAccelGroup *accel_group; 	gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); 	GtkWidget *widget; 	accel_group = gtk_accel_group_new (); 	item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, 		"<main>", accel_group ); 	gtk_item_factory_create_items(item_factory, nmenu_items, 		menu_items, NULL); 	gtk_accel_group_attach (accel_group, GTK_OBJECT (window)); 	if (menubar)   		*menubar = gtk_item_factory_get_widget (item_factory, "<main>");}// mainint main( int argc, char *argv[] ){ 	GtkWidget *window, *menubar, *button, *widget, *vbox; 	GdkColormap *default_colormap;	char buf[64];	BoxData *boxData; 	gtk_init(&argc, &argv);  	window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 	gtk_signal_connect(GTK_OBJECT(window), "destroy",     GTK_SIGNAL_FUNC (gtk_main_quit), "WM destroy");	sprintf( buf, "Gtk+ Box Office %d.%d", VERSION_MAJOR, VERSION_MINOR ); 	gtk_window_set_title(GTK_WINDOW(window), buf); 	gtk_widget_set_usize(GTK_WIDGET(window), 640, 480); 	vbox = gtk_vbox_new (FALSE, 1); 	gtk_container_add(GTK_CONTAINER (window), vbox); 	gtk_widget_show( vbox ); 	get_main_menu(window, &menubar); 	gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); 	gtk_widget_show(menubar); 	boxData = g_malloc( sizeof( BoxData ) ); 	root = current = g_node_new( (gpointer) boxData ); 	container = boxData->container = gtk_vbox_new (FALSE, 0);	boxData->homogeneous = FALSE;	boxData->fill = TRUE;				boxData->expand = TRUE;	boxData->padding = 0;	boxData->spacing = 0;	ResetSettingsMenuItems(); 	gtk_container_add(GTK_CONTAINER(vbox), container); 	gtk_widget_show(container); 	gtk_widget_show(window); 	gtk_main ();  	return(0);}/* * Simple MessageBox */voidMessageBox( char *message ){  static GtkWidget *label, *button, *dialog_window = (GtkWidget *) NULL;  if ( dialog_window == (GtkWidget *) NULL ) {    dialog_window = gtk_dialog_new();    gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",      GTK_SIGNAL_FUNC(gtk_widget_destroyed), &dialog_window);    gtk_window_set_title (GTK_WINDOW (dialog_window), "Message");    gtk_container_border_width (GTK_CONTAINER (dialog_window), 0);    button = gtk_button_new_with_label ("OK");    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);    gtk_box_pack_start (      GTK_BOX (GTK_DIALOG (dialog_window)->action_area),      button, TRUE, TRUE, 0);    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",      GTK_SIGNAL_FUNC (gtk_widget_hide_all),      GTK_OBJECT (dialog_window));    label = gtk_label_new (message);    gtk_misc_set_padding (GTK_MISC (label), 10, 10);    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),    label, FALSE, FALSE, 0);  } else    gtk_label_set_text( GTK_LABEL(label), message );  gtk_window_position (GTK_WINDOW (dialog_window), GTK_WIN_POS_MOUSE);  gtk_widget_grab_default (button);  gtk_widget_show_all (dialog_window);}

⌨️ 快捷键说明

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