#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. jsp解决kindeditor在线编辑器struts图片上传问题

    1.下载 官网下载ckeditor,解压后去掉不需要的部分,仅需保留plugin,lang,theme文件夹,这三个文件夹中用不到的东西可以删除, 比如lang文件下存放所有语言文件js,仅仅 保留e ...

  2. 基于Jquery 简单实用的弹出提示框

    基于Jquery 简单实用的弹出提示框 引言: 原生的 alert 样子看起来很粗暴,网上也有一大堆相关的插件,但是基本上都是大而全,仅仅几句话可以实现的东西,可能要引入好几十k的文件,所以话了点时间 ...

  3. Effective C++(14) 在资源管理类中小心copying行为

    问题聚焦:     上一条款所告诉我们的智能指针,只适合与在堆中的资源,而并非所有资源都是在堆中的.     这时候,我们可能需要建立自己的资源管理类,那么建立自己的资源管理类时,需要注意什么呢?. ...

  4. test maekdown 2

    Package Control Messages Markdown Preview: Sublime Text 2/3 Markdown Preview ======================= ...

  5. Linq无聊练习系列4--join练习

    /**************join 练习*******************/            //对于1对多关系            var list =from c in ctx.T ...

  6. C# 各种相对路径

               //获取当前可执行的exe的文件名             string str1 = Process.GetCurrentProcess().MainModule.FileNa ...

  7. 领域模型中分散的事务如何集中统一处理(C#解决方案)

    领域模型中分散的事务如何集中统一处理(C#解决方案)   开篇 什么是事务,事务的应用场景 做项目时,经常会遇到一些需求,比如注册用户时,要求同时存入用户的基本信息和初始化该用户的帐户,如果在这两个环 ...

  8. CLR基础之一---认识CLR [《CLR via C#》读书笔记]

    <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...

  9. 聊天工具mychat

    python学习,自己写了个简单聊天工具mychat 最近在学习python,自己写了个最最简单的聊天工具mychatv0.1. 第一版,完成基本的聊天功能. GUI用的是自带的TKinter,用到的 ...

  10. YARN之上的大数据框架REEF:微软出品,是否值得期待?

    YARN之上的大数据框架REEF:微软出品,是否值得期待?   摘要:微软即将开源大数据框架REEF,REEF运行于Hadoop新一代资源管理器YARN的上层.对于机器学习等在数据传输.任务监控和结果 ...