引入GTK+3.0的基本头文件#include<gtk/gtk.h>和标准库文件#include<stdio.h>;
声明窗口句柄GtkWidget *window;,再声明一个按钮句柄GtkWidget *button;
main函数内调用gtk_init初始化GTK环境gtk_init(&argc,&argv);

使用gtk_window_new(GTK_WINDOW_TOPLEVEL);创建窗口,使用gtk_window_set_title(GTK_WINDOW(window),"My GTK+3.0 Program!");设置窗口标题,使用gtk_button_new_with_label("按钮");创建按钮,调用gtk_container_add将按钮添加进窗口中gtk_container_add(GTK_CONTAINER(window),button);

设置控件事件的函数为g_signal_connect;原型:

#define g_signal_connect (
  instance,
  detailed_signal,
  c_handler,
  data
)

参数说明:
instance:设置事件的控件句柄
detailed_signal:事件名称
c_handler:事件指针
data:控件唯一名称

无论是窗口还是控件,最后都需要调用gtk_widget_show函数显示。
当所有的创建工作完成后,调用gtk_main将控制权交由GTK环境。

完整代码:

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

GtkWidget *window;
GtkWidget *button;
int i = 0;

void button_click(GtkWidget *btn, gpointer data)
{
    char s[100];
    sprintf(s,"按下了%d次",i);
    gtk_button_set_label(btn,s);
    i++;
}

int main(int argc,char*argv[])
{
    gtk_init(&argc,&argv);
    gtk_window_maximize(window);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"My GTK+3.0 Program!");
    button = gtk_button_new_with_label("按钮");
    gtk_container_add(GTK_CONTAINER(window),button);
    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(button_click),"button 1");
    gtk_widget_show(button);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}

编译方式:gcc m.c -o m.lexe `pkg-config --cflags --libs gtk+-3.0`
运行结果:

Categories: 编程技术