2011-12-04 17 views
0

私の最初のGUIエクスペリエンスは、Xaw`とXlibで1996年に戻りました。 2004年以降、私はあきらめてCLIに戻りました。今、私は、下の "0"で始まる小さなGUI "widget [?]"を作成する必要があります。 "inc"と "dec"という2つのボタンがあります。この上には、上部に_gtkの文字列の周りに "境界線"を作成する方法はありますか?

ファイル名文字列である ___

INC]/[DEC]キーでファイル名を増加/減少させます。

例えば、話すにおけるユーザーの種類は、一番下に、「0」が

speak.0.textなる場合。拡大/縮小ボタンは、下の文字列を上下に変更します。0未満ではありません。

"0"または ".0.text"を目立たせようとしています。 GTKボタンに.N.text。gccのいずれかのコアまたはコンパイルすることを拒否。

誰もがそれを目立たせる「0」またはその他の周囲に境界線を配置する方法を提案することができますか?

感謝をmuchly。

答えて

2

ボーダーの種類のエフェクトがすぐに利用できるのかどうかわかりませんが、Pango Markupを高くして使用できるフォント関連の変更が他にもありますgtk_label_set_markupを使用してテキストを点灯させます。カウンタが0になったときにデクリメントボタンをgtk_widget_set_sensitiveを使用して無感応にすることもできます。参考用のサンプルコードは次のとおりです。

/* 
* Compilation : gcc `pkg-config --cflags --libs gtk+-2.0` -Wall -Wextra -Werror label-sample.c -o label-sample 
*/ 

#include <gtk/gtk.h> 
#include <string.h> 

static int counter = 0; 
static GtkWidget *label; 
static char *suffix = ".txt"; 
static char *prefix; 


static void 
update_label(void) 
{ 
    char buffer[1024]; 
    memset(&buffer, 0, sizeof buffer); 

    /*If counter is < 1, use markup to highlight text*/ 
    if(counter < 1) 
    { 
     if(prefix) 
      g_snprintf(buffer, 1023, "<span foreground=\"red\" background=\"yellow\" size=\"x-large\">%s%d%s</span>",prefix, counter, suffix); 
     else 
      g_snprintf(buffer, 1023, "<span foreground=\"red\" background=\"yellow\" size=\"x-large\">%d%s</span>", counter, suffix); 
     gtk_label_set_markup(GTK_LABEL(label), buffer); 
    } 
    else 
    { 
     if(prefix) 
      g_snprintf(buffer, 1023, "%s%d%s", prefix, counter, suffix); 
     else 
      g_snprintf(buffer, 1023, "%d%s", counter, suffix); 
     gtk_label_set_label(GTK_LABEL(label), buffer); 
    } 
} 

static void 
inc_button_click_cb(GtkButton *button, gpointer data) 
{ 
    (void)button; 
    GtkWidget *dec_button = data; 
    counter++; 
    /* Change senstivity of the decrement button based on counter*/ 
    if(counter > 0 && !gtk_widget_is_sensitive(dec_button)) 
     gtk_widget_set_sensitive(dec_button, TRUE); 
    /* Update label to show updated counter */ 
    update_label(); 
    return; 
} 

static void 
dec_button_click_cb(GtkButton *button, gpointer data) 
{ 
    (void)data; 
    counter--; 
    /* Change senstivity of the decrement button based on counter*/ 
    if(counter < 1 && gtk_widget_is_sensitive(GTK_WIDGET(button))) 
     gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE); 
    /* Update label to show updated counter */ 
    update_label(); 
    return; 
} 


static void 
entry_changed_cb(GtkEditable *editable, gpointer data) 
{ 
    (void)data; 
    /* Caller has to free the text, so call g_free */ 
    g_free(prefix); 
    /* Get the complete text */ 
    prefix=gtk_editable_get_chars(editable,0, -1); 
    /* Update label to show updated prefix */ 
    update_label(); 
    return; 
} 

int main(void) 
{ 
    GtkWidget *button_inc; 
    GtkWidget *button_dec; 
    GtkWidget *entry_label; 
    GtkWidget *entry; 
    GtkWidget *window; 
    GtkWidget *vbox; 

    gtk_init(NULL, NULL); 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    vbox = gtk_vbox_new(FALSE, 5); 
    gtk_container_add(GTK_CONTAINER(window), vbox); 

    label = gtk_label_new(""); 
    update_label(); 

    button_dec = gtk_button_new_with_label("Decrease counter"); 
    g_signal_connect(button_dec, "clicked", G_CALLBACK(dec_button_click_cb), NULL); 
    gtk_widget_set_sensitive(button_dec, FALSE); 

    button_inc = gtk_button_new_with_label("Increase counter"); 
    g_signal_connect(button_inc, "clicked", G_CALLBACK(inc_button_click_cb), button_dec); 

    entry_label = gtk_label_new("Entry prefix to be displayed in the entry below:"); 

    entry = gtk_entry_new(); 
    g_signal_connect(entry,"changed", G_CALLBACK(entry_changed_cb), NULL); 

    gtk_box_pack_start(GTK_BOX(vbox), label, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), button_inc, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), button_dec, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), entry_label, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), entry, 0, 0, 0); 

    gtk_widget_show_all(window); 

    gtk_main(); 

    g_free(prefix); 

    return 0; 
} 

+0

Bzzt!私は「すべてに感謝しました」と言い、上のコードについて編集して別の質問をしました。静的なchar *接頭辞に入るように修正しました。接頭辞はファイル名です。 「チャット」または「トーク」または「コミュニケーション」と言ってください。私の追加によって、エントリースペースに入力された何かが爆発する原因となります。私の追加を投稿する場所は? –

+0

編集ボタンを使用して質問を編集できます。それ以外の場合は、すでに行ったようにコメントを追加できます。少し明確にできますか、問題を正確に理解することはできません。静的なchar *接頭辞はどこから読み込みますか? –

+0

hm。あなたが私のファイルを読み込めて、あなたから少し修正して、can -nを実行すると、あなたは見た:「ファイル名の接頭辞を以下に入力してください:」 –

関連する問題