gtk/glade程序开发(二)

微调按钮构件(spin buttons) 

常用函数: 

创建微调按钮构件: 
/*创建微调按钮构件要用到“调整对象”,所以还要创建“调整对象” 
 以下就是Glade自动创建的微调按钮构件,就用到了“调整对象”*/ 

GtkObject *spinbutton1_adj;

GtkWidget *spinbutton1;



spinbutton1_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);

spinbutton1 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton1_adj), 1, 0);


这一节用到的新函数: 
取得微调按钮构件的当前值: 
函数名: gtk_spin_button_get_value_as_int 
用法: 
gfloat spinvalue1;

gint spinvalue2;

spinvalue1=gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton));

spinvalue2=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton));


函数名: sprintf() 
用法: sprintf (buf, "%d", spinvalue1); 

函数名: lookup_widget() 
用法: GtkWidget *label1 = lookup_widget (GTK_WIDGET(spinbutton), "label1"); 

一、用Glade设计界面 
步骤:1、新建glade工程 
     2、依此放置 窗口(400,300)、固定位置、标签、微调按钮。 
     3、为微调按钮构件,添加value_changed信号响应,object后填写:spinbutton1。 
4、设置微调按钮的一些属性:值、最小值、最大值、步进增量、页面增量、页面大小。(这些属性什么意思,自己捉摸捉摸。)     
5、保存工程,并生成代码。 

二、修改代码 

Interface.c /*不作任何修改,看你的文件中的部分和这个一样不一样。*/ 
g_signal_connect_swapped ((gpointer) spinbutton1, "value_changed",

G_CALLBACK (on_spinbutton1_value_changed),

GTK_OBJECT (spinbutton1));



callbacks.h /*不作任何修改,看你的文件和这个一样不一样。*/



void on_spinbutton1_value_changed (GtkSpinButton *spinbutton,

gpointer user_data);

callbacks.c 



void

on_spinbutton1_value_changed (GtkSpinButton *spinbutton,

gpointer user_data)

{

gchar buf[10];

gint spinvalue1;



GtkWidget *label1 = lookup_widget (GTK_WIDGET(spinbutton), "label1");

spinvalue1 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton));

sprintf (buf, "%d", spinvalue1);

gtk_label_set_text(GTK_LABEL(label1),buf);	

}

绘图区构件(drawingarea) 

常用函数: 

创建构件: 
/* */ 
GtkWidget *drawingarea1; 
drawingarea1 = gtk_drawing_area_new (); 

这一节用到的新函数: 

函数名: gdk_gc_new /*新建画笔*/ 
用法: 
GdkGC *gc1; 
gc1 = gdk_gc_new (drawingarea1->window); 

函数名: gdk_gc_set_rgb_fg_color /*设置画笔的前景色*/ 
用法: 
GdkColor color; 
color.red = 30000; 
gdk_gc_set_rgb_fg_color (gc1, &color); 

函数名: gdk_draw_line /*画直线*/ 
函数名: gdk_draw_rectangle /*画矩形*/ 

一、用Glade设计界面 
步骤: 1、新建glade工程 
     2、依此放置 窗口(400,300)、固定位置、按钮、绘图区。 
     3、为按钮构件,添加clicked信号响应。 
   4、保存工程,并生成代码。 

二、修改代码 

Interface.c /*不作任何修改,看你的文件中的部分和这个一样不一样。*/ 

g_signal_connect ((gpointer) button1, "clicked",

G_CALLBACK (on_button1_clicked),

NULL);


callbacks.h /*不作任何修改,看你的文件和这个一样不一样。*/ 


callbacks.c 
void

on_button1_clicked (GtkButton *button,

gpointer user_data)

{

GtkWidget *drawingarea1 = lookup_widget (GTK_WIDGET(button), "drawingarea1");

GdkGC gc1; /*定义画笔*/

GdkColor color;                 /*定义颜色变量*/

gc1 = gdk_gc_new (drawingarea1->window);     /*新建画笔*/



color.red = 30000;                /*定义颜色*/

gdk_gc_set_rgb_fg_color (gc1, &color);        /*设置画笔的前景色*/

gdk_draw_line (drawingarea1->window,       /*画直线*/

gc1,

0,0,0,300 );



color.red = 0;

color.blue = 30000;                /*重新定义颜色*/

gdk_gc_set_rgb_fg_color (gc1, &color);        /*设置画笔的前景色*/



gdk_draw_rectangle (drawingarea1->window,      /*画矩形*/

gc1,

TRUE,

50,

50,

100,

100);	

}

文件选择对话框构件(File chooser dialog) 

常用函数: 

创建 构件: 
/* */ 
GtkWidget window2; 
window2 = create_filechooserdialog1 (); 
gtk_widget_show (window2); 


这一节用到的新函数: 

函数名: gtk_file_chooser_get_filename /*取得文件名*/ 
用法: 

gchar * filename; 
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (window2)); 


说明:这一节涉及到在主窗口中调用对话框的问题,所以在callbacks.h中定义了一个全局指针变量,用于指向对话框。 

一、用Glade设计界面 
步骤: 1、新建glade工程 
     2、依此放置 窗口(400,300)、固定位置、按钮、文件选择对话框。 
     3、为按钮构件、文件选择对话框里的“取消”、“打开”按钮,添加clicked信号响应。 
     4、保存工程,并生成代码。 

二、修改代码 
修改代码以前,把工程属性设置为“win32控制台程序” 

Main.c

去掉以下部分:/*在linux下用Anjuta IDE设计时,就没有这一部分。*/

GtkWidget *fontselectiondialog1;

fontselectiondialog1 = create_fontselectiondialog1 ();

gtk_widget_show (fontselectiondialog1);



Interface.c /*不作任何修改,看你的文件中的部分和这个一样不一样。*/



create_window1

g_signal_connect ((gpointer) button1, "clicked",

G_CALLBACK (on_button1_clicked),

NULL);



create_filechooserdialog1

g_signal_connect ((gpointer) button2, "clicked",

G_CALLBACK (on_button2_clicked),

NULL);

g_signal_connect ((gpointer) button3, "clicked",

G_CALLBACK (on_button3_clicked),

NULL);



callbacks.h /*看你的文件和这个一样不一样。*/



gchar *filename; /*用于存放得到的文件名*/   (全局变量)

GtkWidget *window2;    /*指向对话框的指针变量(全局),通过它访问对话框。*/



void on_button1_clicked (GtkButton *button,

gpointer user_data);

void on_button2_clicked (GtkButton *button,

gpointer user_data);

void on_button3_clicked (GtkButton *button,

gpointer user_data);



callbacks.c 



void on_button1_clicked (GtkButton button,   /*对应主窗口上的按钮,用于创建对话框*/

gpointer user_data)

{

window2 = create_filechooserdialog1 ();

gtk_widget_show (window2);

}



void on_button2_clicked (GtkButton *button,    /*对话框上的“取消”按钮*/

gpointer user_data)

{

g_print("No file is select/n");

gtk_widget_destroy (window2);   /*去除对话框*/

}



void on_button3_clicked (GtkButton button,    /*对话框上的“打开”按钮*/

gpointer user_data)

{

filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (window2)); /*取得对话框中的文件名*/

g_print("The file is: /n");

g_print(filename);

gtk_widget_destroy (window2);                       /*去除对话框*/

}

你可能感兴趣的:(user,callback,button,Signal,gtk,程序开发)