33492


### main.c

[code]

    #include <gtk/gtk.h>
    
    static void hoge(GtkWidget *widget,gchar *text)
    {
    
    }
    
    
    int main(int argc, char** argv)
    {
      GtkWidget *window;
      GtkWidget *vbox;
      GtkWidget *hbox;
      GtkWidget *sw;
      GtkWidget *textview;
    
      gtk_init(&argc, &argv);
    
      window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title(GTK_WINDOW(window), "質問です。");
      g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
      vbox = gtk_vbox_new(GTK_ORIENTATION_VERTICAL, 5);
      gtk_container_add(GTK_CONTAINER(window), vbox);
    
      sw = gtk_scrolled_window_new(NULL, NULL);
      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
      gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
    
      textview = gtk_text_view_new();
      gtk_container_add(GTK_CONTAINER(sw), textview);
      hoge(textview,"");
    
      hbox = gtk_hbox_new(GTK_ORIENTATION_HORIZONTAL, 5);
      gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
    
      gtk_widget_show_all(window);
      gtk_main();
    
      return 0;
    }
    
[/code]

**質問内容は以下の２つです。**  
1\. swを大きくし,hboxを小さくするにはどうすればよいか？  
2\. スクロールバーは既存のものとして、他のデザインはないか？


CC BY-SA 3.0
2017-03-23T12:40:07.977
33491
2017-03-23T13:40:38.327
2017-03-23T13:24:14.793
5288
21169
question
c gtk
GTKのスクロールバーについて。


1つめの質問について、まずコードを提示しておきます。

[code]

    #include <gtk/gtk.h>
    
    static void hoge(GtkWidget *widget,gchar *text)
    {
    
    }
    
    int main(int argc, char** argv)
    {
        GtkWidget *window;
        GtkWidget *vbox;
        GtkWidget *hbox;
        GtkWidget *sw;
        GtkWidget *textview;
    
        gtk_init(&argc, &argv);
    
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), "質問です。");
        g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
        vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
        gtk_widget_set_size_request(vbox, 200, 150);
        gtk_container_add(GTK_CONTAINER(window), vbox);
    
        sw = gtk_scrolled_window_new(NULL, NULL);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
        gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
    
        textview = gtk_text_view_new();
        gtk_container_add(GTK_CONTAINER(sw), textview);
        hoge(textview,"");
    
        hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
    
        /*
        GtkWidget *label = gtk_label_new("test");
        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
    */
    
        gtk_widget_show_all(window);
        gtk_main();
    
        return 0;
    }
    
[/code]

gtk の box を作る関数は以下の2種類があります。

  * `gtk_vbox_new()`, `gtk_hbox_new()` のように、関数名に v, h を含むもの
  * `gtk_box_new()` のように、引数で横か縦かを指定するもの

今回は、質問者さんのコードでは引数で指定していたので、引数で指定する方にしました。

サイズは vbox の方に指定しています。

2つめの質問については、どういったデザインがお好みなのか解らないのと、私自身デザインに疎いので、省略させていただきます。


CC BY-SA 3.0
2017-03-23T13:40:38.327
33492
2017-03-23T13:40:38.327
5288
33491
answer