默认情况下,让GtkScrolledWindow显示所有子项

时间:2009-01-14 18:15:13

标签: c gtk scroll

如何通过尽可能多的增长来初始化GtkScrolledWindow以避免滚动条?

默认情况下,它似乎尽可能小。

演示代码(使用SIGINT退出):

#include <gtk/gtk.h>

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

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    sw = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
            GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
    gtk_container_add(GTK_CONTAINER(window), sw);
    gtk_widget_show(sw);

    content = gtk_button_new_with_label("This is a very, very"
            "very very very very very very very very long text");
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), content);
    gtk_widget_show(content);

    gtk_widget_show(window);
    gtk_main();

    return 0;
}

2 个答案:

答案 0 :(得分:1)

我认为这两者都有效,并且不是一个丑陋的黑客(很多):

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

    GtkRequisition size;
    GtkWidget* viewport;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    sw = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
            GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
    gtk_container_add(GTK_CONTAINER(window), sw);
    gtk_widget_show(sw);

    content = gtk_button_new_with_label("This is a very, very"
            "very very very very very very very very long text");
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), content);
    gtk_widget_show(content);

    gtk_widget_show(window);

    viewport = gtk_widget_get_ancestor(content, GTK_TYPE_VIEWPORT);
    gtk_widget_size_request(viewport, &size);
    gtk_widget_set_size_request(sw, size.width, size.height);

    gtk_main();

    return 0;
}

答案 1 :(得分:0)

我不确定这样做的正确方法是什么,但我发现对我来说最有效的方法是设置窗口的大小,其中包含的小部件通常可以正确调整大小:

gtk_window_set_default_size(GTK_WINDOW(window), 1000, 500);

或者,您可以设置GtkScrolledWindow的大小:

gtk_widget_set_size_request(window, 500, 250);

请注意,特别是在最后一种情况下,在计算大小(以像素为单位)时,可能必须考虑本地化,字体大小和其他此类细节。