FOX GUI キット 〜事始め〜

 FOX GUI キットについてダラダラと書いていきます。
FOX GUI キットとはプラットフォーム非依存な GUI ライブラリです。
感じとしては MFC が他の Linux や Mac 等のプラットフォームで使用出来る感じです。
ソース互換(ソースの変更なし)でそのままコンパイル・リンクが出来るそうです。
ちなみに Windows 以外の環境が無いので他の環境では試していません。
 ではまず初めに簡単なウィンドウを表示してみます。
FOX ライブラリを使用したアプリケーションは以下の様に初期化を行います。
  • アプリケーションオブジェクトの初期化(FXApp::init)
  • メインウィンドウオブジェクトの作成(new FXMainWindow)
  • メインウィンドウの構築(FXMainWindow::create)
  • メインウィンドウの表示(FXMainWindow::show)
  • アプリケーションの起動(FXApp::run)
以上が基本的な流れです。
 FOX では大体が親子関係を持ち親が子を解放するようになっています
上記の FXMainWindow もコンストラクタの第一引数に FXApp オブジェクトを指定する必要があります。これはアプリケーション終了時にメインウィンドウも同時に破棄を行ってくれます。
また、ウィンドウに配置される Widget も配置先の親に子の所有権があります。
とりあえずソースを記述しておきます。
// FOX ライブラリを使用する場合はプロジェクトは Win32 アプリケーションで作成し
// アプリケーションのエントリポイントを "mainCRTStartup" に設定する必要がある

// ライブラリのリンク指定に #pragma を使用しているがこれは VC のみ有効です

#include <fx.h>

// FOX ライブラリのリンク指定
#if defined (_DEBUG)
#pragma comment (lib, "FOXD-1.1.lib")
#else  // _DEBUG
#pragma comment (lib, "FOX-1.1.lib")
#endif // _DEBUG

// FOX ライブラリではこの "comctl32.lib" を使用するらすぃ
#pragma comment (lib, "comctl32.lib")

int main (int argc, char * argv [])
{
  // FOX ライブラリを使用したプログラムには必ずこのオブジェクトが一つ必要です
  FXApp application ("basic", "toon");

  // コマンドラインを解析しアプリケーションを初期化します
  application.init (argc, argv);

  // メインウィンドウを生成しアプリケーションに関連付けします
  // ここで作成されたメインウィンドウは FXApp によって自動的に delete されます
  // ただし今回は FXMainWindow::show () を呼び出さないとウィンドウが表示されないので
  // ポインタを保持して後から FXMainWindow::show () を呼び出しています
  FXMainWindow * main_window = new FXMainWindow (&application, "basic", NULL, NULL, DECOR_ALL, -1, -1, 640, 480);

  // アプリケーションオブジェクトを作成しメッセージ処理の開始準備を行います
  application.create ();

  // メインウィンドウを表示します
  main_window->show (PLACEMENT_SCREEN);

  // メッセージ処理の開始
  return application.run ();
} // main