GTK+によるウインドウ作成(RHL6.1J導入レポート)

 先日、雑誌についてきたRed Hat Linux 日本語版 6.1(以下RHL6.1J)を入れてみました。いや、これでかいです。900MBほどのパーテーションにフルインストールしようとしたら、容量が足りずインストールできず。しかたないので、最低限使いそうなものだけ入れたけどそれでも500MB以上ですからね。

 使ってみた感じとしては、ほとんどWindowsなみです。っていうかWindowsそのもの。RHL6.1JにはGNOMEという総合デスクトップ環境が入っていて、CD-ROMドライブも見れるエクスプローラそっくりのファイラーやメモ帳感覚で使えるエディタなどが利用できます。しかも、アプリケーション間のドラッグ&ドロップにも対応。ログアウトやシャットダウンもメニューから出来たり、さらには「フリーセル」を始めとするゲームや高機能グラフィックツールもインストールされるなど、なかなか良い感じですね。まあ、ブラウザがスタイルシートなどへの対応度が低いNN4なんで、このあたりはIE4/5が標準のWindows98に比べやや見劣りしますしサウンドカードをはじめとしたハードのサポートもいまいちですが、日常的な作業ならWindowsと同じような感覚で出来るでしょう。
 さらに、インストールするだけでC/C++, Perlをはじめとする多数のコンパイラ・インタプリンタ、プログラミング支援ツールがセットアップされてすぐにプログラミングを始められるので、プログラミング環境としても理想的です。その上RHL 6.1Jでは、ボタンなどの「ウィジェット」を扱うためのツールキット(GTK+)も最初から使えるので、インストールしてすぐにウインドウプログラミングを楽しむ事が出来ます。

 今回は、このGTK+を使ってとりあえず「ウインドウ」を出してみました。実は、GTK+の入門書をだいぶ前に買ってしばらく放って置いたんですが(^^;、今回やってみるとあっけないほど簡単です。たとえば、ウインドウを開くだけなら、以下のようにするだけでウインドウを出してウインドウが閉じられたら終了、というプログラムになってしまいます。Win32APIのように細かい設定は不要ですし、プログラムはCで書けるのでJavaのようにプログラムのクラスがどうの、などと気にする必要もありません。これまでいくつかウインドウ環境のプログラミングをして来ましたが、ウインドウを出すスケルトンとしては今回のプログラムが一番簡単なんじゃないかな。

  #include <gtk/gtk.h>

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

    GtkWidget *window;

    gtk_init(&argc, &argv);

    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_signal_connect(GTK_OBJECT(window), "destroy",
      GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

    gtk_widget_show(window);

    gtk_main();

    return 0;

  }

 プログラムの構造は、まずウインドウを作成しそのウインドウのイベント(シグナル)ハンドラを設定します。そして、後はGTKに制御を渡して制御が帰ってきたらプログラム終了、という感じです。シグナルに対するコールバック関数は、ちょうどDelphiのイベントハンドラのようにシグナル毎に関数を割り当てるみたいですね。今回作成したウインドウでは、閉じられた時にgtk_main()を終了させるgtk_main_quitを呼び出しています。gtk_main()は、ウイジェットのシグナル処理などを行うWindowsのメッセージループみたいなもの、というところでしょうか。

 なお、GTK+を使ったプログラムをコンパイルする時には、コンパイラのオプションでインクルードファイルやライブラリの設定をする必要があります。これらの情報はgtk-configというコマンドで取得できるので、この出力結果をコンパイラに渡してコンパイルしてみました。通常はMAKEファイルを作るみたいですが、今回のようなソース一本のプログラムでは特に必要ないですね。

gcc -o test test.c `gtk-config --cflags` `gtk-config --libs`

 上の例では、test.cというファイル名で作成したプログラムソースをコンパイルしてtestというプログラムを出力しています。このプログラムを./testとして実行すると、ウインドウが出てきますので確認してみてください。

戻る