きたけんブログ

旅と趣味と

Gtkmm 導入

C++でプログラミングをやっているときに一番困るのが、どのGUIツールを使うかです。どうもWin32 APIやらMFCなんかは肌になじまない(というか煩雑すぎませんか!?)ですし、.net Frameworkを使い始めるとどうもC++を触っている気がしなくなってくるし・・・。

ということで最近見つけたのが、GtkmmというGUIツールキット。

すっかり最近はお馴染みになったGIMPのために開発されたGUIツールキットにGTK+というものがあります。これがあんまりにも優秀だったのでGNOMEにも採用されているというほど。で、このGTK+にはC言語が使われているのですが、わたくしC++から勉強したのでどうもC言語には不慣れでして、探してみたらGTK+をC++にラッピングしたGtkmmというものを見つけたというわけです。

では実際に触ってみることにします。

今回はVisual C++ 2010 ExpressとGtkmm 2.22を利用しています。

★ まずはダウンロード

一番上のDownloadからダウンロード。

★ インストール

ダウンロードした実行ファイルを実行すれば簡単にインストール完了。

★ Visual C++への組み込み

まずはソリューションの作成から。

image1.png

「Win32 コンソール アプリケーション」を選択し、適当に名前をつけます。

image2.png

先に進んで、「空のプロジェクト」を選択します。

image3.png

そしてまず「プロパティーマネージャ」を開いて、「Debug | Win32」を右クリックし、「既存のプロパティ シートの追加」を選択します。

でデフォルト設定のままインストールしている場合、「C:gtkmmMSVCgtkmm-vc100-d-2_4.props」を選択します。「Release | Win32」も同様に「gtkmm-vc100-2_4.props」を選択します。VCのバージョンによって多少選択するファイルは変わってきます。

これで前準備は完了。

★ コード入力

あとはコードを入力するだけ。

#include <gtkmm.h> 
class MainWin : public Gtk::Window
{
  Gtk::Button m_button;
  Gtk::HBox m_hbox;
public:
  MainWin();
};
MainWin::MainWin()
: m_button("Button")
{
  this->m_hbox.pack_start(this->m_button);
  add(this->m_hbox);
  show_all_children();
}
int main(int argc, char *argv[])
{
  Gtk::Main kit(argc, argv);
  MainWin mainwin;
  Gtk::Main::run(mainwin);
  return 0;
}

で、ビルドをかけます。警告がいろいろ出ますが、無視w

image4.png

ボタンが表示されるだけですが、この行数でこれだけできるのはうれしい限りです。このほかメニューバーやツールバー、各種コントロールの配置も簡単にできます。

いくつか気になる点があるのも事実ですが・・・

  • コンソール画面に「(Hoge.exe:4368): Pango-WARNING **: couldn’t load font “メイリオ Not-Rotated 9”, falling back to “Sans Not-Rotated 9”, expect ugly output.」と表示されるorz
  • 日本語表示が文字化けして出来ない(直接Unicodeをたたき込めば大丈夫ですが・・・あまりに不便。日本語周りをXMLか何かにほりこんで、それを流し込むのが楽かな)
  • 一部C++の標準ライブラリと相性が悪いみたいです。わたしはifstreamと併用できませんでした。これも言語関係かなぁ。(追記:VC 2008なら動きました!) (2010/12/11追記)すいません、これって諸悪の根源はVCみたいです。ifstreamに日本語のパスを入れられないらしいです。だからGlibにあるg_file_get_contents関数を利用した方が早そうですね。

そんなこんなですが、これから勉強していく所存です。。。

あと参考文献。

■ gtkmm 入門

■ gtkmmプログラミング

インストールされたもののなかにDemoが入ってます。これも結構参考になりますよ。

https://kitaken.oops.jp/wp-content/uploads/2011/03/shape2.svg