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函数多,参数多,一定要多练习多使用。