# MGL- チュートリアル

## 初めてのMGL

・プロジェクトを「Win32 Application（※VC++6.0の場合。.netでも同じ名前だかは不明）」
にて作成します。プリコンパイル済みヘッダ等イチイチ作るのはめんどいので
「単純な Win32 アプリケーション」で作成する事にしましょう。

・mgl_header ディレクトリをコピーしてきます。
・Includeパスを切らないといけないので切ってください。（やり方は自分で調べて！）

・stdafx.h 内「// TODO: プログラムで必要なヘッダー参照を追加してください。」
の前辺りに「#include "mglafx.h"」と「#include "mglheads.h"」を記述します。

・mgllib.lib を、今作成したプロジェクトのディレクトリにコピーします。
・このlibファイルをリンクするように設定します。
（親切な解説！＠VC++6.0編：
メニューの「プロジェクト」→「設定」→「リンク」の
「ｵﾌﾞｼﾞｪｸﾄ/ﾗｲﾌﾞﾗﾘ ﾓｼﾞｭｰﾙ」に「mgllib.lib」を追加する。
DebugビルドとReleaseビルドの両方にて設定しておくのを忘れずに！）

・実行モジュールの作成されるディレクトリ（デフォルトであれば「Debug」の筈）
に「mgllib.dll」をコピーしておきます。（Releaseビルドの際には、勿論「Release」
ディレクトリ内にもコピーしておく必要性アリ。）

一応これで、ひとまずセッティングは完了です。
後は好きにゴリゴリ作っていってクダサイ。
とりあえず動かしてみたいと言う人は
「初めてのMGL＠とりあえず動かす編」を読み進めてみると良いでしょう。

## 初めてのMGL＠とりあえず動かす編

「初めてのMGL」からの続きです。
「初めてのMGL」を読んでない人はちゃんとそっちから読んでないと駄目ですよっ！

□　□　□

メインのcppが出来ている筈なので、その WinMain() 関数の中に以下を記述します。

    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    {
    	CMglEzGameFrame frame;
    	frame.StartWindow( 640, 480, (LPTHREAD_START_ROUTINE)MainThread, "MGL Sample Program" );
    	return 0;
    }

「MainThread」はこれから作ろうとしているコールバック関数です。
CMglEzGameFrame::StartWindow() はウィンドウを作成した後、
別スレッドとしてこのコールバック関数を呼び出します。
（厳密にはその前に前処理等が含まれたりしますが…）

（※ちなみにインテリセンス（※パラメータヒント等の事）がちゃんと機能してくれないと思いますので
「インテリセンスが機能しない...?」の方を参考にしてみてください。）

    //	プロトタイプ宣言
    BOOL MainThread( CMglEzGameFrame *pFrame );

    //	関数本体
    BOOL MainThread( CMglEzGameFrame *pFrame )
    {
    	for(int i=0; i<=255; i+=2)
    	{
    		pFrame->grp.Clear(D3DCOLOR_MONO(i));

    		//	ウェイト処理と終了チェック
    		if ( pFrame->DoFpsWait() != TRUE )
    			return TRUE;
    	}

    	pFrame->MsgBox( "終わり。", "おわりだよー" );
    	return TRUE;
    }

コールバックの引数として、先の CMglEzGameFrame のインスタンス（frame）
のポインタが渡って来るのでこれを使用して色々処理をします。
具体的にどうなるかは…実行すれば一目瞭然かと思います。（笑

DoFpsWait() は指定されたFPS（デフォルト60）に合わせて
ウェイトするメソッドです。兼、他にも色々な処理（画面への反映とか）
を行うのでフレーム処理毎に呼ばないと駄目です。

また復帰値として、ウインドウがちゃんと生存しているか否かが返って来るので、
FALSE が帰ってきた場合は処理を抜けるように記述します。
（これをやらないと×ボタン押された時等にちゃんと終了しない…）

大体感覚は掴めて頂けましたかね…？
次回はもうちょっと切り込んだ話をしたいと思います。

## インテリセンスが機能しない...?

どうも（少なくともVisual C++ 6.0では）ヘッダファイルがプロジェクトに
追加されていないとインテリセンスが機能しないようです。
（何で標準の関数とかは追加されてなくても出てくるんですかね…？良く分かりません。。。）

該当のヘッダファイルをincludeした状態でビルドすると、ワークスペースの「外部依存関係」
の所にそのヘッダファイルが出てきます。これを適当に、別のフォルダでも作ってあげて
そこに入れてあげるとインテリセンスが機能するようになります。（暫定対処…？）

＞戻る