免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6943 | 回复: 6
打印 上一主题 下一主题

GTK+ 2.0 教程--用 GTK 来写 Hello World [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-24 18:47 |只看该作者 |倒序浏览
GTK+ 2.0 教程--用 GTK 来写 Hello World

http://www.supcode.com/Article/html/4/50/2005/03/08/050298737425.shtml
作者:未知  来源:从互联网收集整理并转载  发布时间:2005-3-8 0:50:29  发布人:mmbb

GTK+2.0教程 下载
http://www.cnblogs.com/Files/lj0508/gtk2-tut.rar

用 GTK 来写 Hello World

好,现在来写一个只有一个按钮构件的程序,这是一个标准的 GTK Hello World。


  1. #include <gtk/gtk.h>

  2. /* 这是一个回调函数。data 参数在本示例中被忽略。
  3. * 后面有更多的回调函数示例。*/
  4. void hello( GtkWidget *widget,
  5.             gpointer   data )
  6. {
  7.     g_print ("Hello World\n");
  8. }

  9. gint delete_event( GtkWidget *widget,
  10.                    GdkEvent  *event,
  11.                    gpointer   data )
  12. {
  13.     /* 如果你的 "delete_event" 信号处理函数返回 FALSE,GTK 会发出
  14. "destroy" 信号。
  15.      * 返回 TRUE,你不希望关闭窗口。
  16.      * 当你想弹出“你确定要退出吗?”对话框时它很有用。*/

  17.     g_print ("delete event occurred\n");

  18.     /* 改 TRUE 为 FALSE 程序会关闭。*/

  19.     return TRUE;
  20. }

  21. /* 另一个回调函数 */
  22. void destroy( GtkWidget *widget,
  23.               gpointer   data )
  24. {
  25.     gtk_main_quit ();
  26. }

  27. int main( int   argc,
  28.           char *argv[] )
  29. {
  30.     /* GtkWidget 是构件的存储类型 */
  31.     GtkWidget *window;
  32.     GtkWidget *button;
  33.    
  34.     /* 这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到
  35. 该程序中*/
  36.     gtk_init (&argc, &argv);
  37.    
  38.     /* 创建一个新窗口 */
  39.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  40.    
  41.     /* 当窗口收到 "delete_event" 信号 (这个信号由窗口管理器发出,通常是
  42. “关闭”
  43.      * 选项或是标题栏上的关闭按钮发出的),我们让它以上面定义的形式调用
  44. delete_event() 函数。
  45.      * 传给回调函数的 data 参数值是 NULL,它会被回调函数忽略。*/
  46.     g_signal_connect (G_OBJECT (window), "delete_event",
  47.                       G_CALLBACK (delete_event), NULL);
  48.    
  49.     /* 在这里我们连接 "destroy" 事件到处理函数。  
  50.      * 调用 gtk_widget_destroy() 函数或在 "delete_event" 回调函数中返回
  51. FALSE 值
  52.      * 都可以触发 "destroy" 事件。*/
  53.     g_signal_connect (G_OBJECT (window), "destroy",
  54.                       G_CALLBACK (destroy), NULL);
  55.    
  56.     /* 设置窗口边框的宽度。*/
  57.     gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  58.    
  59.     /* 创建一个标签为 "Hello World" 的新按钮。*/
  60.     button = gtk_button_new_with_label ("Hello World");
  61.    
  62.     /* 当收到 "clicked" 信号时会调用上面定义的 hello() 函数。*/
  63.     g_signal_connect (G_OBJECT (button), "clicked",
  64.                       G_CALLBACK (hello), NULL);
  65.    
  66.     /* 当点击按钮时,会通过调用 gtk_widget_destroy(window) 函数关闭窗口

  67.      * "destroy" 信号会从这里或从窗口管理器发出。*/
  68.     g_signal_connect_swapped (G_OBJECT (button), "clicked",
  69.                               G_CALLBACK (gtk_widget_destroy),
  70.                               window);
  71.    
  72.     /* 把按钮放入窗口 (gtk 容器) 中。*/
  73.     gtk_container_add (GTK_CONTAINER (window), button);
  74.    
  75.     /* 最后一步是显示新创建的按钮和窗口 */
  76.     gtk_widget_show (button);
  77.     gtk_widget_show (window);
  78.    
  79.     /* 所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里
  80.      * 等待事件 (如键盘事件或鼠标事件) 的发生。*/
  81.     gtk_main ();
  82.    
  83.     return 0;
  84. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2005-11-29 16:12 |只看该作者
好啊,我正买不起书呢
directx 该用户已被删除
3 [报告]
发表于 2007-09-17 16:05 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2007-10-07 15:30 |只看该作者
helloworld.c:5: 错误: expected ‘)’ before ‘*’ token
helloworld.c:11: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘delete_event’
helloworld.c:28: 错误: expected ‘)’ before ‘*’ token
helloworld.c: 在函数 ‘main’ 中:
helloworld.c:38: 错误: ‘GtkWidget’ 未声明 (在此函数内第一次使用)
helloworld.c:38: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
helloworld.c:38: 错误: 所在的函数内只报告一次。)
helloworld.c:38: 错误: ‘window’ 未声明 (在此函数内第一次使用)
helloworld.c:39: 错误: ‘button’ 未声明 (在此函数内第一次使用)
helloworld.c:46: 错误: ‘GTK_WINDOW_TOPLEVEL’ 未声明 (在此函数内第一次使用)
helloworld.c:54: 错误: ‘delete_event’ 未声明 (在此函数内第一次使用)
helloworld.c:54: 错误: ‘NULL’ 未声明 (在此函数内第一次使用)
helloworld.c:61: 错误: ‘destroy’ 未声明 (在此函数内第一次使用)
helloworld.c:71: 错误: ‘hello’ 未声明 (在此函数内第一次使用)
helloworld.c:77: 错误: ‘gtk_widget_destroy’ 未声明 (在此函数内第一次使用)


不能通过编译

论坛徽章:
0
5 [报告]
发表于 2007-10-07 15:34 |只看该作者
这么多未声名函数在是头文件中吗?

论坛徽章:
0
6 [报告]
发表于 2007-10-08 12:19 |只看该作者
原帖由 freesky3555 于 2007-10-7 15:30 发表


不能通过编译


至于如何编译 GTK+ 程序,根据你使用的是 1.x 版还是 2.x 版,请分别参考相应的“Getting Started”一章的“Compiling Hello World”一节:

GTK+ 2.0 Tutorial:http://www.gtk.org/tutorial/

GTK v1.2 Tutorial:http://www.gtk.org/tutorial1.2/

论坛徽章:
0
7 [报告]
发表于 2007-10-23 16:17 |只看该作者
编译出来了!

littlewindows.jpg (3.35 KB, 下载次数: 73)

GUI小窗口

GUI小窗口
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP