GTK 笔记本构件(The NoteBook Widget)

来源:互联网 发布:wind中国金融数据库 编辑:程序博客网 时间:2024/05/19 03:20

笔记本构件(The NoteBook Widget)

笔记本构件(The NoteBook Widget)是互相重叠的页面集合,每一页都包含不同的信息,且一次只有一个页面是可见的。该构件在GUI(图形用户接口)编程中很常用。要显示大量的相似信息,同时把它们分别显示时,使用这种构件是一个很好的方法。具体看下面的代码



具体代码如下:
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /*File:notebook.c 
  2.  *Date:2014-0309 
  3.  *Author:sjin 
  4.  *Mail:413977243@qq.com 
  5.  */  
  6.   
  7. #include <gtk/gtk.h>  
  8. #include <stdio.h>  
  9.   
  10. /*这个函数旋转页标签的位置*/  
  11. void rotate_book(GtkButton *button,GtkNotebook *notebook)  
  12. {  
  13.     gtk_notebook_set_tab_pos(notebook,(notebook->tab_pos + 1) % 4);  
  14. }  
  15.   
  16. /*隐藏或显示页标签和边框*/  
  17. void tabsborder_book(GtkButton *button,GtkNotebook *notebook)  
  18. {  
  19.     gint tval = FALSE;  
  20.     gint bval = FALSE;  
  21.     if(notebook->show_tabs == 0){  
  22.         tval = TRUE;  
  23.     }  
  24.   
  25.     if(notebook->show_border == 0){  
  26.         bval = TRUE;  
  27.     }  
  28.   
  29.     /*显示或者隐藏页标签*/  
  30.     gtk_notebook_set_show_tabs(notebook,tval);  
  31.     /*显示或者隐藏边框*/  
  32.     gtk_notebook_set_show_border(notebook,bval);  
  33. }  
  34.   
  35. /*从笔记本构件上删除页面*/  
  36. void remove_book(GtkButton *button,GtkNotebook *notebook)  
  37. {  
  38.     gint page;  
  39.     page = gtk_notebook_get_current_page(notebook);  
  40.     gtk_notebook_remove_page(notebook,page);  
  41.     /********************* 
  42.      * 必须刷新构件-----这会迫使构件重绘自身*/  
  43.     gtk_widget_draw(GTK_WIDGET(notebook),NULL);  
  44. }  
  45.   
  46. void delete(GtkWidget *widget,GtkWidget *event,gpointer data)  
  47. {  
  48.     gtk_main_quit();  
  49. }  
  50.   
  51.   
  52. int main(int argc, char*argv[])  
  53. {  
  54.     GtkWidget *window;  
  55.     GtkWidget *button;  
  56.     GtkWidget *table;  
  57.     GtkWidget *notebook;  
  58.     GtkWidget *frame;  
  59.     GtkWidget *label;  
  60.     GtkWidget *checkbutton;  
  61.     int i;  
  62.     char bufferf[32];  
  63.     char bufferl[32];  
  64.   
  65.     //初始化GTK  
  66.     gtk_init(&argc,&argv);  
  67.     //创建最上层主窗口  
  68.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  69.     //连接信号"delete_event",使得窗口关闭时发生  
  70.     g_signal_connect(G_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete),NULL);  
  71.     //设置窗口标题      
  72.     gtk_window_set_title(GTK_WINDOW(window),"notebook 练习");  
  73.     //设定窗口的默认宽高  
  74.     //gtk_window_set_default_size(GTK_WINDOW(window),200,300);  
  75.     //设定窗口的位置,让窗口总在最前端  
  76.     gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);  
  77.     //设定容器边框的宽度  
  78.     gtk_container_set_border_width(GTK_CONTAINER(window),20);  
  79.   
  80.     /*表组装,创建表*/  
  81.     table = gtk_table_new(3,6,FALSE);  
  82.     gtk_container_add(GTK_CONTAINER(window),table);  
  83.   
  84.     /*创建一个笔记本构件,将标签页放在顶部*/  
  85.     notebook = gtk_notebook_new();  
  86.     gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_TOP);  
  87.     gtk_table_attach_defaults(GTK_TABLE(table),notebook,0,6,0,1);  
  88.     gtk_widget_show(notebook);  
  89.   
  90.     /*向笔记本构件中插入标签页*/  
  91.     for(i = 0; i < 5; i++){  
  92.         sprintf(bufferf,"笔记本构件框架 %d",i + 1);  
  93.         sprintf(bufferl,"标签页 %d",i + 1);  
  94.   
  95.         frame = gtk_frame_new(bufferf);  
  96.         gtk_container_set_border_width(GTK_CONTAINER(frame),10);  
  97.         gtk_widget_set_usize(frame,100,75);  
  98.         gtk_widget_show(frame);  
  99.   
  100.         label = gtk_label_new(bufferf);  
  101.         gtk_container_add(GTK_CONTAINER(frame),label);  
  102.         gtk_widget_show(label);  
  103.   
  104.         label = gtk_label_new(bufferl);  
  105.         gtk_notebook_prepend_page(GTK_NOTEBOOK(notebook),frame,label);  
  106.   
  107.     }  
  108.   
  109.     /*设置起始页为第四页*/  
  110.     gtk_notebook_set_page(GTK_NOTEBOOK(notebook),3);  
  111.   
  112.     /*创建一排按钮*/  
  113.   
  114.     /*关闭*/  
  115.     button = gtk_button_new_with_label("关闭");  
  116.     gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(delete),NULL);  
  117.     gtk_table_attach_defaults(GTK_TABLE(table),button,0,1,1,2);  
  118.     gtk_widget_show(button);  
  119.   
  120.     /*下一页*/  
  121.     button = gtk_button_new_with_label("下一页");  
  122.     gtk_signal_connect_object(GTK_OBJECT(button),"clicked",G_CALLBACK(gtk_notebook_next_page),GTK_NOTEBOOK(notebook));  
  123.     gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,1,2);  
  124.     gtk_widget_show(button);  
  125.   
  126.     /*上一页*/  
  127.     button = gtk_button_new_with_label("上一页");  
  128.     gtk_signal_connect_object(GTK_OBJECT(button),"clicked",G_CALLBACK(gtk_notebook_prev_page),GTK_NOTEBOOK(notebook));  
  129.     gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,1,2);  
  130.     gtk_widget_show(button);  
  131.   
  132.     /*标签页位置*/  
  133.     button = gtk_button_new_with_label("标签页位置");  
  134.     gtk_signal_connect(GTK_OBJECT(button),"clicked",(GtkSignalFunc)rotate_book,GTK_NOTEBOOK(notebook));  
  135.     gtk_table_attach_defaults(GTK_TABLE(table),button,3,4,1,2);  
  136.     gtk_widget_show(button);  
  137.   
  138.     /*隐藏页标签和边框*/  
  139.     button = gtk_button_new_with_label("页标签和边框ON、OFF");  
  140.     gtk_signal_connect(GTK_OBJECT(button),"clicked",(GtkSignalFunc)tabsborder_book,GTK_NOTEBOOK(notebook));  
  141.     gtk_table_attach_defaults(GTK_TABLE(table),button,4,5,1,2);  
  142.     gtk_widget_show(button);  
  143.   
  144.     /*删除*/  
  145.     button = gtk_button_new_with_label("删除");  
  146.     gtk_signal_connect(GTK_OBJECT(button),"clicked",(GtkSignalFunc)remove_book,GTK_NOTEBOOK(notebook));  
  147.     gtk_table_attach_defaults(GTK_TABLE(table),button,5,6,1,2);  
  148.     gtk_widget_show(button);  
  149.   
  150.     gtk_widget_show(table);  
  151.     gtk_widget_show_all(window);  
  152.     gtk_main();  
  153.     return FALSE;  

0 0
原创粉丝点击