箭头控件(Arrow widget)画一个箭头,面向几种不同的方向,并有几种不同的风格。

在许多应用程序中,经常需要自己创建一种带箭头的按钮 或 带箭头的标签,它们不能触发信号。

目前只有两个函数用来操纵箭头控件。

GtkWidget *gtk_arrow_new()

//创建新的箭头控件,指明控件的类型和外观;
GtkWidget *gtk_arrow_new( GtkArrowType   arrow_type,
                          GtkShadowType  shadow_type );

void gtk_arrow_set()

//用来改变箭头控件类型和外观。
void gtk_arrow_set( GtkArrow      *arrow,
                    GtkArrowType   arrow_type,
                    GtkShadowType  shadow_type );

参数:

  • arrow_type
    该参数可以取下列值:
    GTK_ARROW_UP  向上
    GTK_ARROW_DOWN  向下
    GTK_ARROW_LEFT  向左
    GTK_ARROW_RIGHT  向右
    显然,这些值指示箭头指向哪个方向;
  • shadow_type
    该参数可以取下列值:
    GTK_SHADOW_IN
    GTK_SHADOW_OUT (缺省值)
    GTK_SHADOW_ETCHED_IN
    GTK_SHADOW_ETCHED_OUT 

示例

功能:

实现带箭头的按钮。

效果:

箭头 Arrow - 图1

源码:

#include <gtk/gtk.h>

//通过创建一个arrow和一个button,然后把它们2个组合在一块来实现箭头按钮的效果。
/* 用指定的参数创建一个箭头控件并将它组装到按钮中 */
GtkWidget *create_arrow_button( GtkArrowType  arrow_type,
                                GtkShadowType shadow_type )
{
    GtkWidget *button;
    GtkWidget *arrow;

    //创建一个button:
    button = gtk_button_new ();
    //创建一个arrow:
    arrow = gtk_arrow_new (arrow_type, shadow_type);
    //把上面创建的arrow添加到button里:
    gtk_container_add (GTK_CONTAINER (button), arrow);

    gtk_widget_show (button);
    gtk_widget_show (arrow);

    return button;
}

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

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

    /* 创建一个新窗口 */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title (GTK_WINDOW (window), "www.softool.cn - Arrow Buttons");

    /* 对所有的窗口都这样做是一个好主意 */
    g_signal_connect (G_OBJECT (window), "destroy",
    G_CALLBACK (gtk_main_quit), NULL);

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

    /* 新建一个水平排列的box控件作为容器,以容纳箭头/按钮 */
    box = gtk_hbox_new (FALSE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (box), 2);
    gtk_container_add (GTK_CONTAINER (window), box);

    /* 显示box控件 */
    gtk_widget_show (box);

    //新建一个带箭头的按钮:上箭头
    button = create_arrow_button (GTK_ARROW_UP, GTK_SHADOW_IN);
    gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);

    button = create_arrow_button (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
    gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);

    button = create_arrow_button (GTK_ARROW_LEFT, GTK_SHADOW_ETCHED_IN);
    gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);

    button = create_arrow_button (GTK_ARROW_RIGHT, GTK_SHADOW_ETCHED_OUT);
    gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);

    gtk_widget_show (window);

    /* 进入主循环,等待用户的动作 */
    gtk_main ();

    return 0;
}