马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这一节主要讲解GtkOverlay和GtkScrolledWindow的使用。
GtkOverlay
GtkOverlay 为子部件提供一种z轴布局方式,可以让一个部件放在另一个部件的“上面“(相对z轴),类似于html中的z-index设置。
如图,一个button铺满窗口,button上面有一个label和entry:
例程:#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,所以它只能添加一个子部件。
这里我们用一个多行文本框的例子来演示,如下图:
例程代码:#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);
这样设置后水平滚动条自动显示,例如文本框中的文本达到最右端,滚动条将显示,垂直滚动条不显示。
|