C++ で GUI アプリケーションを作ろうとすると、「どの GUI ツールキットを使うべきか」で迷うことがよくあります。Win32 API や MFC はどうしても煩雑で扱いづらく、.NET Framework を使うと C++ を書いている感覚が薄れてしまう…。そんな中で見つけたのが Gtkmm です。
GTK+ は GIMP のために開発された GUI ツールキットで、現在では GNOME でも採用されるほど成熟しています。ただし GTK+ は C 言語向けの API のため、C++ で扱うには少し不便です。そこで登場するのが GTK+ を C++ 向けにラッピングした Gtkmm です。
この記事では、Visual C++ 2010 Express と Gtkmm 2.22 を使って、最小限の GUI アプリを動かすまでの手順を紹介します。
Gtkmm のダウンロードとインストール
Gtkmm for Windows(MSVC 用バイナリ)は、公式サイトからインストーラを取得するだけで利用できます。
Visual C++ 2010 Express でプロジェクトを作成
- Win32 コンソール アプリケーション を選択
- 「空のプロジェクト」を選択して作成
Gtkmm はコンソールアプリとして開始し、後から GUI を表示するスタイルで問題ありません。


プロパティシートの追加(Gtkmm の組み込み)

Visual C++ の プロパティ マネージャ を開き、 Debug | Win32 → 右クリック → 既存のプロパティ シートの追加
gtkmmMSVCgtkmm-vc100-d-2_4.props を選択します。Release 構成では gtkmm-vc100-2_4.props を追加します。 これにより、インクルードパス・ライブラリパス・リンク設定が自動で適用されます。
最小の Gtkmm コードを書く
#include <gtkmm.h>
class MainWin : public Gtk::Window {
public:
MainWin();
private:
Gtk::Button m_button;
Gtk::HBox m_hbox;
};
MainWin::MainWin()
: m_button("Button")
{
m_hbox.pack_start(m_button);
add(m_hbox);
show_all_children();
}
int main(int argc, char* argv[]) {
Gtk::Main kit(argc, argv);
MainWin mainwin;
Gtk::Main::run(mainwin);
return 0;
}

Gtkmm はウィジェットの配置が直感的で、最小コードでも GUI が動きます。
気になる点
- Pango のフォント警告:「Pango-WARNING **: couldn’t load font “メイリオ Not-Rotated 9”」と警告が出ますが、Windows で GTK+ が日本語フォントを正しく認識できない場合に発生します。 フォントキャッシュの再生成や、
pango.aliasesの調整で改善することがあります。 - 日本語表示の文字化け:Gtkmm は UTF-8 を前提としているため、ソースコードの文字コードを UTF-8 にするか、外部ファイル(XML など)で文字列を管理する必要があります。
- ifstream と相性が悪い?:ifstreamに日本語のパスを入れられないです。Windows のマルチバイト API では日本語パスが扱えないため、
g_file_get_contents()(Glib)やstd::ifstreamのワイド文字版を使う必要があります。
まとめ
Gtkmm は C++ で GUI を作りたい人にとって、 シンプルで扱いやすいモダンな選択肢です。
cox58 へ返信するコメントをキャンセル