//////////////////////////////////////////
// Cell.h
// Copyright (c) 08/04/2025 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//リソースIDのヘッダー
#include	"ResCell.h"

//表示用定数
#define		TBarH		32		//ツールバーの高さ
#define		SBarH		21		//ステータスバーの高さ

//タイマ−関連
#define		ID_TIMER	1000	//TimerのID
#define		TM_INTERVAL	100		//最小値はUSER_TIMER_MINIMUM(0x0000000A))

//Cellゲーム関係のヘッダー
#include	"Ccell_world.h"

////////////////////////////////////////////////////////////////////////////
//CMyWndクラスをCDLGクラスから派生させ、メッセージ用の関数を宣言する
//本プログラムでは、ダイアログ枠を採用し、サイズの変更を禁止している。
//ダイアログのクライアントエリアは、m_worldがMAX_WIDTH(80) x MAX_HEIGHT(40)
//の桝目であることから1280 x 693（640 + TBarH32 + SBarH21）となっている。
////////////////////////////////////////////////////////////////////////////
class CMyWnd : public CDLG
{
private:
	CTBAR m_TBar;				//ツールバー
	CSBAR m_SBar;				//ステータスバー
	CANVAS m_cvs;				//仮想ウィンドウ
	Cworld m_World;				//cellの生きる世界
	CSTR m_FileName;			//背景となる地形図データファイルパス名
	bool m_Timer = FALSE;		//WM_TIMERで処理するVersion用
	//画像保存用CBMP変数
	CBMP m_Terrain_Bmp[4];		//順に「野原:0」、「山:1」、「河川:2」、「食物：3」
	CBMP m_Cell_Bmp[MAX_TRIBE];	//Cellはピンク、ブルー、グリーン、モノ（死亡）の4色で表す
	//前の世界地形図（m_Worldのm_mapの差異チェック用）
	char m_PrevMap[MAX_WIDTH * MAX_HEIGHT];

public:	//以下はコールバック関数マクロと関連している
	//２重起動防止用のMutex用ID名称
	CMyWnd(char* UName) : CDLG(UName) {}
	//メニュー項目、ダイアログコントロール関連
	bool OnOpen();
	bool OnExit();
	bool OnStart();
	bool OnCells();
	bool OnAbort();
	bool OnVersion();
	//ウィンドウメッセージ関連
	bool OnInit(WPARAM, LPARAM);
	bool OnTimer(WPARAM, LPARAM);	//WM_TIMERで処理するVersion用
	bool OnNotify(WPARAM, LPARAM);
	bool OnPaint(WPARAM, LPARAM);
	bool OnClose(WPARAM, LPARAM);
	bool OnDestroy(WPARAM, LPARAM);
	//ユーザー定義関数
	void ShowMap();					//m_mapを表示する
	bool PutBMP(HBITMAP, int, int);	//BCCSkeltonコンパチ関数
	void ChangeMenuStatus(bool);	//メニュー、ツールバー状態の変更
};

////////////////////////////////////////////////////////////////////////
//派生させたCMyWndクラスのインスタンスとコールバック関数(マクロ）の作成
//主ウィンドウはダイアログと違い、コールバック関数は一つしか作れない
////////////////////////////////////////////////////////////////////////
CMyWnd Cell("Cell");	//ウィンドウクラスインスタンスの生成

BEGIN_MODELESSDLGMSG(ModelessProc, Cell)	//コールバック関数名は主ウィンドウの場合ModelessProcにしている
	//メニュー項目、ダイアログコントロール関連
	ON_COMMAND(Cell, IDM_OPEN, OnOpen())
	ON_COMMAND(Cell, IDM_EXIT, OnExit())
	ON_COMMAND(Cell, IDM_START, OnStart())
	ON_COMMAND(Cell, IDM_CELLS, OnCells())
	ON_COMMAND(Cell, IDM_ABORT, OnAbort())
	ON_COMMAND(Cell, IDM_VERSION, OnVersion())
	//ウィンドウメッセージ関連
	//自動的にダイアログ作成時にOnInit()、終了時にOnClose()を呼びます
	ON_TIMER(Cell)					//WM_TIMERで処理するVersion用
	ON_NOTIFY(Cell)
	ON_PAINT(Cell)
	ON_DESTROY(Cell)
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからINPUTDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class INPUTDLG : public CDLG {
private:
	int m_Sel;			//戻り値用
	bool m_IntMarg;		//異種族間婚姻許可
public:
	int GetSel() {return m_Sel;}
	bool IfIntMargOK() {return m_IntMarg;}
	bool OnInit(WPARAM, LPARAM);
	bool OnIdok();
	bool OnCancel();
};

///////////////////////////////////////////
// CDLGクラスからSHOWTEXTDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class SHOWTEXTDLG : public CDLG {
private:
	CCTRL m_Edit;
public:
	char* m_Output;
	bool OnInit(WPARAM, LPARAM);
	bool OnSize(WPARAM, LPARAM);
	bool OnIdok();
	bool OnCancel();
};

///////////////////////////////////////////
// CDLGクラスからVERSIONDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class VERSIONDLG : public CDLG {
public:
	bool OnIdok();
	bool OnCancel();
};

////////////////////////////////////////////////////////////////////////////
// INPUTDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
INPUTDLG inputdlg;

BEGIN_MODALDLGMSG(inputdlgProc, inputdlg)		//第1引数がコールバック関数の名前
	ON_COMMAND(inputdlg, IDOK, OnIdok())
	ON_COMMAND(inputdlg, IDCANCEL, OnCancel())
END_DLGMSG

///////////////////////////////////////////////////////////////////////////////
// SHOWTEXTDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
///////////////////////////////////////////////////////////////////////////////
SHOWTEXTDLG showtextdlg;

BEGIN_MODALDLGMSG(showtextdlgProc, showtextdlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(showtextdlg, IDOK, OnIdok())
	ON_COMMAND(showtextdlg, IDCANCEL, OnCancel())
	ON_SIZE(showtextdlg)
END_DLGMSG

////////////////////////////////////////////////////////////////////////////
// VERSIONDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
VERSIONDLG versiondlg;

BEGIN_MODALDLGMSG(versiondlgProc, versiondlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(versiondlg, IDOK, OnIdok())
	ON_COMMAND(versiondlg, IDCANCEL, OnCancel())
END_DLGMSG
