progressbar.c

来自「开发linux应用-用gtk+和gdk开发linux图形用户界面应用--的实例」· C语言 代码 · 共 142 行

C
142
字号
/* * Progress bar * * This is from the gtk.  A better example will follow. */#include <gtk/gtk.h>typedef struct {    GtkWidget *progressbar;    GtkWidget *window;    int bProgressUp;    int nLastPct;} typProgressData;typProgressData *pdata = NULL;/* * CanWindowClose * * Function that determines that if the dialog * window can be closed. */gint CanWindowClose (GtkWidget *widget){    /* --- TRUE => cannot close --- */    /* --- FALSE => can close --- */    return (pdata->bProgressUp);}/* * UpdateProgress * * Update the progress window to reflect the state * of the file that is being loaded.   * * pos - how much of the file has been loaded. * len - length of the file * (pos / len) = % file has been loaded. */void UpdateProgress (long pos, long len){    gfloat pvalue;    int pct;     /* --- Prevent divide by zero errors --- */    if (len > 0) {        /* --- Calculate the percentage --- */        pvalue = (gfloat) pos / (gfloat) len;            pct = pvalue * 100;        if (pdata->nLastPct != pct) {            /* --- Update the displayed value --- */            gtk_progress_set_percentage (GTK_PROGRESS (pdata->progressbar),                                          pvalue);            /* --- Repaint any windows - like the progress bar --- */            while (gtk_events_pending ()) {                gtk_main_iteration ();            }            pdata->nLastPct = pct;        }    }}/* * StartProgress  * * Create a window for the progress bar */void StartProgress (){    GtkWidget *label;    GtkWidget *table;    GtkWidget *window;    GtkAdjustment *adj;    pdata = g_malloc (sizeof (typProgressData));    pdata->nLastPct = -1;    pdata->bProgressUp = TRUE;    /*     * --- Create the top level window     */    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);    pdata->window = window;        /* --- Hook up the destroy  --- */    gtk_signal_connect (GTK_OBJECT (window), "delete_event",			GTK_SIGNAL_FUNC (CanWindowClose), pdata);        gtk_container_border_width (GTK_CONTAINER (window), 10);        /* --- Create a table --- */    table = gtk_table_new(3,2,TRUE);    gtk_container_add (GTK_CONTAINER (window), table);        /* --- Add a label to the table --- */    label = gtk_label_new ("Loading...");    gtk_table_attach_defaults (GTK_TABLE (table), label, 0,2,0,1);    gtk_widget_show (label);        /* --- Add the progress bar to the table --- */    adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 100, 0, 0, 0);    pdata->progressbar = gtk_progress_bar_new_with_adjustment (adj);    gtk_table_attach_defaults (GTK_TABLE (table),                                pdata->progressbar, 0,2,1,2);    gtk_widget_show (pdata->progressbar);        /* --- Show everything --- */    gtk_widget_show (table);    gtk_widget_show (window);}/* * EndProgress * * Close down the progress bar. */void EndProgress (){    /* --- Allow it to close --- */    pdata->bProgressUp = FALSE;    /* --- Destroy the window --- */    gtk_widget_destroy (pdata->window);    /* --- Free used memory. --- */    g_free (pdata);    pdata = NULL;}

⌨️ 快捷键说明

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