第115页的gtk+编程例子——最简单的进度条

以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第115页的内容——最简单的进度条
将之前的进度条程序缩减代码,看看最简单的进度条的代码有那些,是如何运作的,理解一下结构体的使用,我也不是很明白ProgressData *pdata = data;这句的作用

在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc -g -Wall test115.c -o test115 pkg-config --cflags --libs gtk+-3.0 > mistake.text 2>&1 ; gedit mistake.text
ruhong@localhost:~/gtk> ./test115

/* the example on page 115 */
#include <gtk/gtk.h>

/* 准备材料,自定义函数  */
	/*  comments注释  */
	
typedef struct _ProgressData {
	GtkWidget *window;
	GtkWidget *pbar;
	int timer;
} ProgressData;
	/*  结构体,原名是_ProgressData,别名是ProgressData  */
gint progress_timeout (gpointer data)
{
	ProgressData *pdata = data;
	/*  这句内容我也不是很明白,  */
	gfloat pbar_value = 0;
	/*  声明pbar_value类型为浮点变量,就是含有小数点的数值,而且设定初始值为0  */
	pbar_value = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (pdata->pbar)) + 0.01;
	/*  在pbar_value原有值的基础上加上0.01  */
	if (pbar_value > 1.0) {
		pbar_value = 0;
	}
	/*  当pbar_value大于1时,就重设值为0, 这样会使进度条无限循环  */
	gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), pbar_value);
	/* 更新进度条,pbar_value值就是决定蓝色进度条的长度 */
	return TRUE;
}

void
destroy_progress (GtkWidget *widget, ProgressData *pdata)
{
	g_source_remove (pdata->timer);
	pdata->timer = 0;
	pdata->window = NULL;
	g_free (pdata);
	/* 释放内存 */
	gtk_main_quit ();
}

/* 程序主体 */
int
main (int argc, char *argv[])
{

	ProgressData *pdata;
	gtk_init (&argc, &argv);
	
	pdata = g_malloc (sizeof (ProgressData));
	/* 为传递到回调函数中的数据分配内存 */
	pdata->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title (GTK_WINDOW (pdata->window), "进度条progressbar");
	/*  为窗口顶部加上标题为templet3  */
	gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 50);
	/* 简单的理解是将窗口变成容器,可以装入其它构件,构件边缘与窗口边缘的距离为50像数  */
	g_signal_connect (G_OBJECT (pdata->window), "destroy", G_CALLBACK (destroy_progress), pdata);
	
	pdata->pbar = gtk_progress_bar_new ();
	/* 创建新的进度条 */
	gtk_container_add (GTK_CONTAINER(pdata->window), pdata->pbar);
	/*  将进度条装入窗口容器 */
	gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (pdata->pbar), TRUE);
	/* 设置进度条的属性是可以显示文字 */
	gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar), "Some Text");
	/* 设置进度条的显示文字的内容是Some Text */
	pdata->timer = g_timeout_add (200, progress_timeout, pdata);
	/* 加一个定时器每隔200毫秒就运行一次progress_timeout程序 */			
	gtk_widget_show_all (pdata->window);
	gtk_main ();
	return 0;
}

效果图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值