//////////////////////////////////////////
// BCCMaker.h
// Copyright (c) 11/09/2020 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//リソースIDのヘッダー
#include	"ResBCCMaker.h"
//CHISTORYのヘッダー
//#include	"CHISTORY.h"

///////////////////////////////////////////
// CDLGクラスからMAKEDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class MAKEDLG : public CDLG {
public:
	//２重起動防止用のMutex用ID名称
	MAKEDLG(char* UName) : CDLG(UName) {}
	bool OnAdd();
	bool OnDel();
	bool OnDetail();
	bool OnProject(WPARAM, LPARAM);
	bool OnBCCOption(WPARAM, LPARAM);
	bool OnBRCOption(WPARAM, LPARAM);
	bool OnASMOption(WPARAM, LPARAM);
	bool OnNew();
	bool OnOpen();
	bool OnSave();
	bool OnSaveas();
	bool OnExit();
	bool OnMake();
	bool OnMakeedit();
	bool OnRun();
	bool OnSetting();
	bool OnHelp();
	bool OnOption();
	bool OnVersion();
	//ウィンドウメッセージ関連
	bool OnInit(WPARAM, LPARAM);
	bool OnNotify(WPARAM, LPARAM);
	bool OnDefault(WPARAM);
	bool OnSize(WPARAM, LPARAM);
	bool OnClose(WPARAM, LPARAM);
	bool OnDestroy(WPARAM, LPARAM);
};

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

BEGIN_MODALDLGMSG(makedlgProc, makedlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(makedlg, IDC_ADD, OnAdd())
	ON_COMMAND(makedlg, IDC_DEL, OnDel())
	ON_COMMAND(makedlg, IDC_DETAIL, OnDetail())
	ON_COMMAND(makedlg, IDC_PROJECT, OnProject(wParam, lParam))
	ON_COMMAND(makedlg, IDC_BCC32OPTION, OnBCCOption(wParam, lParam))
	ON_COMMAND(makedlg, IDC_BRC32OPTION, OnBRCOption(wParam, lParam))
	ON_COMMAND(makedlg, IDC_ASMOPTION, OnASMOption(wParam, lParam))
	ON_COMMAND(makedlg, IDM_NEW, OnNew())
	ON_COMMAND(makedlg, IDM_OPEN, OnOpen())
	ON_COMMAND(makedlg, IDM_SAVE, OnSave())
	ON_COMMAND(makedlg, IDM_SAVEAS, OnSaveas())
	ON_COMMAND(makedlg, IDM_EXIT, OnExit())
	ON_COMMAND(makedlg, IDM_MAKE, OnMake())
	ON_COMMAND(makedlg, IDM_MAKEEDIT, OnMakeedit())
	ON_COMMAND(makedlg, IDM_RUN, OnRun())
	ON_COMMAND(makedlg, IDM_SETTING, OnSetting())
	ON_COMMAND(makedlg, IDM_HELP, OnHelp())
	ON_COMMAND(makedlg, IDM_OPTION, OnOption())
	ON_COMMAND(makedlg, IDM_VERSION, OnVersion())
	//ウィンドウメッセージ関連
	//自動的にダイアログ作成時にOnInit()、終了時にOnClose()を呼びます
	ON_(makedlg, WM_COMMAND, OnDefault(wParam))	//特殊なメッセージ処理
	ON_SIZE(makedlg)
END_DLGMSG

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

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

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

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

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

BEGIN_MODALDLGMSG(detaildlgProc, detaildlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(detaildlg, IDOK, OnIdok())
	ON_COMMAND(detaildlg, IDC_INCLBTN, OnInclbtn())
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからSETUPDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class SETUPDLG : public CDLG {
public:
	bool OnInit(WPARAM, LPARAM);
	bool OnIdok();
	bool OnMakebtn();
	bool OnBccbtn();
	bool OnBrcbtn();
	bool OnAsmbtn();
	bool OnEditbtn();
};

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

BEGIN_MODALDLGMSG(setupdlgProc, setupdlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(setupdlg, IDOK, OnIdok())
	ON_COMMAND(setupdlg, IDC_MAKEBTN, OnMakebtn())
	ON_COMMAND(setupdlg, IDC_BCCBTN, OnBccbtn())
	ON_COMMAND(setupdlg, IDC_BRCBTN, OnBrcbtn())
	ON_COMMAND(setupdlg, IDC_ASMBTN, OnAsmbtn())
	ON_COMMAND(setupdlg, IDC_EDITBTN, OnEditbtn())
END_DLGMSG

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

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

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

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

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

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

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

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

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

///////////////////////////////
//☆コマンドラインクラスの作成
///////////////////////////////
CARG Arg;

////////////////////////////////
//☆iniファイル作成クラスの作成
////////////////////////////////
CINI Ini;

//////////////////////////
//☆CTREEVIEWクラスの作成
//////////////////////////
CTREEVIEW tv(16, 16, 7, ILC_COLOR4 | ILC_MASK, 0);	//ビットマップサイズと個数（2021年11月21日修正）

/////////////////////////
//☆CCMDEDITクラスの作成
/////////////////////////
CCMDEDIT ce(32);			//☆エディットコントロール用に32Kバイトのバッファーを確保

//履歴（CHISTORY）用
CHISTORY history;			//CHISTORY変数
