實現功能:沒什麼特定功能,只是爲了熟悉一下button控件和消息事件而已(彌補上一個程序沒有實現的消息事件)
/* File: button_hello.c
* Date: Tue Mar 24 14:58:06 HKT 2015
* Describe: a simple button show
* Autor: won
*/
#include <gtk/gtk.h>
#include <stdio.h>
//這是一個回調函數,觸發時會在終端打印信息
void hello(GtkWidget *widget, gpointer *data)
{
g_print("data from button: %s\n", (char *)data);
}
//這是一個回調函數,用來響應關閉信號
void destroy(GtkWidget *widget, gpointer *data)
{
gtk_main_quit();
}
int main(int argc, char *argv[])
{
//定義指向控件的指針
GtkWidget *window;
GtkWidget *button;
//初始化圖形顯示環境
gtk_init(&argc, &argv);
//創建窗口,並設置當關閉窗口時要執行的回調函數
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(destroy), NULL);
//設置窗口屬性
gtk_container_border_width(GTK_CONTAINER(window), 20);
//創建按鈕,並設置當單擊按鈕時要執行的回調函數
button = gtk_button_new_with_label("Hello World");
g_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(hello), "button message");
//將按鈕加入到窗口中
gtk_container_add(GTK_CONTAINER(window), button);
//顯示窗體和按鈕
gtk_widget_show(button);
gtk_widget_show(window);
//進入消息處理循環
gtk_main();
return 0;
}
主要是g_signal_connect()函數,原型如下:
#define g_signal_connect(instance, detailed_signal, c_handler, data)
編譯:
gcc button_hello.c -o button_hello `pkg-config --cflags --libs gtk+-2.0`
運行效果:
按下按鍵的時候會打印:
$ ./button_hello
data from button: button message