gtk感觉函数好多,需要记好多函数,还是多练习,多总结,今天写了一个登陆窗口,很简单,主要是为了加深对这些东西的记忆,直接贴代码

  1 #include<gtk/gtk.h>
  2 static GtkWidget* entry1;
  3 static GtkWidget* entry2;
  4 void succes()
  5 {
  6     GtkWidget* dialog;                    
  7     GtkWidget* label;
  8     GtkWidget* button;
  9     GtkWidget* vbox;
 10     GtkWidget* hbox;
 11     dialog = gtk_dialog_new();        
 12 /*新建一个dialog对话框,GtkDialog提供了两个成员,分别是vbox跟action_area(活动域),这两个区域之间有一条分隔线;活动域其实是一个水平的盒子,分隔线可以通过函数gtk_dialog_set_has_separator()人为的显示或隐藏。*/
 13 
 14     g_signal_connect(G_OBJECT(dialog),"destroy",G_CALLBACK(gtk_main_quit),NULL);    //相应关闭按钮的事件
 15         
 16     vbox=GTK_DIALOG(dialog)->vbox;        
 17     label=gtk_label_new("登陆成功");        //创建一个标签
 18     gtk_box_pack_start(GTK_BOX(vbox),label,TRUE,TRUE,30);        //将标签放到对话框的vbox中
 19     
 20     hbox=GTK_DIALOG(dialog)->action_area;
 21     button = gtk_button_new_with_label("确定");    //创建一个带标签的按钮
 22     gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0);        //将按钮放到对话框的活动域
 23 
 24     
 25     g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(gtk_main_quit),NULL);        //相应按钮点击的事件
 26     
 27     gtk_widget_show_all(dialog);                //显示对话框
 28 
 29 
 30 }
 31 void on_button_clicked (GtkWidget* button,gpointer data)            //相应父窗口点击按钮的事件
 32 {
 33     const gchar *username = gtk_entry_get_text(GTK_ENTRY(entry1));
 34     const gchar *password = gtk_entry_get_text(GTK_ENTRY(entry2));
 35     g_print("用户名是:%s\n",username);
 36     g_print("密码是:%s\n",password);
 37 
 38 }
 39 int main(int argc,char *argv[])
 40 {
 41     GtkWidget* window;
 42     GtkWidget* box;
 43     GtkWidget* box1;
 44     GtkWidget* box2;
 45     GtkWidget* label1;
 46     GtkWidget* label2;
 47     GtkWidget* button;
 48     GtkWidget* sep;
 49     gtk_init(&argc,&argv);                    //初始化gtk+环境
 50 
 51     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);        //新建一个一个窗口,类型为最上层
 52 
 53     g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);        //响应点击窗口关闭按钮的事件
 54 
 55     gtk_window_set_title(GTK_WINDOW(window),"登陆窗口");            //设置窗口标题
 56     gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);        //设置窗口出现的位置
 57     gtk_window_set_default_size(GTK_WINDOW(window),500,100);        //设置窗口大小
 58 
 59     gtk_container_set_border_width(GTK_CONTAINER(window),50);        //设置窗口容器离窗口边框的距离
 60 
 61     box=gtk_vbox_new(TRUE,5);                        //创建一个垂直排列的容器
 62     gtk_container_add(GTK_CONTAINER(window),box);                //将容器加入窗口
 63 
 64     box1=gtk_hbox_new(TRUE,5);                        //创建一个水平排列的容器
 65     gtk_box_pack_start(GTK_BOX(box),box1,FALSE,FALSE,5);            //将其加入box中
 66 
 67     box2=gtk_hbox_new(TRUE,5);                        
 68     gtk_box_pack_start(GTK_BOX(box),box2,FALSE,FALSE,5);
 69 
 70     sep = gtk_hseparator_new();                        
 71     /*创建一个分隔条,实际上分割线也是一种特殊形式的按扭,gtk_hseparator_new用来创建一个水平分割条,gtk_vseparator创建一个垂直分割线*/
 72 
 73     gtk_box_pack_start(GTK_BOX(box),sep,FALSE,FALSE,5);            //将分割线加入box中
 74 
 75     label1 = gtk_label_new("用户名:");                    //创建文字标签
 76     entry1 =gtk_entry_new();                        //创建录入构件
 77 
 78     gtk_box_pack_start(GTK_BOX(box1),label1,TRUE,FALSE,5);            
 79     gtk_box_pack_start(GTK_BOX(box1),entry1,TRUE,FALSE,5);
 80 
 81     label2 =gtk_label_new("密码:");
 82     entry2 = gtk_entry_new();                        
 83 
 84     gtk_entry_set_visibility(GTK_ENTRY(entry2),FALSE);            //第二个参数为FALSE时,屏蔽输入框中的内容为黑点
 85 
 86     gtk_box_pack_start(GTK_BOX(box2),label2,TRUE,FALSE,5);
 87     gtk_box_pack_start(GTK_BOX(box2),entry2,TRUE,FALSE,5);
 88 
 89     button = gtk_button_new_with_label("确认");                        //添加一个带标签的按钮
 90     g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),NULL);    //相应按钮点击的事件
 91 
 92     g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(succes),NULL);            //响应按钮点击的事件
 93 
 94     gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,5);            //将按钮加入box中
 95 
 96     gtk_widget_show_all(window);                        //显示全部window中全部内容
 97 
 98     gtk_main();                                //主函数循环
 99 
100     return FALSE;
101 }

gtk函数多,参数多,一定要多练习多使用。