LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3572|回复: 4

GTK+ 操作 Mysql 数据库示例程序 版本 1.0

[复制链接]
发表于 2005-2-23 18:27:13 | 显示全部楼层 |阅读模式

GTK+ 操作 Mysql 数据库示例程序 版本 1.0



  1. /*
  2. 作者:wide288 时间:2005-2-23 元宵节
  3. wide288@0[tempc2]$ cat makefile
  4. CC = gcc
  5. LIB = -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
  6. all:
  7.       $(CC) -o create create.c $(LIB) `pkg-config gtk+-2.0 --cflags --libs`
  8. wide288@0[tempc2]$
  9. */
复制代码



  1. #include <gtk/gtk.h>
  2. #include <mysql.h>

  3. #define DEF_HOST_NAME        "localhost"
  4. #define DEF_USER_NAME        "wide288"
  5. #define DEF_PASSWORD        "123"
  6. #define DEF_DATABASE        "lcrj"

  7. MYSQL *myconnect = NULL;
  8. gboolean isclosed = TRUE;
  9. gboolean iscreate = TRUE;
  10. static GtkWidget *dialog = NULL;
  11. static GtkWidget *entry = NULL;
  12. static GtkWidget *table_dialog = NULL;
  13. static GtkWidget *db_entry = NULL;
  14. static GtkWidget *text = NULL;
  15. static GtkTextBuffer *text_buffer;
  16. gboolean isok = FALSE;
  17. static GtkWidget *drop_table_dialog = NULL;
  18. static GtkWidget *drop_db_entry = NULL;
  19. static GtkWidget *drop_table_entry = NULL;
  20. static GtkTextBuffer *message_buffer;
  21. static GtkWidget *mlabel;

  22. void create_message_dialog(GtkMessageType type, gchar* message)
  23. {
  24.         GtkWidget* dialogx;
  25.         dialogx = gtk_message_dialog_new(NULL,
  26.                 GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  27.                 type, GTK_BUTTONS_OK, message);
  28.         gtk_dialog_run(GTK_DIALOG(dialogx));
  29.         gtk_widget_destroy(dialogx);
  30. }

  31. void on_dialog_yes(GtkButton *button, gpointer data)
  32. {
  33.         gchar query_buf[4096];
  34.         const gchar* dbname;
  35.         dbname = gtk_entry_get_text(GTK_ENTRY(entry));
  36.         if(iscreate == TRUE)
  37.         {
  38.                 sprintf(query_buf, "CREATE DATABASE %s", dbname);
  39.                 if(mysql_query(myconnect, query_buf) == 0)
  40.                 {
  41.                         create_message_dialog(GTK_MESSAGE_INFO, "成功创建数据库!");
  42.                 }else{
  43.                         create_message_dialog(GTK_MESSAGE_ERROR, "创建数据库时出错!");
  44.                 }
  45.         }else{
  46.                 sprintf(query_buf, "DROP DATABASE %s", dbname);
  47.                 if(mysql_query(myconnect, query_buf) == 0)
  48.                 {
  49.                         create_message_dialog(GTK_MESSAGE_WARNING, "数据库已经被删除!");
  50.                 }else{
  51.                         create_message_dialog(GTK_MESSAGE_ERROR, "删除数据库时出错!");
  52.                 }
  53.         }
  54.         gtk_widget_destroy(dialog);
  55. }

  56. void on_dialog_no(GtkButton *button, gpointer data)
  57. {
  58.         gtk_widget_destroy(dialog);
  59. }

  60. void create_run_dialog(gchar *title)
  61. {
  62.         GtkWidget *label, *vbox, *button, *sep, *hbox;
  63.         dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  64.         gtk_window_set_title(GTK_WINDOW(dialog), title);
  65.         g_signal_connect(G_OBJECT(dialog), "delete_event",
  66.                 G_CALLBACK(gtk_widget_destroy),dialog);
  67.         gtk_container_set_border_width(GTK_CONTAINER(dialog),10);

  68.         vbox = gtk_vbox_new(FALSE,0);
  69.         gtk_container_add(GTK_CONTAINER(dialog),vbox);
  70.         label = gtk_label_new("输入数据库名:");
  71.         gtk_box_pack_start(GTK_BOX(vbox),label, FALSE, FALSE, 5);
  72.         entry = gtk_entry_new();
  73.         gtk_box_pack_start(GTK_BOX(vbox),entry, FALSE, FALSE, 5);
  74.         sep = gtk_hseparator_new();
  75.         gtk_box_pack_start(GTK_BOX(vbox),sep, FALSE, FALSE, 5);
  76.         hbox = gtk_hbox_new(FALSE, 0);
  77.         gtk_box_pack_start(GTK_BOX(vbox),hbox, FALSE, FALSE, 5);
  78.         button = gtk_button_new_from_stock(GTK_STOCK_YES);
  79.         g_signal_connect(G_OBJECT(button), "clicked",
  80.                 G_CALLBACK(on_dialog_yes), NULL);
  81.         gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
  82.         gtk_widget_show_all(dialog);
  83. }

  84. void on_db_use(GtkButton *button, gpointer data)
  85. {
  86.         const char* query;
  87.         char query_buf[1024];
  88.         query = gtk_entry_get_text(GTK_ENTRY(db_entry));
  89.         sprintf(query_buf, "USE %s", query);
  90.         if(mysql_query(myconnect, query_buf) == 0)
  91.         {
  92.                 create_message_dialog(GTK_MESSAGE_INFO, "数据库选用成功!");
  93.                 gtk_widget_set_sensitive(db_entry, FALSE);
  94.         }else{
  95.                 create_message_dialog(GTK_MESSAGE_ERROR, "选用数据库时出错!");
  96.         }
  97. }

  98. void on_create_table_yes(GtkButton* button, gpointer data)
  99. {
  100.         gchar* sql_query;
  101.         GtkTextIter iter1, iter2;
  102.         gtk_text_buffer_get_start_iter(text_buffer, &iter1);
  103.         gtk_text_buffer_get_end_iter(text_buffer, &iter2);
  104.         sql_query = gtk_text_buffer_get_text(text_buffer, &iter1, &iter2, FALSE);
  105.         if(mysql_query(myconnect, sql_query) == 0)
  106.         {
  107.                 create_message_dialog(GTK_MESSAGE_INFO, "成功创建数据表!");
  108.         }else{
  109.                 create_message_dialog(GTK_MESSAGE_ERROR, "运行SQL语句时出错!");
  110.         }
  111. }

  112. void create_table_dialog(gchar* title)
  113. {
  114.         GtkWidget *vbox, *hbox, *label, *button, *viewport;
  115.         table_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  116.         gtk_window_set_title(GTK_WINDOW(table_dialog), title);
  117.         g_signal_connect(G_OBJECT(table_dialog), "delete_event",
  118.                 G_CALLBACK(gtk_widget_destroy), table_dialog);
  119.         gtk_container_set_border_width(GTK_CONTAINER(table_dialog), 10);
  120.         vbox = gtk_vbox_new(FALSE, 0);
  121.         gtk_container_add(GTK_CONTAINER(table_dialog), vbox);
  122.         hbox = gtk_hbox_new(FALSE, 0);
  123.         gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
  124.         label = gtk_label_new("数据库名称:");
  125.         gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
  126.         db_entry = gtk_entry_new();
  127.         gtk_box_pack_start(GTK_BOX(hbox), db_entry, FALSE, FALSE, 5);
  128.         button = gtk_button_new_with_label("选用");
  129.         g_signal_connect(G_OBJECT(button), "clicked",
  130.                 G_CALLBACK(on_db_use), NULL);
  131.         gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
  132.        
  133.         hbox = gtk_hbox_new(FALSE, 0);
  134.         gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
  135.         viewport = gtk_viewport_new(NULL, NULL);
  136.         gtk_box_pack_start(GTK_BOX(hbox), viewport, TRUE, TRUE, 5);
  137.         text = gtk_text_view_new();
  138.         gtk_container_add(GTK_CONTAINER(viewport), text);
  139.         text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));

  140.         vbox = gtk_vbox_new(FALSE, 0);
  141.         gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
  142.         label = gtk_label_new("请在左侧的\n文本输入区\n域内输入创\n建数据表的\nSQL语句,\n单击下面的\n按钮即可执\n行创建数据\n操作");
  143.         gtk_box_pack_start(GTK_BOX(vbox),label, FALSE, FALSE, 5);
  144.         button = gtk_button_new_with_label("创建数据表");
  145.         g_signal_connect(G_OBJECT(button), "clicked",
  146.                 G_CALLBACK(on_create_table_yes), NULL);
  147.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  148.         gtk_widget_show_all(table_dialog);
  149. }

  150. void on_drop_table_yes(GtkButton* button, gpointer data)
  151. {
  152.         gchar query_buf[4096];
  153.         const gchar *dbname, *tablename;
  154.         dbname = gtk_entry_get_text(GTK_ENTRY(drop_db_entry));
  155.         tablename = gtk_entry_get_text(GTK_ENTRY(drop_table_entry));
  156.         sprintf(query_buf, "USE %s", dbname);
  157.         if(mysql_query(myconnect, query_buf) == 0)
  158.         {
  159.                 sprintf(query_buf, "DROP TABLE %s", tablename);
  160.                 if(mysql_query(myconnect, query_buf) == 0)
  161.                 {
  162.                         create_message_dialog(GTK_MESSAGE_WARNING,
  163.                                 "数据库已经打开,数据表成功删除!");
  164.                 }else{
  165.                         create_message_dialog(GTK_MESSAGE_ERROR,
  166.                                 "数据库已经打开,但数据表并未删除!");
  167.                 }
  168.         }else{
  169.                 create_message_dialog(GTK_MESSAGE_ERROR,"打开数据库时出错!");
  170.         }
  171.         gtk_widget_destroy(drop_table_dialog);       
  172. }

  173. void on_drop_table_no(GtkButton* button, gpointer data)
  174. {
  175.         gtk_widget_destroy(drop_table_dialog);
  176. }

  177. void create_drop_table_dialog(gchar* title)
  178. {
  179.         GtkWidget *vbox, *hbox, *label, *button, *sep;
  180.         drop_table_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  181.         gtk_window_set_title(GTK_WINDOW(drop_table_dialog), title);
  182.         g_signal_connect(G_OBJECT(drop_table_dialog),"delete_event",
  183.                 G_CALLBACK(gtk_widget_destroy), drop_table_dialog);
  184.         gtk_container_set_border_width(GTK_CONTAINER(drop_table_dialog),10);

  185.         vbox = gtk_vbox_new(FALSE, 0);
  186.         gtk_container_add(GTK_CONTAINER(drop_table_dialog), vbox);
  187.         hbox = gtk_hbox_new(FALSE, 0);
  188.         gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
  189.         label = gtk_label_new("打开的数据库:");
  190.         gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
  191.         drop_db_entry = gtk_entry_new();
  192.         gtk_box_pack_start(GTK_BOX(hbox), drop_db_entry, FALSE, FALSE, 5);
  193.         hbox = gtk_hbox_new(FALSE, 0);
  194.         gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
  195.         label = gtk_label_new("要删除的数据表:");
  196.         gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
  197.         drop_table_entry = gtk_entry_new();
  198.         gtk_box_pack_start(GTK_BOX(hbox), drop_table_entry, FALSE, FALSE, 5);

  199.         sep = gtk_hseparator_new();
  200.         gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 5);
  201.         hbox = gtk_hbox_new(FALSE, 0);
  202.         gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
  203.         button = gtk_button_new_from_stock(GTK_STOCK_YES);
  204.         g_signal_connect(G_OBJECT(button), "clicked",
  205.                 G_CALLBACK(on_drop_table_yes), NULL);
  206.         gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);

  207.         button = gtk_button_new_from_stock(GTK_STOCK_NO);
  208.         g_signal_connect(G_OBJECT(button), "clicked",
  209.                 G_CALLBACK(on_drop_table_no), NULL);
  210.         gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
  211.         gtk_widget_show_all(drop_table_dialog);
  212. }

  213. gboolean my_connect1()
  214. {
  215.         myconnect = mysql_init(myconnect);
  216.         if(mysql_real_connect(myconnect, DEF_HOST_NAME,
  217.                 DEF_USER_NAME, DEF_PASSWORD, DEF_DATABASE, MYSQL_PORT, NULL, 0))
  218.         {
  219.                 return TRUE;
  220.         }else{
  221.                 myconnect = NULL;
  222.                 return FALSE;
  223.         }
  224. }

  225. void my_disconnect()
  226. {
  227.         mysql_close(myconnect);
  228.         myconnect = NULL;
  229. }

  230. void on_button_connect(GtkButton *button, gpointer data)
  231. {
  232.         if(my_connect1() == FALSE)
  233.         {
  234.                 gtk_label_set_text(GTK_LABEL(mlabel), "错误:不能与数据库服务器连接。");
  235.         }else{
  236.                 gtk_label_set_text(GTK_LABEL(mlabel), "信息:成功与数据库服务器连接。");
  237.                 isclosed = FALSE;
  238.         }
  239. }

  240. void on_button_disconnect(GtkButton *button, gpointer data)
  241. {
  242.         my_disconnect();
  243.         isclosed = TRUE;
  244.         gtk_label_set_text(GTK_LABEL(mlabel), "注意:成功与数据库服务器断开。");
  245. }

  246. void on_create(GtkButton *button, gpointer data)
  247. {
  248.         create_run_dialog("创建mysql数据库");
  249.         iscreate = TRUE;
  250. }

  251. void on_drop(GtkButton *button, gpointer data)
  252. {
  253.         create_run_dialog("删除mysql数据库");
  254.         iscreate = FALSE;
  255. }

  256. void on_create_table(GtkButton *button, gpointer data)
  257. {
  258.         create_table_dialog("创建数据表");
  259. }

  260. void on_drop_table(GtkButton *button, gpointer data)
  261. {
  262.         create_drop_table_dialog("删除数据表");
  263. }

  264. void on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
  265. {
  266.         if(isclosed == FALSE)
  267.         {
  268.                 my_disconnect();
  269.                 create_message_dialog(GTK_MESSAGE_INFO, "成功与服务器断开!");
  270.         }
  271.         gtk_main_quit();
  272. }

  273. int main(int argc, char* argv[])
  274. {
  275.         GtkWidget *window;
  276.         GtkWidget *vbox1, *hbox, *vbox, *viewport;
  277.         GtkWidget *button, *message;
  278.         GtkTextIter iter;
  279.         gtk_init(&argc, &argv);
  280.         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  281.         g_signal_connect(G_OBJECT(window), "delete_event",
  282.                 G_CALLBACK(on_delete_event), NULL);
  283.         gtk_window_set_title(GTK_WINDOW(window), "创建/删除数据库和数据表");
  284.         gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  285.         gtk_container_set_border_width(GTK_CONTAINER(window), 10);

  286.         vbox1 = gtk_vbox_new(FALSE, 0);
  287.         gtk_container_add(GTK_CONTAINER(window), vbox1);
  288.         hbox = gtk_hbox_new(FALSE, 0);
  289.         gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 5);
  290.         message = gtk_text_view_new();
  291.         gtk_box_pack_start(GTK_BOX(hbox), message, TRUE, TRUE, 5);
  292.         message_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(message));
  293.         gtk_text_buffer_get_end_iter(message_buffer, &iter);
  294.         gtk_text_buffer_insert(message_buffer, &iter, "此处用来显示一些与软件\n使用有关的数据信息。\n可以到程序中找到这段代码,\n并应用到自己的回调函数中。\n与MySQL数据库服务器连接\n需要用到服务器、用户名\n和密码等参数,这些参数的\n设置可以到MySQL的帮助\n文档中找到,MySQL的C语\n言API的详细说明也可以在\n此文档中找到。", -1);
  295.         vbox = gtk_vbox_new(FALSE, 0);
  296.         gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
  297.         button = gtk_button_new_with_label("连接服务器");
  298.         g_signal_connect(G_OBJECT(button), "clicked",
  299.                 G_CALLBACK(on_button_connect), NULL);
  300.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  301.         button = gtk_button_new_with_label("断开");
  302.         g_signal_connect(G_OBJECT(button), "clicked",
  303.                 G_CALLBACK(on_button_disconnect), NULL);
  304.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  305.         button = gtk_button_new_with_label("创建数据库");
  306.         g_signal_connect(G_OBJECT(button), "clicked",
  307.                 G_CALLBACK(on_create), NULL);
  308.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  309.         button = gtk_button_new_with_label("删除数据库");
  310.         g_signal_connect(G_OBJECT(button), "clicked",
  311.                 G_CALLBACK(on_drop), NULL);
  312.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  313.         button = gtk_button_new_with_label("创建数据表");
  314.         g_signal_connect(G_OBJECT(button),"clicked",
  315.                 G_CALLBACK(on_create_table), NULL);
  316.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  317.         button = gtk_button_new_with_label("删除数据表");
  318.         g_signal_connect(G_OBJECT(button), "clicked",
  319.                 G_CALLBACK(on_drop_table), NULL);
  320.         gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
  321.         viewport = gtk_viewport_new(NULL, NULL);
  322.         gtk_box_pack_start(GTK_BOX(vbox1), viewport, FALSE, FALSE, 5);
  323.         mlabel = gtk_label_new("此处也可以显示提示信息");
  324.         gtk_container_add(GTK_CONTAINER(viewport), mlabel);
  325.         gtk_widget_show_all(window);
  326.         gtk_main();
  327.         return FALSE;
  328. }
  329. /*
  330. 此示例本是为写一个理财软件所写,且多抄于书中。 只是花些时间调试。和看 Mysql Api 的手册什么的。 如果有朋友想一起写什么理财软件或用到了 mysql 和 gtk+ 就写邮件给我吧。如果有空大家一起写它。 wide288 at 163 dot com
  331. */
复制代码


网址:http://blog.csdn.net/wide288/archive/2005/02/23/299094.aspx
发表于 2005-2-23 22:59:41 | 显示全部楼层
很好。值得学习。CSDN的BLOG排版有问题。
回复 支持 反对

使用道具 举报

发表于 2005-2-23 23:35:56 | 显示全部楼层

  1. /*不好意思,跟一个gtk+操作postgresql数据库的例子*/

  2. #include <gtk/gtk.h>
  3. #include <stdio.h>
  4. #include <libpq-fe.h>
  5. #include <locale.h>
  6. #include <string.h>

  7. gchar *searchtxt;
  8. PGconn     *conn;
  9. PGresult   *res;
  10. GtkWidget *list1;

  11. void condb( )
  12. {
  13.     char       *pghost,
  14.                *pgport,
  15.                *pgoptions,
  16.                *pgtty;
  17.     char       *dbName;
  18.     pghost = "localhost";              
  19.     pgport = "5432";              
  20.     pgoptions = NULL;           
  21.     pgtty = NULL;               
  22.     dbName = "dbtest";

  23.     conn = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbName,"postgres","postgres");

  24.     if (PQstatus(conn) == CONNECTION_BAD)
  25.     {
  26.         fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
  27.         fprintf(stderr, "%s", PQerrorMessage(conn));
  28.         exit_nicely(conn);
  29.     }
  30. }

  31. void conres(PGconn  *conns, char  *sqltxt)
  32. {   
  33.     PGconn  *conn;
  34.     char  *sqltxts;
  35.     conn=conns;
  36.     sqltxts=sqltxt;
  37.     res = PQexec(conn, sqltxts);
  38.     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
  39.     {
  40.         fprintf(stderr, "BEGIN command failed\n");
  41.         PQclear(res);
  42.         exit_nicely(conn);
  43.     }
  44. }

  45. void reslist(PGresult   *ress)
  46. {
  47.     int         nFields;
  48.     int         i,j;
  49.     gchar *text[3];
  50.     gtk_clist_clear(GTK_CLIST(list1));
  51.     res=ress;
  52.     nFields = PQnfields(res);
  53.     for (i = 0; i < nFields; i++)
  54.         printf("%-15s", PQfname(res, i));
  55.     printf("\n\n");

  56.     for (i = 0; i < PQntuples(res); i++)
  57.     {
  58.         for (j = 0; j < nFields; j++)
  59.             {printf("%-15s", PQgetvalue(res, i, j));
  60.              text[j]=g_locale_to_utf8(PQgetvalue(res,i,j),-1,NULL,NULL,NULL);
  61.              }
  62.         printf("\n");
  63.         gtk_clist_append(GTK_CLIST(list1),text);
  64.     }
  65. }

  66. int exit_nicely(PGconn *conn )
  67. {
  68.     PQfinish(conn);
  69.     exit(1);
  70. }

  71. void mysearch(GtkEntry *entry1 )
  72. {
  73.   char *sqltxt, *sqltmp;
  74.   gchar *txt, *strlocal;
  75.   char *sqls = malloc(254);
  76.   sqltxt = "select name,sex,address from test where name like '%";
  77.   sqltmp = "%'";
  78.   txt = gtk_entry_get_text (GTK_ENTRY (entry1));
  79.   strlocal=g_locale_from_utf8(txt,-1,NULL,NULL,NULL);
  80.   printf("txt is %s",strlocal);
  81.   searchtxt = strlocal;
  82.   strcpy(sqls,sqltxt);
  83.   strcat(sqls,(char *)searchtxt);
  84.   strcat(sqls,sqltmp);
  85.   printf("sqltxt is %s\n",sqls);
  86.   conres(conn,sqls);
  87.   reslist(res);
  88.   PQclear(res);
  89.   free(sqls);
  90. }

  91. gint delete_event( GtkWidget *widget,
  92.                    GdkEvent  *event,
  93.                    gpointer   data )
  94. {
  95.     return FALSE;
  96. }

  97. void destroy( GtkWidget *widget,
  98.               gpointer   data )
  99. {
  100.     PQfinish(conn);  
  101.     gtk_main_quit ();
  102. }

  103. int main( int   argc,
  104.           char *argv[] )
  105. {
  106.     GtkWidget *window;
  107.     GtkWidget *fixed;
  108.     GtkWidget *label1;        
  109.     GtkWidget *entry1;
  110.     GtkWidget *button;   
  111.     gchar *titles[3];
  112.     gchar  *titlestr;

  113.     condb();
  114.     setlocale(LC_ALL,"");
  115.     gtk_init (&argc, &argv);
  116.    
  117.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  
  118.     g_signal_connect (G_OBJECT (window), "delete_event",G_CALLBACK (delete_event), NULL);
  119.     g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (destroy), NULL);
  120.     gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  121.    
  122.     fixed = gtk_fixed_new();
  123.     gtk_container_add(GTK_CONTAINER(window),fixed);
  124.     gtk_widget_show(fixed);
  125.     titlestr=g_locale_to_utf8("数据浏览",-1,NULL,NULL,NULL);
  126.     label1 = gtk_label_new (titlestr);
  127.     gtk_fixed_put (GTK_FIXED(fixed),label1,80,10);
  128.     gtk_widget_show (label1);  
  129.    
  130.     titlestr=g_locale_to_utf8("查找",-1,NULL,NULL,NULL);
  131.     entry1 = gtk_entry_new ();
  132.     button = gtk_button_new_with_label (titlestr);
  133.     gtk_entry_set_max_length (GTK_ENTRY (entry1), 10);
  134.     gtk_entry_set_text (GTK_ENTRY (entry1), "");  
  135.     gtk_fixed_put (GTK_FIXED(fixed),entry1,15,35);
  136.     gtk_fixed_put (GTK_FIXED(fixed),button,185,30);
  137.     gtk_widget_show (entry1);
  138.     gtk_widget_show (button);
  139.    
  140.     titles[0]=g_locale_to_utf8("姓名",-1,NULL,NULL,NULL);
  141.     titles[1]=g_locale_to_utf8("性别",-1,NULL,NULL,NULL);
  142.     titles[2]=g_locale_to_utf8("住址",-1,NULL,NULL,NULL);
  143.     list1=gtk_clist_new_with_titles (3,titles);
  144.     gtk_clist_set_column_width(GTK_CLIST(list1),0,100);
  145.     gtk_fixed_put (GTK_FIXED(fixed),list1,10,70);
  146.     gtk_widget_show (list1);
  147.    
  148.     gtk_widget_show (window);
  149.    
  150.     g_signal_connect_swapped (G_OBJECT (button), "clicked",G_CALLBACK (mysearch),entry1);
  151.    
  152.     gtk_main ();   
  153.    
  154.     return 0;
  155. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-2-24 08:46:18 | 显示全部楼层
cuigf以后贴代码时要注意保持缩进,具体方法看置顶的论坛索引。
回复 支持 反对

使用道具 举报

发表于 2005-2-24 16:26:06 | 显示全部楼层
谢版主提醒,知道了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表