//////////////////////////////////////////
// MENACE.h
// Copyright (c) 12/11/2021 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//リソースIDのヘッダー
#include	"ResMENACE.h"
//CMENACEのヘッダー
#include	"CMENACE.h"

/////////////////////////////////////////////////////////////////////
//CMyWndクラスをCDLGクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CMyWnd : public CDLG
{
public:	//以下はコールバック関数マクロと関連している
	//２重起動防止用のMutex用ID名称
	CMyWnd(char* UName) : CDLG(UName) {}
	//メンバー変数
	CMENACE m_Menace;		//MENACE本体
	int m_You;				//Player（先手−1、後手−2、機械対戦−3）
	int m_Result;			//ゲーム結果（未了0、先手勝利1、後手勝利2、引き分け3）
	int m_Times;			//各対戦の手数カウンター
	int m_Games;			//連続機械対戦のゲーム数
	int m_1st;				//先手の勝数
	int m_2nd;				//後手の勝数
	int m_Draw;				//引き分け数
	CSTR m_FileName;		//データファイル名
	//メニュー項目、ダイアログコントロール関連
	bool On0();
	bool On1();
	bool On2();
	bool On3();
	bool On4();
	bool On5();
	bool On6();
	bool On7();
	bool On8();
	bool OnOpen();
	bool OnSave();
	bool OnSaveas();
	bool OnExit();
	bool OnFm();
	bool OnSm();
	bool OnAuto();
	bool OnAbout();
	bool OnVersion();
	//ウィンドウメッセージ関連
	bool OnInit(WPARAM, LPARAM);
	bool OnNotify(WPARAM, LPARAM);
	bool OnClose(WPARAM, LPARAM);
	bool OnDestroy(WPARAM, LPARAM);
	//ユーザー定義関数
	void Init();					//ゲーム初期化関数
	int Turn(int);					//ゲーム処理関数
	void WhenOver();				//ゲーム終了関数
	void ChangeMenuStatus(bool);	//メニュー関係有効無効化処理
};

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

BEGIN_MODELESSDLGMSG(ModelessProc, MENACE)	//コールバック関数名は主ウィンドウの場合ModelessProcにしている
	//メニュー項目、ダイアログコントロール関連
	ON_COMMAND(MENACE, IDC_0, On0())
	ON_COMMAND(MENACE, IDC_1, On1())
	ON_COMMAND(MENACE, IDC_2, On2())
	ON_COMMAND(MENACE, IDC_3, On3())
	ON_COMMAND(MENACE, IDC_4, On4())
	ON_COMMAND(MENACE, IDC_5, On5())
	ON_COMMAND(MENACE, IDC_6, On6())
	ON_COMMAND(MENACE, IDC_7, On7())
	ON_COMMAND(MENACE, IDC_8, On8())
	ON_COMMAND(MENACE, IDM_OPEN, OnOpen())
	ON_COMMAND(MENACE, IDM_SAVE, OnSave())
	ON_COMMAND(MENACE, IDM_SAVEAS, OnSaveas())
	ON_COMMAND(MENACE, IDM_EXIT, OnExit())
	ON_COMMAND(MENACE, IDM_FM, OnFm())
	ON_COMMAND(MENACE, IDM_SM, OnSm())
	ON_COMMAND(MENACE, IDM_AUTO, OnAuto())
	ON_COMMAND(MENACE, IDM_ABOUT, OnAbout())
	ON_COMMAND(MENACE, IDM_VERSION, OnVersion())
	//ウィンドウメッセージ関連
	//自動的にダイアログ作成時にOnInit()、終了時にOnClose()を呼びます
	ON_DESTROY(MENACE)
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからINPUTDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class INPUTDLG : public CDLG {
public:
	//コントロール関連
	bool OnInit(WPARAM, LPARAM);
	bool OnOk();
	bool OnCancel();
};

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

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

///////////////////////////////////////////
// CDLGクラスからINFODLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class INFODLG : public CDLG {
public:
	//コントロール関連
	bool OnInit(WPARAM, LPARAM);
	bool OnOk();
	bool OnCancel();
};

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

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

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

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

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

///////////////////
//ツールバーの作成
///////////////////
CTBAR TBar;

///////////////////////
//ステータスバーの作成
///////////////////////
CSBAR SBar;

////////////////////////
//コモンダイアログの作成
////////////////////////
CMNDLG cmndlg;

////////////////////////
//CARGインスタンスの作成
////////////////////////
CARG arg;

///////////////////////////////
//ボタン貼り付け用ビットマップ
///////////////////////////////
HBITMAP g_hNought;
HBITMAP g_hCross;
HBITMAP g_hVacant;
