1、编译程序
为了编译GTK+程序,我们有一个方便的工具叫做pkg-config. Pkg-config程序返回关于已安装的库的数据信息。简单的输入我们想使用的库,程序将向我们提供必需的依赖库和包含文件。
gcc -o simple simple.c `pkg-config --libs --cflags gtk+-2.0`
2、第一个程序
简单的例子:
#include <gtk/gtk.h>
int main(int argc, char *argv[] )
{
GtkWidget *window;
gtk_init(&argc, &argv);//初始化GTK+库
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);//创建一个GtkWindow窗口部件。窗口类型为GTK_WINDOW_TOPLEVEL。此类型的窗口有一个标题栏和
//边框
gtk_widget_show(window);//显示
gtk_main();//进入主循环,程序等待事件发生
return 0;
}
编译
gcc -o simple simple.c `pkg-config --libs --cflags gtk+-2.0`
将窗口放置到桌面中心
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{
GtkWidget *window;
gtk_init( &agrc, &argv);
window = get_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title( GTK_WINDOW(window), "Center");//设置标题名,默认为程序文件名
gtk_window_set_default_size( GTK_WINDOW(window), 230, 150)://设置大小
gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_CENTER);//设置到中心
gtk_widget_show(window);
g_signal_connect_swapped( G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
//将销毁信号和函数gtk_main_quit()连接到一起
gtk_main();
return 0;
}
显示程序图标
#include <gtk/gtk.h>
GdkPixbuf *create_pixbuf(const gchar *filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
//函数加载一个图像文件到pixbuf,图像类型自动识别。
if( !pixbuf)
{
fprintf(stderr, "%s\n", error->message);
g_error_free(error);
}
return pixbuf;
}
int main( int argc, char *argv[])
{
GtkWidget *window;
gtk_init( &argc, &argv);
window = get_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "icon");
gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));
gtk_widget_show(window);
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
加-减
综合实例:
建立一个窗口,此窗口包含两个按钮(一个“加”,一个“减”)和一个标签(显示数字)。当按下按钮“加”或“减”时,数字跟着相应变化。
#include <gtk/gtk.h>
gint count = 0;
char buf[5];
void increase(GtkWidget *widget, gpointer label)
{
count++;
sprintf(buf, "%d", count);
gtk_label_set_text(GTK_LABEL(label), buf);
}
void decrease(GtkWidget *widget, gpointer label)
{
count--;
sprintf(buf, "%d", count);
gtk_label_set_text(GTK_LABEL(label), buf);
}
int main( int argc, char **argv)
{
GtkWidget *label;
GtkWidget *window;
GtkWidget *frame;
GtkWidget *plus;
GtkWidget *minus;
gtk_init( &argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 180);
gtk_window_set_title(GTK_WINDOW(window), "+/-");
frame = gtk_fixed_new();
gtk_container_add(GTK_XONTAINER(window), frame);
plus = gtk_button_new_with_label("+");
gtk_widget_set_size_request( plus, 80, 35);
gtk_fixed_put(GTK_FIXED(frame), plus, 50, 20);
minus= gtk_button_new_with_label("-");
gtk_widget_set_size_request( minus, 80, 35);
gtk_fixed_put(GTK_FIXED(frame), plus, 50, 80);
label = gtk_label_new("0");
gtk_fixed_put(GTK_FIXED(frame), label, 190, 58);
gtk_widget_show_all(window);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(plus, "clicked",G_CALLBACK(increase),label);
g_signal_connect(minus, "clicked",G_CALLBACK(decrease),label);
gtk_main();
return 0;
}