人気ブログランキング | 話題のタグを見る

コールバック関数

GTK+はイベント駆動型のツールキットだ。

main 関数が起動した後は何もしないで待機しているが、ウィンドウのボタンがクリックされたりしてイベントが発生すると、イベントの種類と発生場所によってコールバック関数が呼び出されて実行される。

例えばウィンドウの閉じるボタンがクリックされると、”destroy" イベントが発生する。シグナル・ハンドラはそのイベントを調べて、適当なコールバック関数を呼び出して実行させる。

イベントにコールバック関数を関連付けるには、g_signal_connect 関数でイベントとコールバック関数を関連付ける。例えば、前回のプログラム例では閉じるボタンをクリックしてもウィンドウは消えたが、プログラムは終了せず、Ctrl-Cで強制終了させなければならなかった。

そこで、”destroy" イベントとプログラムを終了させる、destroy関数を関連付けてウィンドウと同時に、プログラムも終了するようにしたものが次のプログラムだ。

#include <gtk/gtk.h>

static void destroy(GtkWidget *widget, gpointer data)
{
    gtk_main_quit ();
}

int main( int argc, char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT (window), "destroy",
                     G_CALLBACK (destroy), NULL);
    gtk_widget_show (window);
    gtk_main ();
}

同じことを Ruby で記述すると、次のようになる。

require 'gtk2'

window = Gtk::Window.new
window.signal_connect("destroy") {
  Gtk.main_quit
}
window.show_all
Gtk.main

このように、イベント駆動型のプログラムでは、イベントにコールバック関数を関連付けるという方法でプログラミングが行われる。
by tnomura9 | 2009-12-17 22:11 | NetWalker | Comments(0)
<< Ruby/GTK2 チュートリアル GTK+ 2.0 でウィンドウ... >>