#include <gtk/gtk.h>
 #include <stdio.h>
 #include <stdlib.h>

 /*
  *点击了关闭按钮之后的回调函数
  *gtk_main_quit();结束main函数循环,退出process
  *TURE:表示事件已处理禁止进一步传播,从而取消关闭操作;
  *FALSE:事件消息进一步向上传播,从而关闭窗口
  */
 gint delete_event( GtkWidget *widget, GdkEvent *event, gpointer data )
 {
     gtk_main_quit ();//如果不要该语句,当return TURE时,程序没有任何反应。return FALSE时,仅关闭窗口,而不会退出程序
     return FALSE;
 }

 /*helloWorld函数,作用是弹出一个dialog*/
 void helloWorld (GtkWidget *wid, GtkWidget *win)
 {
     GtkWidget *dialog = NULL;
     //系统常量GTK_MESSAGE_INFO是在说明我们想要生成info对话框。系统常量GTK_BUTTONS_CLOSE将生成一个”关闭”按钮,最后一个参数是我们想要在对话框中显示的文字。
     dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "hello world");
     gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);//显示在屏幕中央
     gtk_dialog_run (GTK_DIALOG (dialog));
     gtk_widget_destroy (dialog);
 }

 /*nihaoshijie函数,作用是弹出一个dialog*/
 void nihaoshijie (GtkWidget *wid, GtkWidget *win)
 {
     GtkWidget *dialog = NULL;
     dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK_CANCEL, "nihaoshijie");
     gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
     gtk_dialog_run (GTK_DIALOG (dialog));
     gtk_widget_destroy (dialog);
 }

 /*主函数*/
 int main( int argc, char *argv[])
 {
     GtkWidget *window;//定义窗口
     GtkWidget *button1;//定义button
     GtkWidget *button2;//定义button
     GtkWidget *hbox;//定义hbox

     gtk_init(&argc, &argv);//初始化

     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);//创建标准窗口
     gtk_window_set_title (GTK_WINDOW (window), "my frist gtk+ program!");//设置窗口title
     gtk_window_set_default_size(GTK_WINDOW(window),,);//设置窗口大小

     gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
     g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(delete_event),NULL);//创建信号连接,点击窗口上“关闭”按钮,调用delete_event函数

     hbox = gtk_hbox_new(TRUE,);//创建box
     gtk_container_add (GTK_CONTAINER (window), hbox);//将box添加到窗口

     button1 = gtk_button_new_with_label("hello world!");//创建按钮
     g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(helloWorld),NULL);//创建信号连接,clicked button时,调用helloWorld函数
     gtk_box_pack_start(GTK_BOX(hbox),button1,TRUE,FALSE,);//将按钮添加到box

     button2 = gtk_button_new_with_label("nihao shijie!");//创建按钮
     g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(nihaoshijie),NULL);//创建信号连接,clicked button时,调用nihaoshijie函数
     gtk_box_pack_start(GTK_BOX(hbox),button2,FALSE,FALSE,);//将按钮添加到box

     //点击窗口上面的关闭按钮时,退出程序。实现的机能跟g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(delete_event),NULL);一样
     //g_signal_connect_swapped(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);

     //显示控件,自顶向下。不然窗口出来了,按钮没出来
     gtk_widget_show(button1);
     gtk_widget_show(button2);
     gtk_widget_show(hbox);
     gtk_widget_show(window);
     gtk_main();

     ;
 }

实现的功能是显示一个窗口,上面显示两个按钮,一个“helloworld”,一个“nihaoshijie”。点击helloworld,弹出一个helloWorld的dialog。

GTK+2.0学习——第一个GTK程序的更多相关文章

  1. 0~5年一个Java程序员的晋升之路

    在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变 ...

  2. GTK+2.0学习——C指针回顾

    工作需要,开始做GTK,但是很久没碰C了,来捡一下C的精华. 一.*和&的意义 *:指针运算符 &:取地址运算符 两者优先级一样,从右向左方向结合 二.指针和指针变量 指针:一个变量的 ...

  3. GTK+2.0学习——code::block使用

    在之后使用中会慢慢去完善~~ 一.编码设置 1.设置文件编码:setting->editor->如图 2.设置编译时的编码(记住二者要统一):setting->compiler-&g ...

  4. Android学习——第一个NDK程序

    在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了.可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用, ...

  5. C语言学习_一个简单程序的解释与C学习方法概括

    简单计算器程序示例: # include <stdio.h> //1.头文件 //2.加法函数 int add(int a,int b)//3.函数定义方式 { //4.函数体 retur ...

  6. Linux内核学习--写一个c程序,并在内核中编译,运行

    20140506 今天开始学习伟大的开源代表作:Linux内核.之前的工作流于几个简单命令的应用,因着对Android操作系统的情愫,“忍不住”跟随陈利君老师的步伐,开启OS内核之旅.学习路径之一是直 ...

  7. cocos2d-x 3.0 学习笔记: 一个可以拖拽的Label及schedule的应用

    #ifndef _DRAGLABEL_H_ #define _DRAGLABEL_H_ #include "cocos2d.h" USING_NS_CC; class DragLa ...

  8. 学习第一个python程序

    打印9*9惩罚表 for i in range(1,10): for j in range(1,i+1): print(str(j)+"*"+str(i)+"=" ...

  9. linux下c图形化编程之gtk+2.0简单学习

    在linux下想做一个图形化的界面,然后自己选择使用gtk+2.0来进行编辑,我的电脑已经安装过gtk+2.0了,所以就在网上找了一个安装方法,结果未测试,大家有安装问题可以说下,一起探讨下. 1.安 ...

随机推荐

  1. ASP.NET请求处理过程

    当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给Aspnet_isapi.dll,aspnet_isapi.dll会通 ...

  2. Toad for Oracle的安装

    分享一下Oracle 10gToad for Oracle的安装步骤   三年前用过Oracle,单纯的“用过”,主要就是说对数据库的一些操作,还不包含创建一些存储过程之类的,所以对Oracle仅仅只 ...

  3. Linux 下安装 SVN服务器

    前段时间换了一个新项目组.过去发现居然SVN都没有.代码都是手动对比存档.当时就蛋疼了.这他妈也太苦逼了.话不多说,要来测试服务器地址.开工了.由于服务器不能连接外网. 1.先下载安装包.本次安装不结 ...

  4. Working with Entity Relations in OData

    Working with Entity Relations in OData 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs. ...

  5. Hashmat the brave warrior - UVa10055

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10055.html 题目描述 Pr ...

  6. Moq的使用心得

    Moq的使用心得 1.Moq中Mock Repository时最好是Mock Repository的接口,这样会避免不知名的错误. var mockClubRepository = new Mock& ...

  7. 【GitHub】在Mac上配置/使用Github

    以前一直听说过Github,但是自己一直不会用.最近不是太忙,于是想捣鼓捣鼓Github,没想到用了将近3个小时,才在Mac上配置成功. 首先简单介绍一下Git和Github 集中化的版本控制系统( ...

  8. 在Netbeans上配置Android开发环境

    在NetBeans下开发Android的所需要的基本条件:NetBeans(包含JDK)+Android SDK+NBAndroid(为Netbeans设计的Android 开发插件) 详情:http ...

  9. iOS 7用户界面过渡指南

    iOS 7用户界面过渡指南 泽涛陈 | 交互设计 视觉设计 译译生辉 | 2013.06.26 本文最新PDF格式文档下载: http://vdisk.weibo.com/s/InBpB(2013年7 ...

  10. asp.net的ajax以及json

    asp.net的ajax以及json 来现在这家公司以前,从未接触过webform,以前在学校做的项目是php,java以及asp.net mvc的,当时asp.net mvc用的是razor引擎,所 ...