Chapter 3. 基礎

Table of Contents

この章ではgtkmmコーディングにおける最も重要な側面をいくつか紹介します。ここでは単純で実際に動くコードによってそれを示します。しかし、これはちょっとした味見に過ぎません。より深い情報を知るには他の章も見る必要があります。

あなたが既に持っているC++の知識がgtkmmを使う手助けになるでしょう。これはその他のライブラリと同様です。特別な場合でない限り、gtkmmクラスはその他のC++クラスと同様に振舞うと考えてかまいません。また、あなたが持っているC++のテクニックをgtkmmクラスに対して使ってもかまいません。

単純な例

gtkmmについて紹介するにあたって、考えられるうちで最も単純なプログラムから始めましょう。このプログラムは空っぽの200×200ピクセルのウィンドウを生成します。

Source location: examples/others/base/base.cc

#include <gtkmm.h>

int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);

    Gtk::Window window;

    Gtk::Main::run(window);

    return 0;
}

これからそれぞれの行を説明していきましょう。

#include <gtkmm.h>

全てのgtkmmプログラムは特定のgtkmmヘッダをインクルードしなければいけません。gtkmm.hは全てのgtkmmキットをインクルードします。これは普段ならいいアイデアとは言えません。1メガバイトに近いヘッダファイルをインクルードしているからです。しかし、この単純なプログラムではかまわないでしょう。

次の行:

Gtk::Main kit(argc, argv);

Gtk::Mainオブジェクトを生成します。これは全てのgtkmmアプリケーションで必要です。このオブジェクトのコンストラクタはgtkmmを初期化し、コマンドラインから渡された引数、--displayなどをチェックします。それらは引数リストから渡され、そのうち認識できなかったものをアプリケーションがパースまたは無視できるようにします。これによって全てのgtkmmアプリケーションは一連の標準の引数を受けとることが保証されます。

次の二行のコードはウィンドウを生成し、表示しています:

  Gtk::Window window;

最後の行はウィンドウを表示し、gtkmmのメイン処理ループに入ります。これはウィンドウを閉じると終了します。

Gtk::Main::run(window);

このソースコードをsimple.ccに入力した後、gccを次のように使ってコンパイルできます:

g++ simple.cc -o simple `pkg-config gtkmm-2.4 --cflags --libs`

注目してほしいのは、pkg-configをバッククォートで呼び出しているところです。バッククォートはシェルに内部のコマンドを実行させ、その出力をコマンドラインの部分として使うという効果があります。

ところでこの単純な例では上のコンパイルコマンドを紹介しましたが、実際にはautomakeautoconfツールを使用するべきです。使い方はGary V. Vaughan他著「GNU Autoconf, Automake, libtool」で説明されています。私たちの文書で使っているコード例は、gtkmmパッケージに適切なビルドファイルと共に含まれています。ですから、これから先はビルドコマンドは出しません。ただ適切なディレクトリを見つけて、makeと入力してください。

コンパイルを簡単にするために、私たちはpkg-configを使いましたが、これは全ての(正しくインストールされた)gtkmm環境に存在しています。このプログラムは、gtkmmを使うプログラムをコンパイルするためにコンパイラにどんなスイッチを渡せばいいか"知って"います。pkg-config--cflagsオプションを渡すとインクルードヘッダのあるディレクトリのリストを出力します。--libsオプションではコンパイラがリンクするライブラリのリストとそれらが存在するディレクトリを出力します。シェル上で実行してみて、システムでどのような結果が出るか試してみてください。