#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. ajax的post请求

    get和post是http请求方法最主要的两种方式. post: 来个例子test.html <!doctype html> <html lang="en"> ...

  2. 泛型Hub

    SignalR循序渐进(二)泛型Hub 接上一篇,文章末尾抛出了2个问题: 能不能让客户端声明一个强类型的方法列表呢?这样首先不容易写错. 同样的,能不能让服务端声明一个强类型的方法列表给客户端调用呢 ...

  3. [置顶] Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

  4. 正则表达式测试分析工具Expresso

    正则表达式测试分析工具Expresso 一个正则表达式的小工具--myRegexHelper   把以前做的一个功能抽取出来做成一个小的正则表达式测试工具.没什么特色,有两点功能: 一.方便的测试正则 ...

  5. [google面试CTCI] 2-1.移除链表中重复元素

    [链表] Q:Write code to remove duplicates from an unsorted linked list      FOLLOW UP      How would yo ...

  6. (转)最大似然估计&贝叶斯估计

    最大似然估计&贝叶斯估计 与传统计量模型相对的统计方法,存在 1)参数的解释不同:经典估计:待估参数具有确定值它的估计量才是随机的.如果估计量是无偏的,该估计量的期望等于那个确定的参数.bay ...

  7. Oracle和Mysql分别生成sequence序列

    有时候在往数据库中插入数据的时候,如果ID值是32位的UUID, 而自己随便写个字符又不合适,这时就要用到函数来产生一个序列值 Oracle: select sys_guid() from dual; ...

  8. OpenCV249 for python278 最简配置方案

    跟很多开源软件一样OpenCV也提供了完善的Python接口,非常便于调用.OpenCV 包含了超过 2500 个算法和函数,几乎任何一个能想到的成熟算法都可以通过调用OpenCV的函数来实现,超级方 ...

  9. C#多线程解决界面卡死问题

    C#多线程解决界面卡死问题的完美解决方案 文章下最方有源码下载 问题描述:当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 ...

  10. Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal

    Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal Linuxjournal 网站经典文章翻译,原文地址: Large-S ...