手始めに
X Windowプログラミングという目に見えるプログラミングということで,とりあえず何か出してみる.
GUIプログラミングでよくあるのがイベント駆動だ(というかGUIなら必然的にそうなるのだろうか).Windowか何か出して,それに対してユーザがマウスか何かでいじるとイベントが発生してそのイベントに応じて適切な処理を行うという感じだ.
#include <gtk/gtk.h>
/* ボタンを押したときの処理 */
void button_clicked(GtkWidget *widget,gpointer data)
{
/* メッセージを出力 */
g_print("押すなって\n");
}
/* destroyイベントの処理 */
void destroy(GtkWidget *widget,gpointer data)
{
gtk_main_quit();
}
int main(int argc,char *argv[])
{
GtkWidget *window;
GtkWidget *button;
/* お約束1 ロケールの設定 */
gtk_set_locale();
/* お約束2 オプションの処理 */
gtk_init(&argc,&argv);
/* お約束3 rcファイルの読み込み */
gtk_rc_parse("./gtkrc");
/* ウィンドウを生成 */
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* 上のウィンドウにシグナルを登録 */
gtk_signal_connect(GTK_OBJECT(window),"destroy",
GTK_SIGNAL_FUNC(destroy),NULL);
/* ウィンドウと配置するウィジェットのすき間を設定 */
gtk_container_border_width(GTK_CONTAINER(window),10);
/* ラベル付きボタンの生成 */
button=gtk_button_new_with_label("押してみて");
/* 上のボタンにシグナルを登録 */
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(button_clicked),NULL);
/* ウィンドウにボタンを載せる */
gtk_container_add(GTK_CONTAINER(window),button);
/* ボタンとウィンドウを可視にする */
gtk_widget_show(button);
gtk_widget_show(window);
/* メインイベントループへ */
gtk_main();
exit(0);
}
このサンプルmainのように,プログラムの大きな流れは,ウィジェットというウィンドウとかボタンといったやつを生成して,そのウィジェットに「このイベントのシグナルを受け取ったらこの関数を実行してね」といって,ウィジェットをshowする,というものだ.まったくもってイベント駆動プログラムとなる.
gtkをコンパイルするにはgccにライブラリやヘッダの場所を教えてあげる必要があるが,これを調べたり打ち込んだりするのは面倒くさい.gtk-configはgtkプログラムをコンパイルするのに必要なそれらを出力してくれる.ので,以下のようにすればコンパイルできる.
gcc $(gtk-config --libs --cflags) hoge.c -o hoge

