GTK+图形化应用程序开发学习笔记(十二)—对话框构件、标尺构件

                                          GTK+图形化应用程序开发学习笔记(十二)—对话框构件、标尺构件

一、对话框构件

       对话框构件非常简单,事实上它仅仅是一个预先组装了几个构件到里面的窗口。对话框的定义如下:

       struct GtkDialog{

GtkWindow window;

GtkWidget *vbox;

GtkWidget *action_area;

};

从上面可以看到,对话框只是简单地创建一个窗口,并在顶部组装一个G t k V B o x,然后在G t k V B o x中组装一个分隔线,再加一个称为“活动区”的G t k H B o x。我们可以在该“活动区”添加一些按纽。

       对话框用gtk_dialog_new创建。


1

名称:

gtk_dialog_new

功能:

创建对话框构件

头文件:

#include <gtk/gtk.h>

函数原形:

GtkWidget *gtk_dialog_new(void);

参数:

返回值:

新的对话框构件

 

 

 

 

 

 

 

 

 

 

#include <gtk/gtk.h>

 

void button_event(GtkWidget *widget, gpointer *data);

void destroy(GtkWidget *widget, gpointer *data);

 

int main(int argc,char *argv[ ])

{

GtkWidget *window;

GtkWidget *button;

 

gtk_init(&argc,&argv);

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);

 

button=gtk_button_new_with_label(“Exit”);

gtk_container_add(GTK_CONTAINER(window),button);

gtk_signal_connect(GTK_OBJECT(button),”clicked”,G_CALLBACK(button_event),NULL);

gtk_widget_show(button);

gtk_widget_show(window);

gtk_main();

}

 

void button_event(GtkWidget *widget, gpointer *data)

{

GtkWidget *button;

GtkWidget *dialog;

 

dialog=gtk_dialog_new( );

 

button=gtk_button_new_with_label(“Yes”);

gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),button,TRUE,TRUE,0);

gtk_signal_connect(GTK_OBJECT(button),”clicked”,G_CALLBACK(gtk_main_quit),NULL);

gtk_widget_show(button);

 

button=gtk_button_new_with_label(“No”);

gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),button,TRUE,TRUE,0);

gtk_signal_connect(GTK_OBJECT(button),”clicked”,G_CALLBACK(destroy),dialog);

gtk_widget_show(button);

gtk_widget_show(dialog);

}

 

void destroy(GtkWidget *widget, gpointer *data)

{

gtk_widget_destroy(GTK_WIDGET(data));

}

 

       程序运行后会得到如下界面:

       当用户点击按纽会得到如下对话框。

       如果用户电击Yes程序退出,如果用户点击No对话框消失。

二、标尺构件

       标尺构件(GtkRuler)一般用于在给定窗口中指示鼠标指针的位置。一个窗口可以有一个横跨整个窗口宽度的水平标尺和一个占据整个窗口高度的垂直标尺。标尺上有一个小三角形的指示器标出鼠标指针相对于标尺的精确位置。

       有两种标尺构件:G t k H R u l e r(水平)和G t k V R u l e r(垂直)。用gtk_hruler_new创建水平标尺构件,gtk_vruler­_new创建垂直标尺构件。

      

2

名称:

gtk_hruler_new

gtk_vruler_new

功能:

创建标尺构件

头文件:

#include <gtk/gtk.h>

函数原形:

GtkWidget *gtk_hruler_new(void); /*水平标尺*/

GtkWidget *gtk_vruler_new(void); /*垂直标尺*/

参数:

返回值:

新的标尺构件

      

 

 

 

 

 

 

 

 

 

3

名称:

gtk_ruler_set_metric

功能:

设置标尺构件的度量单位

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_ruler_set_metric(GtkRuler *ruler, GtkMetricType metric);

参数:

ruler      标尺构件

metric     度量单位

返回值:

      

 

 

 

 

 

 

 

 

 

 

一旦创建了标尺,我们就能指定它的度量单位。标尺的度量单位可以是GTK_PIXELS, GTK_INCHES, GTK_CENTIMETERS. 标尺的度量单位用gtk_ruler_set_metric设置。默认的度量单位是GTK_PIXELS.

      

4

名称:

gtk_ruler_set_range

功能:

设置标尺构件的位置和跨度

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_ruler_set_range(GtkRuler *ruler, gfloat lower, gfloat upper, gfloat position, gfloat max_size);

参数:

ruler       标尺构件

lower      表示的开始

upper      标尺的结束

position    标尺的指针指示器的初始位置

max_size   显示最大可能数值

返回值:

      

 

 

 

 

 

 

 

 

 

 

 

 

 

创建完标尺还要对标尺的跨度和指示器初始位置进行设置,我们可以用gtk_ruler_set_range函数进行设置。

      

下面是创建标尺构件的程序例子:

#include <gtk/gtk.h>

 

int main(int argc, char *argv[ ])

{

GtkWidget *window;

GtkWidget *box;

GtkWidget *hrule;

 

gtk_init(&argc,&argv);

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_signal_connect(GTK_OBJECT(window),”delete_event”,GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

gtk_container_set_border_width(GTK_CONTAINER(window),10);

gtk_widget_set_usize(window,400,100);

 

box=gtk_vbox_new(FALSE,0);

hrule=gtk_hruler_new();/*创建标尺*/

gtk_ruler_set_metric(GTK_RULER(hrule),GTK_PIXELS);/*设置标尺单位*/

gtk_ruler_set_range(GTK_RULER(hrule),0,10,0,10);/*设置标尺跨度,指示器初始位置*/

gtk_box_pack_start(GTK_BOX(box), hrule, FALSE,FALSE,0);

gtk_container_add(GTK_CONTAINER(window),box);

 

gtk_widget_show(box);

gtk_widget_show(hrule);

gtk_widget_show(window);

gtk_main();

}

       程序运行后得到如下界面:

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值