C言語でGTK+ 2を扱う上での幾つかのメモ(第2回)
「C言語でGTK+ 2を扱う上での幾つかのメモ(第1回)」の続き。
基本的な形
用いるヘッダファイル
ヘッダファイルはgtk/gtk.hを参照する。GTK+ 2ではGLib 2の関数(「g_」で始まる名前の関数)を用いることも多いが、GLib 2のヘッダファイル(glib/glib.h)はプログラムから直接参照する必要はない。
流れ
- メッセージの国際化に関する処理(任意/メッセージ国際化を行う場合のみ)
- gtk_init()による初期化
- GUI部品の処理(作成や表示,各種設定など)
- GUI部品ごとにイベント(GObjectシグナル)とハンドラ関数を関連付け(接続)
- gtk_main()によるメインループ開始
- メインループを抜けた後に行う必要のある処理がある場合、必要に応じて記述
のようになる。
#include <gtk/gtk.h> #include <stdlib.h> int main (int argc, char **argv) { /* メッセージの国際化を行う場合にはbindtextdomain()などの関数をここで呼ぶ */ gtk_init (&argc, &argv); /* ここにGUI部品の処理とシグナル接続などを記述... */ gtk_main (); /* gtk_main_quit()によりメインループを抜けたときに行いたい処理がある場合はここに記述 */ return EXIT_SUCCESS; }
この他、コマンド行引数の解析などの別の処理が必要であれば、最初の段階で行う。
非常にシンプルな例
下は「Hello」と書かれた情報ダイアログを表示し、閉じると終了する。これはダイアログの実行のみでメインループは用いていない。
[任意]ファイル名: infodialogtest.c
#include <gtk/gtk.h> #include <stdlib.h> /* * gcc -O2 -Wall -Wextra $(pkg-config --cflags --libs gtk+-2.0) infodialogtest.c -o infodialogtest */ int main (int argc, char **argv) { /* ダイアログのGUI部品 */ GtkWidget *dialog; /* GTK+の初期化 */ gtk_init (&argc, &argv); /* * メッセージダイアログを作成 * http://library.gnome.org/devel/gtk/stable/GtkMessageDialog.html#gtk-message-dialog-new */ dialog = gtk_message_dialog_new (NULL, /* 親ウィンドウ or NULL */ 0, /* ダイアログの設定フラグ */ GTK_MESSAGE_INFO, /* ダイアログの種類 */ GTK_BUTTONS_CLOSE, /* ボタンの並びの種類 */ "Hello"); /* メッセージ内容 */ /* ダイアログを実行 */ gtk_dialog_run (GTK_DIALOG (dialog)); /* 「GtkDialog *」型を要求 マクロで型変換する */ /* GUI部品を破棄,中に部品を含む場合はそれも含めて破棄する */ gtk_widget_destroy (dialog); /* ダイアログを出すだけのプログラムなのでメインループは回さないで終了する */ return EXIT_SUCCESS; }
データの型とgtk_dialog_run()の行のような型変換,gtk_widget_destroy()の処理などについては別記事で扱う。
(「C言語でGTK+ 2を扱う上での幾つかのメモ(第3回)」に続く)
関連記事: