TOC

終了するプログラムをつくりましょう

前回作成したプログラムは何もしないプログラム、すなわち終了しないプログラムでした。これでは具合が悪いので、今回はウインドウが閉じたときに終了するプログラムにします。

下のプログラムは前回のプログラムとあまりかわりませんが、多少追加した部分があります。その部分は註釈で示します。

#include <gtk/gtk.h>

int main(int argc,char *argv[]){
  GtkWidget *window;
  gtk_init(&argc,&argv);
  window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);
  /* ここから */
  g_signal_connect(window,"destroy",gtk_main_quit,NULL);
  /* ここまで */
  gtk_main();
  return 0;
}

ウインドウについている「閉じる」ボタンを押すと、プログラムが終了します。

上のプログラムの解説

追加した部分を説明します。

  g_signal_connect(window,"destroy",gtk_main_quit,NULL);

オブジェクトに対してなにか動作があった場合、別の関数をつかう、というものです。オブジェクト名、動作、関数、関数の引数の順に引数をとります。

上の例では、windowが閉じた(destroyした)場合、gtk_main_quit()を使います。

windowが閉じたときのイベントだけでなく、ボタンを押したときのイベント、キーを押したときのイベントなども、このようにして使用します。

gtk_main_quit()は引数をとらず、gtk_main()のループを解除します。

なお、「閉じる」ボタンでウインドウを閉じるとき、「delete-event」、「destroy」の順番にイベントが進みます。今回の場合は、「destroy」の部分を「delete-event」にしても、動作はかわりませんが、「delete-event」をつかうことによって、ウインドウを閉じる前に確認メッセージを表示するなどの動作を指定することができます。

戻る / index / 次へ