框架(Frames)可以用于在盒子中封装一个或一组构件,框架本身还可以有一个标签。标签的位置和盒子的风格可以灵活改变。

创建框架控件

框架可以用下面的函数创建:

GtkWidget *gtk_frame_new( const gchar *label );

标签缺省放在框架的左上角。传递NULL值作为label参数时,框架不显示标签。标签文本可以用下面的函数改变。

void gtk_frame_set_label( GtkFrame    *frame,
                          const gchar *label );

设置框架控件的标签位置

标签的位置可以用下面的函数改变:

void gtk_frame_set_label_align( GtkFrame *frame,
                                gfloat    xalign,
                                gfloat    yalign );

参数:

  • xalign和yalign参数取值范围介于0.0和1.0之间。
    xalign指定标签在框架构件上部水平线上的位置。
    yalign目前还没有被使用。
    xalign的缺省值是0.0,它将标签放在框架构件的最左端。

设置框架控件的轮廓风格

下面的函数改变盒子的风格,用于显示框架的轮廓。

void gtk_frame_set_shadow_type( GtkFrame      *frame,
                                GtkShadowType  type); 

参数

  • type
    该参数可以取以下值之一:
    GTK_SHADOW_NONE
    GTK_SHADOW_IN
    GTK_SHADOW_OUT
    GTK_SHADOW_ETCHED_IN (缺省值)
    GTK_SHADOW_ETCHED_OUT 

示例

效果

框架 - 图1

源码

下面的示例演示了怎样使用框架构件。

#include <gtk/gtk.h>

int main( int   argc,
          char *argv[] )
{
  /* GtkWidget 是构件的存储类型 */
  GtkWidget *window;
  GtkWidget *frame;

  /* 初始化 */
  gtk_init (&argc, &argv);

  /* 创建一个新窗口 */
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window), "www.softool.cn - Frame");

  /* 在这里我们将 "destroy" 事件连接到一个回调函数 */ 
  g_signal_connect (G_OBJECT (window), "destroy",
                        G_CALLBACK (gtk_main_quit), NULL);

  gtk_widget_set_size_request (window, 300, 300);
  /* 设置窗口的边框宽度 */
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);

  /* 创建一个框架 */
  frame = gtk_frame_new (NULL);
  gtk_container_add (GTK_CONTAINER (window), frame);

  /* 设置框架的标签 */
  gtk_frame_set_label (GTK_FRAME (frame), "GTK Frame Widget");

  /* 将标签定位在框架的右边 */
  gtk_frame_set_label_align (GTK_FRAME (frame), 1.0, 0.0);

  /* 设置框架的风格 */
  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT);

  gtk_widget_show (frame);

  /* 显示窗口 */
  gtk_widget_show (window);

  /* 进入事件循环 */
  gtk_main ();

  return 0;
}