GTKというものを始めてみました
これはLinux等で使えるGUIアプリケーションを作るためのツールキットのようなもので
用意された関数等を呼ぶとGUIアプリが作れるというものです
今回はUbuntu LTS 日本語Remix上に入れたGTK2.0を使いました
UbuntuはWin7x64上のOracle VM VirtualBoxか、Mac 10.8上のParallels8のどちらでも動作を確認しています
GTKのインストールは
$ sudo apt-get install libgtk2.0-dev
を
ビルドする場合は
$ gcc source.c `pkg-config --cflags --libs gtk+-2.0`
です
pkg-configの前と最後はシングルクォーテーションではなくグレイヴアクセントであることに注意してください
この記号はJISキーボードであればシフトキーを押しながらアットマークキーを USキーボードならESCキーの下のあたりにある波ダッシュキーを押すことにより入力できます
エディタはViを使いましたが、基本的に使いやすいものを使っても大丈夫です
GTKアプリはgtk/gtk.hをインクルードしておく必要があります
CbackButtonClickedとCreateButton関数は放置するとして
main関数は一般的なCUIアプリと同様です
int argcとchar ** argvが引数です
まずローカル変数としてはGtkWidgetポインタ型のwindowという変数を宣言しておきます
これはFILE *fp等と同じように扱います
この変数(が指し示すメモリ)にGUIの様々な設定が入りますが、普段は変数の中身を気にすることは無いでしょう(設定は関数経由で行われる)
次に gtk_init 関数があり、これはargcとargvのポインタを渡します
argcとargvは値渡しではなく参照渡しであることに注意です
次に gtk_window_new 関数でメインのウィンドウを作ります
引数はGTK_WINDOW_TOPLEVELで、ポップアップウィンドウなどではこれが変わります
戻り値を変数windowに入れておきます
次に gtk_widget_set_size_request 関数でウィンドウの大きさを設定します
第一引数に対象のGtkWidgetポインタを 第二引数と第三引数にそれぞれ横解像度と縦解像度を与えます
次にCreateButton関数を読んでいますが、これはボタンを作成するためのサブルーチンです
ウィンドウと同じく GtkWidget *button 変数を作り、gtk_button_new_with_label関数でボタンの雛形を作成します
gtk_button_new...関数の引数はボタンに表示される文字列を与えます
次にgtk_container_add関数を使い、ウィンドウと関連付けをします
最後にg_signal_connect関数でボタンがクリックされた際に呼び出される関数を指定子ます
イベント"clicked"を指定し、関数はCbackButtonClickedです
第四引数にはコールバック関数に与える引数を設定できますが、今回はNULLとしておきます
感覚的にはgtk_container_addよりもg_signal_connectを先にしたほうがいいかもしれません
CbackButtonClecked関数の中身は gtk_main_quit 関数を読んでいるだけです
GtkWindget *buttonは任意のタイミングで破棄して問題ないようです
main関数に戻り
次は g_signal_connect ですが、これはウィンドウが閉じられた際にプログラムを終了するために設定します
これをしておかないとウィンドウを閉じたのにプログラムは終了しない といったことになりかねません
イベント"destroy"でgtk_main_quit関数を呼ぶように設定します
最後に gtk_widget_show_all でウィンドウを表示します
gtk_widget_show という関数もありますが _allを付けない場合はボタンなどが表示されないので注意してください
あとは gtk_main() 関数を呼び出してループに突っ込みます
gtk_main_quit はgtk_main()で呼んだループを終了させる役目があります
gtk_mainを抜けだすとmain関数に戻り、その後は何も処理を書いていないのでreturn(0)で正常終了します
これを上記コマンドでビルドするとa.outというプログラムが作成されます
a.outアイコンをダブルクリックするか、端末でa.outを起動すると上記画面に表示されているボタンが1個あるだけのプログラムが表示されます
☓印をクリックして閉じてもいいですし、ボタンをクリックして終了してもいいです
このコードはGTKの基本的な使い方を学べると思います
ボタンが2つ有るウィンドウ等を作る場合は更に複雑になりますが、基本的に上記の手順で作成することができます
OSをLinuxに限定せず、Windows等を使っていいのならC#等のGUIアプリを作る方法はたくさんありますが、今回はLinux上のGTKを使ってみました