GTK+ --进度条相关函数练习

来源:互联网 发布:ip地址代理软件 编辑:程序博客网 时间:2024/06/06 22:38

最近刚开始学GTK+图形界面编程,练习使用了有关进度条的函数,分享一下=_=

/*************************************************************************    > File Name: table.c    > Author: Tanswer_    > Mail: 98duxm@gmail.com    > Created Time: 2016年08月01日 星期一 09时48分59秒 ************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <gtk/gtk.h>void destroy(GtkWidget *widget,gpointer *data){    gtk_main_quit();}/*回调函数*/void toggle_orientation(GtkWidget *widget,gpointer data){/*得到进度条原来的方向*/    switch(gtk_progress_bar_get_orientation(GTK_PROGRESS_BAR(data)))    {        case GTK_PROGRESS_LEFT_TO_RIGHT:                /*设置为与原来相反的方向*/            gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(data),GTK_PROGRESS_RIGHT_TO_LEFT);            break;        case GTK_PROGRESS_RIGHT_TO_LEFT:            gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(data),GTK_PROGRESS_LEFT_TO_RIGHT);            break;        dafault:              break;    }}//更新进度条,这样就能够看到进度条的移动void callback(GtkWidget *widget,gpointer data){    //在原来的基础上加0.01     gdouble new_val; new_val=gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(data))+0.01;    if(new_val > 1.0) //越界处理        new_val = 0.0;    //设置进度条的新值    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data),new_val);}int main(int argc,char **argv){    GtkWidget *window;    GtkWidget *vbox;    GtkWidget *bar;    GtkWidget *button1;    GtkWidget *button2;    //初始化图形环境    gtk_init(&argc,&argv);    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(destroy),NULL);    /*设置窗口标题*/    gtk_window_set_title(GTK_WINDOW(window),"GtkProgressBar");    gtk_container_border_width(GTK_CONTAINER(window),50);    g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);    vbox = gtk_vbox_new(FALSE,5);    gtk_container_add(GTK_CONTAINER(window),vbox);    /*创建一个进度条*/    bar = gtk_progress_bar_new();    /*将进度条放入box容器中*/    gtk_box_pack_start(GTK_BOX(vbox),bar,FALSE,FALSE,0);    //设置进度条显示的百分比为50%    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(bar),0.5);    //设置进度条的滑槽上的文本显示    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(bar),"text");    //按钮1,切换进度条的方向    button1 = gtk_button_new_with_label("切换方向");    gtk_container_add(GTK_CONTAINER(vbox),button1);    g_signal_connect(GTK_OBJECT(button1),"clicked",GTK_SIGNAL_FUNC(toggle_orientation),bar);    //按钮2,移动进度条    button2 = gtk_button_new_with_label("移动进度条");    gtk_box_pack_start(GTK_BOX(vbox),button2,TRUE,TRUE,15);    g_signal_connect(button2,"clicked",G_CALLBACK(callback),bar);    /*显示所有窗口*/    gtk_widget_show_all(window);    /*主事件循环*/    gtk_main();    return 0;}

执行结果:

执行结果

1 0