GTK3学习笔记2 Hello World in GTK+

来源:互联网 发布:手机淘宝无响应怎么办 编辑:程序博客网 时间:2024/06/06 04:08

上节讲了在Windows上建立GTK3的codeblocks开发环境,这节讲Example 1. Hello World in GTK+。

例子很简单,实现了窗口和一个普通按钮,效果如图:


源代码如下,有很简单的英文注释,容易看懂,就不翻译了:

#include <gtk/gtk.h>/* 下面是两个回调函数 */static void print_hello (GtkWidget *widget,                         gpointer   data){    g_print ("Hello World\n");}static gboolean on_delete_event (GtkWidget *widget,                                 GdkEvent  *event,                                 gpointer   data){    /* If you return FALSE in the "delete_event" signal handler,     * GTK will emit the "destroy" signal. Returning TRUE means     * you don't want the window to be destroyed.     *     * This is useful for popping up 'are you sure you want to quit?'     * type dialogs.     */    g_print ("delete event occurred\n");    return TRUE;}int main (int argc, char *argv[]){    /* GtkWidget is the storage type for widgets */    GtkWidget *window;    GtkWidget *button;    /* This is called in all GTK applications. Arguments are parsed     * from the command line and are returned to the application.     */    gtk_init (&argc, &argv);    /* create a new window, and set its title */    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);    gtk_window_set_title (GTK_WINDOW (window), "Hello");    /* When the window emits the "delete-event" signal (which is emitted     * by GTK+ in response to an event coming from the window manager,     * usually as a result of clicking the "close" window control), we     * ask it to call the on_delete_event() function as defined above.     *     * The data passed to the callback function is NULL and is ignored     * in the callback function.     */    g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), NULL);    /* Here we connect the "destroy" event to the gtk_main_quit() function.     *     * This signal is emitted when we call gtk_widget_destroy() on the window,     * or if we return FALSE in the "delete_event" callback.     */    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);    /* Sets the border width of the window. */    gtk_container_set_border_width (GTK_CONTAINER (window), 10);    /* Creates a new button with the label "Hello World". */    button = gtk_button_new_with_label ("Hello World");    /* When the button receives the "clicked" signal, it will call the     * function print_hello() passing it NULL as its argument.     *     * The print_hello() function is defined above.     */    g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);    /* The g_signal_connect_swapped() function will connect the "clicked" signal     * of the button to the gtk_widget_destroy() function; instead of calling it     * using the button as its argument, it will swap it with the user data     * argument. This will cause the window to be destroyed by calling     * gtk_widget_destroy() on the window.     */    g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);    /* This packs the button into the window. A GtkWindow inherits from GtkBin,     * which is a special container that can only have one child     */    gtk_container_add (GTK_CONTAINER (window), button);    /* The final step is to display this newly created widget... */    gtk_widget_show (button);    /* ... and the window */    gtk_widget_show (window);    /* All GTK applications must have a gtk_main(). Control ends here     * and waits for an event to occur (like a key press or a mouse event),     * until gtk_main_quit() is called.     */    gtk_main ();    return 0;}

下篇博客起,文章长度会增加,对于一些函数将会进行相对详细的中文介绍。

其实GTK3和GTK2的很多基础的函数没有变动,可以参照中文的GTK2教程来阅读官网的GTK3教程,我的博客只是抛砖引玉哈哈,这篇就写到这。


1 0
原创粉丝点击