스크롤바 를 어찌 넣어야 할지........ㅜ.ㅜ

hbhha의 이미지

제가 요즘 GTK+로 탐색기를 만드는중입니다..
그런데..탐색기에서 보면..왼쪽창은 트리창..오른쪽 창은..파일보이는 창입니다..
그런데..트리창에는 스크롤바를 만들었는데..오른쪽 파일보이는 창에는 스크롤바가 안생깁니다..
어찌 해야 되는지 아시는분 조언좀..
제가 초보거든요.
너무 잘 안되니 힘드네요...
아시는분 자세한 설명 부탁드립니다...
좀더 자세히 알려주셔서..소스의 어디를 이렇게 한번 고쳐보라고 해주심 더욱더 고맙고요....^^;;
그럼 즐거운 날 되세요!!

소스...

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <gtk/gtk.h>

#define MAX_PATH 1024

static void PopulateListbox (char *szPath);

GtkWidget *listbox;



void AddListItem (GtkWidget *listbox, char *sText)
{
    GtkWidget *item;

   
    item = gtk_list_item_new_with_label (sText);

    
    gtk_container_add (GTK_CONTAINER (listbox), item);
 
    
    gtk_widget_show (item);
}


int IsDirectory (char *buffer)
{
    struct stat buf;

    if (stat (buffer, &buf) < 0) {

       
        return (FALSE);
    }

   
    return (S_ISDIR (buf.st_mode));
}


void select_item (GtkWidget *widget, gpointer data)
{
    printf ("item selected %s\n", (char *) data);
  
    PopulateListbox ((char *) data);
}

 
static void CreateSubtree (char *szPath, char *szDir, GtkWidget* item)
{
    DIR *directory;
    struct dirent *dirEntry;
    GtkWidget* item_subtree = NULL;
    GtkWidget* item_new;
    char buffer[MAX_PATH];

    directory = opendir (szPath);

    while (dirEntry = readdir (directory)) {

      
        if (!strcmp (dirEntry->d_name, "..") ||
            !strcmp (dirEntry->d_name, ".")) {

          
        } else {

          
            sprintf (buffer, "%s/%s", szPath, dirEntry->d_name); 

          
            if (IsDirectory (buffer)) {

                if (item_subtree == NULL) {

                    
                    item_subtree = gtk_tree_new ();

                    
                    gtk_tree_item_set_subtree (GTK_TREE_ITEM (item), item_subtree);
                }

                
                item_new = gtk_tree_item_new_with_label (dirEntry->d_name);

              
		gtk_tree_append (GTK_TREE (item_subtree), item_new);

              
                CreateSubtree (buffer, dirEntry->d_name, item_new); 

              
                gtk_widget_show (item_new);

              
                gtk_signal_connect (GTK_OBJECT (item_new), 
                        "select",
                        GTK_SIGNAL_FUNC (select_item), 
                        g_strdup (buffer));

            }
        }
    }

  
    closedir (directory);

    gtk_widget_show (item);
}


 
static void PopulateListbox (char *szPath)
{
    DIR *directory;
    struct dirent *dirEntry;
    char buffer[MAX_PATH];

   
    gtk_list_clear_items (GTK_LIST (listbox), 
                          0, 
                          g_list_length (GTK_LIST (listbox)->children));

   
    directory = opendir (szPath);

  
    while (dirEntry = readdir (directory)) {

       
        if (!strcmp (dirEntry->d_name, "..") ||
            !strcmp (dirEntry->d_name, ".")) {

            
        } else {

           
            sprintf (buffer, "%s/%s", szPath, dirEntry->d_name); 

           
            if (!IsDirectory (buffer)) {

               
                AddListItem (listbox, dirEntry->d_name);
            }
        }
    }

   
    closedir (directory);
}


static void CreateTree (GtkWidget *window)
{
    char buffer[MAX_PATH];
    GtkWidget *hbox;
    GtkWidget *vbox;
    GtkWidget *scrolled_win_left;
    GtkWidget *tree;
    GtkWidget *leaf;

    hbox = gtk_hbox_new (FALSE, 5);
    gtk_container_add (GTK_CONTAINER (window),hbox);
    gtk_widget_show (hbox);

  
    vbox = gtk_vbox_new(FALSE, 5);
    
    gtk_box_pack_start(GTK_BOX(hbox),vbox, TRUE, TRUE, 0);
    gtk_container_border_width(GTK_CONTAINER(vbox), 5);
    gtk_widget_show(vbox);

    
    scrolled_win_left = gtk_scrolled_window_new (NULL, NULL); 
    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win_left),
                              GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
			      
     gtk_box_pack_start (GTK_BOX (vbox), scrolled_win_left, TRUE, TRUE, 0);
 
     gtk_widget_set_usize (scrolled_win_left, 250, 250);
 
    
  
    gtk_widget_show (scrolled_win_left);
  
 
    tree = gtk_tree_new();
    
    listbox = gtk_list_new ();
    gtk_widget_set_usize (listbox, 250, 250);
    gtk_box_pack_start (GTK_BOX (hbox), listbox, TRUE, TRUE, 0);
    gtk_widget_show (listbox);

    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_win_left),tree);
  
    gtk_widget_show (tree);

    
    leaf = gtk_tree_item_new_with_label (
                   getcwd (buffer, sizeof (buffer)));
    
    gtk_tree_append (GTK_TREE (tree), leaf);

  
    gtk_widget_show (leaf);

    CreateSubtree (getcwd (buffer, sizeof (buffer)), 
                   getcwd (buffer, sizeof (buffer)), leaf);

   
    gtk_widget_show (window);
}


void delete_event (GtkWidget *widget, gpointer *data)
{
    gtk_main_quit ();
}


int main (int argc, char *argv[])
{
    GtkWidget *window;

  
    gtk_init (&argc, &argv);

    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

   
    gtk_window_set_title (GTK_WINDOW (window), "탐색기테스트");

 
    gtk_widget_set_usize (window, 250, 250);

    
    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                        GTK_SIGNAL_FUNC (delete_event), NULL);
    
    gtk_widget_show (window);

    CreateTree (window);
   
    gtk_main ();

    return 0;
}

Makefile

CC = gcc -Wall

all: tree 

tree: tree.c 
	$(CC) `gtk-config --cflags` `gtk-config --libs` tree.c -o tree

clean: 
	rm -f *.o tree

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.