鱼C论坛

 找回密码
 立即注册
查看: 2055|回复: 0

[技术交流] C语言GUI程序设计-GTK图文系列-GtkWidget之容器(五)

[复制链接]
发表于 2014-10-29 21:11:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这一节主要讲解GtkOverlay和GtkScrolledWindow的使用。

GtkOverlay

GtkOverlay 为子部件提供一种z轴布局方式,可以让一个部件放在另一个部件的“上面“(相对z轴),类似于html中的z-index设置。

如图,一个button铺满窗口,button上面有一个label和entry:
gtk_overlay.png


例程:
#include <gtk/gtk.h>

int main(int argc,char *argv[])
{
    GtkWidget *window,*overlay;
    GtkWidget *button1,*label1,*entry1;
    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"hello fishc - GtkOverlay");
    gtk_widget_set_size_request(window,300,200);

    overlay = gtk_overlay_new();
    gtk_container_add(GTK_CONTAINER(window), overlay);

    button1 = gtk_button_new_with_label("button1");
    label1 = gtk_label_new("label1");
    entry1 = gtk_entry_new();

    gtk_container_add(GTK_CONTAINER(overlay), button1);
    gtk_overlay_add_overlay(GTK_OVERLAY(overlay), label1);
    gtk_overlay_add_overlay(GTK_OVERLAY(overlay), entry1);

    gtk_widget_set_valign(label1 , GTK_ALIGN_START);
    gtk_widget_set_halign(label1 , GTK_ALIGN_CENTER);

    gtk_widget_set_valign(entry1 , GTK_ALIGN_END);
    gtk_widget_set_halign(entry1 , GTK_ALIGN_CENTER);

    gtk_widget_show_all(window);
    gtk_main ();

    return 0;
}
gtk_overlay_add_overlay函数用来添加子部件,这个函数添加的子部件会出现在用gtk_container_add函数添加的子部件上面(z轴方向)。
例程中的button用gtk_container_add函数添加,label和entry用gtk_overlay_add_overlay函数添加,所以出现上图的效果。

gtk_widget_set_valign和gtk_widget_set_halign函数用来设置子部件的对齐方式,从上到下(从左到右)以此是:GTK_ALIGN_START,GTK_ALIGN_CENTER,GTK_ALIGN_END。

GtkScrolledWindow

GtkScrolledWindow这个容器可以为它的子部件添加滚动条,由于这个部件”继承“于GtkBin,所以它只能添加一个子部件。
这里我们用一个多行文本框的例子来演示,如下图:
gtk_scrolled_window.png


例程代码:
#include <gtk/gtk.h>

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

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"hello fishc - GtkScrolledWindow");
    gtk_widget_set_size_request(window,300,200);

    textview = gtk_text_view_new();

    scrolled = gtk_scrolled_window_new(NULL,NULL);
    gtk_container_add(GTK_CONTAINER(window), scrolled);

    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled),textview);

    gtk_widget_show_all(window);
    gtk_main ();

    return 0;
}
多行文本框是GtkTextView部件,可以用来显示多行文本,默认情况下如果文本超过高度或宽度,它会自动增加高度或宽度。
这里主要用到了gtk_scrolled_window_add_with_viewport函数,该函数用来添加没有滚动功能的部件,相当于把一个部件添加到viewport又把viewport添加到scrolledwindow中。

gtk_scrolled_window_set_policy函数可以用来设置滚动条的显示策略。
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),GTK_POLICY_AUTOMATIC,GTK_POLICY_NEVER);
这样设置后水平滚动条自动显示,例如文本框中的文本达到最右端,滚动条将显示,垂直滚动条不显示。




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 03:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表