3)DirectXでGUIが欲しくなったのですが、自前で全部作るのはとにかく大変。「何とかして〜」と泣きついたら、「wxWidgetsで何とかなるんでねけ?」と教えてもらいました。そこでwxWidgetsをお勉強です。実際試してみると、なるほど、はめが沢山あります(笑)。はまらないように備忘録を付けておきます。Library)Downloadタブを辿って最新版をDLしてきます。wxWidgetsはマルチプラットフォーム対応です。今回はWindows版の開発となりますので「wxMSW」をDLします。DLしたインストーラを起動してライブラリをインストールします。デフォルトではC:/wxWidgets-2.8.11(フォルダはバージョンによって変わります)に各種ファイルが置かれます。この辺りはお決まりなのでサクっと流しますね。最初の一歩はここからで、ここからです。使い方はさっぱりわかりません。Google先生に訪ねてみると、なるほど、最初にVC用のライブラリを作る必要があるようです。build\mswにあるwx/wx.dswワークスペースを起動します。これはVC6++用なので、VS2005やVS2008などで開くと変換を求められます。これは変換して下さい。2008で使えるライブラリが出来るようです。2008で作成したライブラリを使ってVS2005で開発すると、デバッグ版で「デバッグ情報が壊れています」というエラーが出てしまい、二進も三進もいかなくなってしまいます。どのバージョンのVSで開発するかを考えてライブラリを作成するようにして下さい。ライブラリの作成自体は極めて簡単で、変換後にそのままビルドするだけです(Debug/Release共に)。これで全プロジェクトからライブラリが作られlib/vc_libフォルダに格納されます。このフォルダを後々リンクフォルダとして指定することになります。簡単なプログラムを組んで環境テストです。私はVS2008EEでライブラリを作ったので、テストも同じ環境で作成します。Tutorialによると、新規のプロジェクトを立ち上げて「wx/wx.h」をインクルードするようです。ファイルを開けません。directory」。ん〜、Tutorialには書いてないぜよ。ん〜Google先生。...なるほど、先程できたlib/vc_lib/mswdをインクルード参照フォルダとして追加しないといけないようです。プロジェクトのプロパティのC/C++にある追加のインクルードディレクトリに追加します。さ、再度コンパイル...よし、通りました(^-^)。ちなみに、このエラーの解決方法はwxWidgetsのホームページのFAQにありました。みんなハマるよね、うん。WorldのTutorialを続けます。wxApp.(すべてのアプリケーションではwxAppの派生クラスを作って下さい)」なるほど。window.(wxApp::OnInitメソッドをオーバーライドすると初期化が出来るよ。メインウィンドウの作成とか。OnInit();};次です。メインウィンドウはxwFrameというクラスの派生クラスで作成するようです。size);};コンストラクタの引数にはメインウィンドウの名前、位置、ウィンドウサイズを与えます。この辺りはTutorialに従っています。メインウィンドウやその他のクラスはマウスの動きやクリックなど何らかの「イベント」を受け取ることができるようです。それを受け取るには「wxCommandEvent&を引数とするメソッド」を定義するようです。Tutorialでは例として終了させるQuitメソッド、そしてヘルプを表示するAboutメソッドを作成しています。これらのメソッドはプログラマが自由に作れるようです。event);DECLARE_EVENT_TABLE()};イベントを受け取るためには「DECLARE_EVENT_TABLE()」というマクロを入れる必要があります。イベントと上記のOnQuitメソッドのようなイベントハンドラを結びつける必要があります。そのための専用マクロがあります。MyFrame::OnAbout)END_EVENT_TABLE()BEGIN_EVENT_TABLE〜END_EVENT_TABLEで挟む方式です。BEGIN_EVENT_TABLEの引数は自分のクラスと親クラスです。EVT_MENUはメニュー項目が送出するイベントの事かなと思います。第1引数にイベントID、第2引数にそのハンドラを指定します。イベントIDと上のマクロは必ずmainが定義されている.cppに置かないといけないようです。そのmainですが、wxWidgetsではこれもマクロ定義となります:IMPLEMENT_APP(MyApp)このマクロ一つで様々な実装を行ってくれるのですから便利ですね。ここでコンパイルするとコードは通るのですが、リンカーエラーが山ほど出ます。そりゃそうです、先に定義したMyAppやMyFrameを実装していないのですから。MyApp::OnInitメソッドでは各種初期化を行います。true;}MyFrameオブジェクトを作り、メインウィンドウを表示状態にしてからアプリケーションに登録しているという状態ですね。Text."));}メニューの作り方はなるほどなというシンプルさです。wxMenuオブジェクトを作ってそこにイベントIDとメニュー項目の表示名をAppendメソッドで登録しています。メニューバーオブジェクト(wxMenuBar)を作成してメニューを登録しています。この辺りも一度やり方を学んでしまえば問題ないですね。続いてMyFrame::OnQuitメソッドの実装です。{Close(true);}まず引数がポイントですね。ハンドラが呼ばれる時にイベントオブジェクトも渡されるのですが、それを実装内で使用しない時は「WXUNUSEDマクロ」を使うルールのようです。実装内ではCloseメソッドをtrueにして終了状態へ移行させます。);}ヘルプ表示はwxWidgetsが用意しているメッセージボックスを使います。引数の意味はおおよそ検討が付きますね。これで実装が終わりました。さぁ、ビルド!...うぉ!スゴイ量のリンカエラー!...あ、そりゃそうです。冒頭で折角作成したライブラリへ何もリンクしていませんものね(^-^;。言え実装はこれで全部なので、全コードをこちらに公開します。ライブラリへのリンクリンクすべきライブラリは冒頭で作りました。何をリンクするかなのですが...えらい沢山あります。odbc32.libDebug版はRelease版のライブラリ名に「d」がついています。上のライブラリの種類については今の所よくわかりません。いうもんだと思っておきましょう。このライブラリはlib/vc_libフォルダ内にありますので、プロジェクトのプロパティのリンカ設定で追加フォルダして、上のライブラリをちまちまと追加していきましょう。