#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. Windows平台分布式架构实践负载均衡

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...

  2. Oracle琐碎笔记2

    备注:以下所有操作均在sqlplus中执行. 开始前输入:spool c:\jiyi.txt;结束后输入:spool off;就会记忆操作的所有记录save c:\sql.sql;保存sql脚本可以使 ...

  3. PLAN :昔日未来

    <昔日未来> 1. C语言: 必须要看的书:<C程序设计语言><C标准库> 像<C和指针>,<C专家编程>,<C陷阱>这种书虽很 ...

  4. MD5算法-爬虫学习(五)

    在实现爬虫的时候,我们使用Hash结构去存储我们用过的URL的时候,有些URL可能长度很长,为了更加节省空间,我们就要对URL进行压缩,帮它减减肥,这个我们介绍这个MD5算法,可以对URL进行有效的压 ...

  5. D11

    =-=感觉今天的题目好难... 主要是没有碰到过,所以会觉得不懂怎么写.. 其实现在想想,T1,T2,T3其实都好水..T1其实没有做过还真不会,有做过的话就是个大水题了 T2找最小环..超级裸的,但 ...

  6. Java读书笔记1

    Java逍遥游记读书笔记 前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java ...

  7. 用django搭建一个简易blog系统(翻译)(一)

    Django 入门 原始网址: http://www.creativebloq.com/netmag/get-started-django-7132932 代码:https://github.com/ ...

  8. ul和li实现分两列(多列)布局显示

    简单语句实现DIV+CSS分两列(多列)布局显示 <style type="text/css"> .my ul { width: 210px; } .my li { w ...

  9. IceMx.Mvc 我的js MVC 框架七、完善植物大战僵尸(增加阳光的消费和获得)

    话不多说,先上图 这次增加了阳光的消费和获得,增加了阳光的点击动画 重新排布了布局 有兴趣的话就研究下吧. 上一篇有朋友说让我把项目放到github上面维护,本人没用过这个,肯请朋友们帮小弟科普一下放 ...

  10. 如何对软件开发工具 WebBuilder 进行安装?

    WebBuilder是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企业级应 ...