鱼C论坛

 找回密码
 立即注册
查看: 2613|回复: 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


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

  2. int main(int argc,char *argv[])
  3. {
  4.     GtkWidget *window,*overlay;
  5.     GtkWidget *button1,*label1,*entry1;
  6.     gtk_init (&argc, &argv);

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

  10.     overlay = gtk_overlay_new();
  11.     gtk_container_add(GTK_CONTAINER(window), overlay);

  12.     button1 = gtk_button_new_with_label("button1");
  13.     label1 = gtk_label_new("label1");
  14.     entry1 = gtk_entry_new();

  15.     gtk_container_add(GTK_CONTAINER(overlay), button1);
  16.     gtk_overlay_add_overlay(GTK_OVERLAY(overlay), label1);
  17.     gtk_overlay_add_overlay(GTK_OVERLAY(overlay), entry1);

  18.     gtk_widget_set_valign(label1 , GTK_ALIGN_START);
  19.     gtk_widget_set_halign(label1 , GTK_ALIGN_CENTER);

  20.     gtk_widget_set_valign(entry1 , GTK_ALIGN_END);
  21.     gtk_widget_set_halign(entry1 , GTK_ALIGN_CENTER);

  22.     gtk_widget_show_all(window);
  23.     gtk_main ();

  24.     return 0;
  25. }
复制代码

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


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

  2. int main(int argc,char *argv[])
  3. {
  4.     GtkWidget *window,*scrolled;
  5.     GtkTextView *textview;

  6.     gtk_init (&argc, &argv);

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

  10.     textview = gtk_text_view_new();

  11.     scrolled = gtk_scrolled_window_new(NULL,NULL);
  12.     gtk_container_add(GTK_CONTAINER(window), scrolled);

  13.     gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled),textview);

  14.     gtk_widget_show_all(window);
  15.     gtk_main ();

  16.     return 0;
  17. }
复制代码

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

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




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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