//////////////////////////////////////////
// BCCMakerProc.h
// Copyright (c) 11/09/2020 by BCCSkelton
//////////////////////////////////////////
///////////////////////////////
//ユーザーダイアログの関数定義
//MAKEDLG
///////////////////////////////
bool MAKEDLG::OnInit(WPARAM wParam, LPARAM lParam) {

	//コモンコントロールの初期化
	InitCommonControls();

	//ツールバー登録−SetHandle(hWnd))
	TBar.SetHandle(GetDlgItem(m_hWnd, IDC_TOOLBAR));
	//ツールバーボタン用カスタムビットマップ追加
	TBar.AddBmp(m_hInstance, MAKEINTRESOURCE(IDI_TOOLBAR), 8);
	//ツールバーボタン追加
	TBBUTTON tbb[12];
	ZeroMemory(tbb, sizeof(tbb));
	tbb[0].iBitmap = TBar.m_id + 0;
	tbb[0].fsState = TBSTATE_ENABLED;
	tbb[0].fsStyle = TBSTYLE_BUTTON;
	tbb[0].idCommand = IDM_NEW;
	tbb[1].iBitmap = TBar.m_id + 1;
	tbb[1].fsState = TBSTATE_ENABLED;
	tbb[1].fsStyle = TBSTYLE_BUTTON;
	tbb[1].idCommand = IDM_OPEN;
	tbb[2].iBitmap = TBar.m_id + 2;
	tbb[2].fsState = TBSTATE_ENABLED;
	tbb[2].fsStyle = TBSTYLE_BUTTON;
	tbb[2].idCommand = IDM_SAVE;
	tbb[3].fsStyle = TBSTYLE_SEP;	//セパレーター
	tbb[4].iBitmap = TBar.m_id + 3;
	tbb[4].fsState = TBSTATE_ENABLED;
	tbb[4].fsStyle = TBSTYLE_BUTTON;
	tbb[4].idCommand = IDM_EXIT;
	tbb[5].fsStyle = TBSTYLE_SEP;	//セパレーター
	tbb[6].iBitmap = TBar.m_id + 4;
	tbb[6].fsState = TBSTATE_ENABLED;
	tbb[6].fsStyle = TBSTYLE_BUTTON;
	tbb[6].idCommand = IDM_MAKE;
	tbb[7].fsStyle = TBSTYLE_SEP;	//セパレーター
	tbb[8].iBitmap = TBar.m_id + 5;
	tbb[8].fsState = TBSTATE_ENABLED;
	tbb[8].fsStyle = TBSTYLE_BUTTON;
	tbb[8].idCommand = IDM_SETTING;
	tbb[9].fsStyle = TBSTYLE_SEP;	//セパレーター
	tbb[10].iBitmap = TBar.m_id + 6;
	tbb[10].fsState = TBSTATE_ENABLED;
	tbb[10].fsStyle = TBSTYLE_BUTTON;
	tbb[10].idCommand = IDM_HELP;
	tbb[11].iBitmap = TBar.m_id + 7;
	tbb[11].fsState = TBSTATE_ENABLED;
	tbb[11].fsStyle = TBSTYLE_BUTTON;
	tbb[11].idCommand = IDM_VERSION;
	TBar.AddButtons(12, tbb);

	//ステータスバー登録−SetHandle(hWnd))
	SBar.SetHandle(GetDlgItem(m_hWnd, IDC_STATUSBAR));
	//ステータスバー区画設定
	int sec[2] = {220, -1};
	SBar.SetSection(2, sec);
	//ステータスバー文字列設定
	SBar.SetText(0, "BCCMaker Ver1.0C (c) 2002 By ysama");

	//☆ファイルパスの設定
	g_OwnPath = Arg.Path();
	g_IniFile = g_OwnPath + "\\BCCMaker.ini";
	Ini.SetName(g_IniFile.ToChar());
	g_Make = Ini.ReadStr("System", "MAKE");
	g_Bcc32 = Ini.ReadStr("System", "BCC32");
	g_Brc32 = Ini.ReadStr("System", "BCR32");
	g_Asm = Ini.ReadStr("System", "ASM");
	g_Edit = Ini.ReadStr("System", "EDITOR");
	g_HelpFile = g_OwnPath + "\\BCCMakerHelp.chm";

	//☆ツリービューコントロールの初期化（ダイアログのコントロールに関連付ける）
	tv.m_hWnd = GetDlgItem(m_hWnd, IDC_FILETREE);
	tv.m_hInstance = m_hInstance;
	tv.SetFont(8, "ＭＳ 明朝");
	//☆ビットマップを登録
	tv.AddBitmap(MAKEINTRESOURCE(IDI_CLOSE), m_hInstance, RGB(255, 255, 255));
	tv.AddBitmap(MAKEINTRESOURCE(IDI_CPPBMP), m_hInstance, RGB(255, 255, 255));
	tv.AddBitmap(MAKEINTRESOURCE(IDI_RCBMP), m_hInstance, RGB(255, 255, 255));
	tv.AddBitmap(MAKEINTRESOURCE(IDI_ASMBMP), m_hInstance, RGB(255, 255, 255));
	tv.AddBitmap(MAKEINTRESOURCE(IDI_OBJBMP), m_hInstance, RGB(255, 255, 255));
	tv.AddBitmap(MAKEINTRESOURCE(IDI_LIBBMP), m_hInstance, RGB(255, 255, 255));
	tv.AddBitmap(MAKEINTRESOURCE(IDI_DOC), m_hInstance, RGB(255, 255, 255));
	//☆本来はCreate()関数で自動的に行うが、ダイアログベースなので手動
	TreeView_SetImageList(tv.m_hWnd, tv.m_hIList, TVSIL_NORMAL);

	//☆コマンドエディットコントロールの初期化
	ce.m_hWnd = GetDlgItem(m_hWnd, IDC_OUTPUT);
	ce.m_hInstance = m_hInstance;
	ce.SetFont(8, "ＭＳ 明朝");

	//ダイアログの初期化
	g_Prj = "";
	SendItemMsg(IDC_PROJECT, WM_SETTEXT, 0, (LPARAM)g_Prj.ToChar());
	g_OutDir = FALSE;		//FALSE - Debug
	g_InclPath = "";
	g_Copt = "-tW -Od -6 -pc -AT -y -k -Q -b";
	SendItemMsg(IDC_BCC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Copt.ToChar());
	g_Ropt = "-r";
	SendItemMsg(IDC_BRC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Ropt.ToChar());
	g_Aopt = "-omf";
	SendItemMsg(IDC_ASMOPTION, WM_SETTEXT, 0, (LPARAM)g_Aopt.ToChar());
	SBar.SetText(1, g_Prj.ToChar());
	SBar.SendMsg(SB_SETTIPTEXT, 1, (LPARAM)g_Prj.ToChar());	//ToolTipをつける

	//☆設定初期化（User.h参照）
	InitDialog(m_hWnd);

	//サイズ変更コントロールの初期位置取得
	RECT rec;
	GetWindowRect(GetDlgItem(m_hWnd, IDC_DETAIL), &rec);	//詳細ボタン
	g_idc_detail.x = rec.left;
	g_idc_detail.y = rec.top;
	g_detail_wd = rec.right - rec.left;
	g_detail_ht = rec.bottom - rec.top;
	ScreenToClient(m_hWnd, &g_idc_detail);
	for(int i = IDC_PROJECT; i < IDC_OUTPUT; i++) {			//その他コントロール
		GetWindowRect(GetDlgItem(m_hWnd, i), &rec);
		g_righside[i].x = rec.left;
		g_righside[i].y = rec.top;
		ScreenToClient(m_hWnd, &g_righside[i]);
	}
	GetWindowRect(GetDlgItem(m_hWnd, IDC_OUTPUT), &rec);	//IDC_OUTPUTコントロール
	g_idc_output.x = rec.left;
	g_idc_output.y = rec.top;
	ScreenToClient(m_hWnd, &g_idc_output);

	//CHISTORY変数のiniファイル設定
	history.SetPath(g_IniFile.ToChar());
	history.SetMenu(GetSubMenu(GetSubMenu(GetMenu(m_hWnd), 0), 5));
	history.Init();

	//データファイルで起動された場合、ファイルをオープンする
	if(g_ByFile)
		OnOpen();

	return TRUE;
}

bool MAKEDLG::OnNotify(WPARAM wParam, LPARAM lParam) {

	//ツールバーからのツールチップ情報取得
	switch (((LPNMHDR)lParam)->code) {
		case TTN_NEEDTEXT:
			static LPTOOLTIPTEXT lptip;
			lptip = (LPTOOLTIPTEXT)lParam;
			switch (lptip->hdr.idFrom) {
				case IDM_NEW:
					lptip->lpszText = "新規メイクファイルの作成";
					break;
				case IDM_OPEN:
					lptip->lpszText = "メイクファイルを開く";
					break;
				case IDM_SAVE:
					lptip->lpszText = "メイクファイルの保存";
					break;
				case IDM_EXIT:
					lptip->lpszText = "BCCMakerの終了";
					break;
				case IDM_MAKE:
					lptip->lpszText = "Make実行";
					break;
				case IDM_SETTING:
					lptip->lpszText = "設定";
					break;
				case IDM_HELP:
					lptip->lpszText = "BCCMakerヘルプ";
					break;
				case IDM_VERSION:
					lptip->lpszText = "バージョン情報";
					break;
			}
	}
	//ポップアップメニューを読みこむ
	HMENU hMenu = LoadMenu(m_hInstance, "IDM_POPUP");
	HMENU hPopupMenu = GetSubMenu(hMenu, 0);
	if(wParam == IDC_FILETREE) {
		//☆選択されているアイテムを取得
		HTREEITEM hSelected = tv.GetSelection();
		//☆メッセージを解読し、
		TV_DISPINFO* ptv_disp;
		ptv_disp = (TV_DISPINFO*)lParam;
		//☆ダブルクリックだったら
		if(ptv_disp->hdr.code == NM_DBLCLK) {
			CSTR Cmd = "\"";
			Cmd = Cmd + g_Edit + "\" \"";
			char Buff[MAX_PATH];
			//☆選択アイテムの文字列を取得し、これでフィルターを作成してプログラムを実行
			if(hSelected) {
				tv.GetItem(hSelected, Buff, MAX_PATH);
				if(strstr(Buff, "ファイル"))
					SendMsg(WM_COMMAND, IDC_ADD, NULL);
				else {
					Cmd = Cmd + Buff;
					Cmd = Cmd + "\"";
					WinExec(Cmd.ToChar(), SW_SHOWNORMAL);
				}
			}
		}
		//☆右クリックだったらポップアップメニュー
		else if(ptv_disp->hdr.code == NM_RCLICK) {
			//ポップアップメニューの表示
			POINT pt;
			GetCursorPos(&pt);
			TrackPopupMenu(hPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON,
						  pt.x, pt.y, 0, m_hWnd, NULL);
		}
	}
	//☆メニューリソースの開放
	DestroyMenu(hMenu);
	return TRUE;
}

bool MAKEDLG::OnDefault(WPARAM wParam) {	//WM_COMMANDの特殊処理

	char menuitem[MAX_PATH];
	int num = LOWORD(wParam) - IDM_HISTORY;
	if(num >= 0 && num < ITEM_MAX) {
		MENUITEMINFO mii = {0};	//ZeroMemory(&mii, sizeof(MENUITEMINFO));と同じ初期設定
		mii.cbSize		= sizeof(MENUITEMINFO);
		mii.fMask		= MIIM_ID | MIIM_TYPE;
		mii.fType		= MFT_STRING;
		mii.dwTypeData	= NULL;
		if(GetMenuItemInfo(GetSubMenu(GetSubMenu(GetMenu(m_hWnd), 0), 5), num, TRUE, &mii)) {
			mii.fType		= MFT_STRING;
			mii.dwTypeData	= menuitem;
			mii.cch++;
			if(GetMenuItemInfo(GetSubMenu(GetSubMenu(GetMenu(m_hWnd), 0), 5), num, TRUE, &mii)) {
				g_Prj = menuitem;
				//仮に該当するパラメーターがなければ前のデータが残るので初期化する
				g_OutDir = FALSE;
				g_InclPath = "";
				g_Copt = "-tW -Od -6 -pc -AT -y -k -Q -b";
				g_Ropt = "-r";
				g_Aopt = "-omf";
				InitDialog(m_hWnd);
				ReadMakeFile(menuitem);
				SendItemMsg(IDC_PROJECT, WM_SETTEXT, 0, (LPARAM)g_Prj.ToChar());
				SendItemMsg(IDC_BCC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Copt.ToChar());
				SendItemMsg(IDC_BRC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Ropt.ToChar());
				SendItemMsg(IDC_ASMOPTION, WM_SETTEXT, 0, (LPARAM)g_Aopt.ToChar());
				SBar.SetText(1, g_Prj.ToChar());
				SBar.SendMsg(SB_SETTIPTEXT, 1, (LPARAM)g_Prj.ToChar());	//ToolTipをつける
				return TRUE;
			}
		}
	}
	return FALSE;
}

bool MAKEDLG::OnSize(WPARAM wParam, LPARAM lParam) {

	RECT rec;
	//ツールバー再設定
	TBar.AutoSize();
	//ステータスバー再設定
	SBar.AutoSize();
	//IDC_DETAIL再設定
	MoveWindow(GetDlgItem(m_hWnd, IDC_DETAIL), LOWORD(lParam) - g_detail_wd
			- g_idc_output.x, g_idc_detail.y, g_detail_wd, g_detail_ht, TRUE);
	//右コントロール再設定
	for(int i = IDC_PROJECT; i < IDC_OUTPUT; i++) {
		GetWindowRect(GetDlgItem(m_hWnd, i), &rec);
		MoveWindow(GetDlgItem(m_hWnd, i), g_righside[i].x, g_righside[i].y,
				LOWORD(lParam) - g_righside[i].x - g_idc_output.x, rec.bottom
				- rec.top, TRUE);
	}
	//IDC_OUTPUT再設定
	GetWindowRect(SBar.GetHandle(), &rec);	//ステータスバー高さ取得
	MoveWindow(GetDlgItem(m_hWnd, IDC_OUTPUT), g_idc_output.x, g_idc_output.y,
			LOWORD(lParam) - g_idc_output.x * 2, HIWORD(lParam) - g_idc_output.y
			- (rec.bottom - rec.top), TRUE);

	return TRUE;
}

bool MAKEDLG::OnClose(WPARAM wParam, LPARAM lParam) {

	if(MessageBox(m_hWnd, "終了しますか", "終了確認",
					MB_YESNO | MB_ICONINFORMATION) == IDYES) {
		//処理をするとDestroyWindow、PostQuitMessageが呼ばれる
		//☆Iniファイルに書き込んで終了
		Ini.WriteStr("System", "BCCMAKER", g_OwnPath.ToChar());
		Ini.WriteStr("System", "MAKE", g_Make.ToChar());
		Ini.WriteStr("System", "BCC32", g_Bcc32.ToChar());
		Ini.WriteStr("System", "BCR32", g_Brc32.ToChar());
		Ini.WriteStr("System", "ASM", g_Asm.ToChar());
		Ini.WriteStr("System", "EDITOR", g_Edit.ToChar());
		//履歴の書き込み
		history.WriteIni();
		return TRUE;
	}
	else
		//そうでなければウィンドウではDefWindowProc関数をreturn、ダイアログではreturn FALSEとなる。
		return FALSE;
}

//ダイアログベースの場合はこれが必要
bool MAKEDLG::OnDestroy(WPARAM wPram, LPARAM lParam) {

	PostQuitMessage(0);
	return TRUE;
}

///////////////////////////////
// MAKEDLG
//メニュー、コントロールの関数
///////////////////////////////
bool MAKEDLG::OnAdd() {

	//フィルター用変数
	char Buff[MAX_PATH];
	char* Filter[] = {	"cppファイル\0*.cpp\0\0",
						"rcファイル\0*.rc\0\0",
						"asmファイル\0*.asm\0\0",
						"objファイル\0*.obj\0\0",
						"libファイル\0*.lib\0\0",
						"全てのファイル\0*.*\0\0"};
	int nFilter;
	//☆選択されているアイテムの文字列を取得し、これでフィルターを作成
	HTREEITEM hSelected = tv.GetSelection();
	if(hSelected) {
		tv.GetItem(hSelected, Buff, MAX_PATH);
		if(!lstrcmp(Buff, "CPPファイル"))		nFilter = 0;
		else if(!lstrcmp(Buff, "RCファイル"))	nFilter = 1;
		else if(!lstrcmp(Buff, "ASMファイル"))	nFilter = 2;
		else if(!lstrcmp(Buff, "OBJファイル"))	nFilter = 3;
		else if(!lstrcmp(Buff, "LIBファイル"))	nFilter = 4;
		else 									nFilter = 5;
	}
	else										nFilter = 5;
	//ファイル名を取得
	char* FileName = cmndlg.GetFileName(m_hWnd, Filter[nFilter], TRUE);
	if(!FileName) {
		MessageBox(m_hWnd, "ファイルが選択されませんでした", "エラー", MB_OK | MB_ICONSTOP);
		return TRUE;
	}
	//☆ファイル名が既に存在するか確認
	hSelected = tv.GetChild(hSelected);		//そのカテゴリーの最初の子アイテム
	while(hSelected) {
		tv.GetItem(hSelected, Buff, MAX_PATH);
		if(!lstrcmp(FileName, Buff)) {		//既に同じファイルがあれば追加しない
			MessageBox(m_hWnd, "このファイルは選択済です！", Buff, MB_OK | MB_ICONSTOP);
			return TRUE;
		}
		else
			hSelected = tv.GetNext(hSelected);
	}
	//☆ファイル名をツリービューに表示
	HTREEITEM tvParent;
	if(strstr(FileName, ".cpp") || strstr(FileName, ".CPP"))
		tvParent = g_hTreeCPP;
	else if(strstr(FileName, ".rc") || strstr(FileName, ".RC"))
		tvParent = g_hTreeRC;
	else if(strstr(FileName, ".asm") || strstr(FileName, ".ASM"))
		tvParent = g_hTreeASM;
	else if(strstr(FileName, ".obj") || strstr(FileName, ".OBJ"))
		tvParent = g_hTreeOBJ;
	else if(strstr(FileName, ".lib") || strstr(FileName, ".LIB"))
		tvParent = g_hTreeLIB;
	else {
		MessageBox(m_hWnd, "Makeできないファイルです", "エラー", MB_OK | MB_ICONSTOP);
		return TRUE;
	}
	tv.InsertItem(FileName, TVI_LAST, tvParent, 6, 6);
	tv.Expand(tvParent, TVE_EXPAND);
	return TRUE;
}

bool MAKEDLG::OnDel() {

	//☆選択されているアイテムの文字列を取得し、これでフィルターを作成
	char Buff[MAX_PATH];
	HTREEITEM hSelected = tv.GetSelection();
	if(hSelected) {
		tv.GetItem(hSelected, Buff, MAX_PATH);
	}
	else {
		MessageBox(m_hWnd, "ファイルが選択されていません", "エラー", MB_OK | MB_ICONSTOP);
		return TRUE;
	}
	CSTR ItemText = Buff;
	if(ItemText == "CPPファイル" || ItemText == "RCファイル" ||
		ItemText == "ASMファイル" || ItemText == "OBJファイル" ||
		ItemText == "LIBファイル")
		MessageBox(m_hWnd, "フォールダーは削除できません", "警  告", MB_OK | MB_ICONSTOP);
	else
		tv.DeleteItem(hSelected);
	return TRUE;
}

bool MAKEDLG::OnDetail() {

	detaildlg.DoModal(m_hWnd, "IDD_DETAIL", detaildlgProc);
	return TRUE;
}


bool MAKEDLG::OnProject(WPARAM wParam, LPARAM lParam) {

	char buff[MAX_PATH];
	if(HIWORD(wParam) == EN_UPDATE) {
		SendItemMsg(IDC_PROJECT, WM_GETTEXT, MAX_PATH, (LPARAM)buff);
		g_Prj = buff;
		return TRUE;
	}
	else
		return FALSE;
}

bool MAKEDLG::OnBCCOption(WPARAM wParam, LPARAM lParam) {

	char buff[MAX_PATH];
	if(HIWORD(wParam) == EN_UPDATE) {
		SendItemMsg(IDC_BCC32OPTION, WM_GETTEXT, MAX_PATH, (LPARAM)buff);
		g_Copt = buff;
		return TRUE;
	}
	else
		return FALSE;
}

bool MAKEDLG::OnBRCOption(WPARAM wParam, LPARAM lParam) {

	char buff[MAX_PATH];
	if(HIWORD(wParam) == EN_UPDATE) {
		SendItemMsg(IDC_BRC32OPTION, WM_GETTEXT, MAX_PATH, (LPARAM)buff);
		g_Ropt = buff;
		return TRUE;
	}
	else
		return FALSE;
}

bool MAKEDLG::OnASMOption(WPARAM wParam, LPARAM lParam) {

	char buff[MAX_PATH];
	if(HIWORD(wParam) == EN_UPDATE) {
		SendItemMsg(IDC_ASMOPTION, WM_GETTEXT, MAX_PATH, (LPARAM)buff);
		g_Aopt = buff;
		return TRUE;
	}
	else
		return FALSE;
}

bool MAKEDLG::OnNew() {

	//新規ファイルダイアログで初期化
	if(newdlg.DoModal(m_hWnd, "IDD_NEW", newdlgProc)) {
		SendItemMsg(IDC_PROJECT, WM_SETTEXT, 0, (LPARAM)g_Prj.ToChar());
		SendItemMsg(IDC_BCC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Copt.ToChar());
		SendItemMsg(IDC_BRC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Ropt.ToChar());
		SendItemMsg(IDC_ASMOPTION, WM_SETTEXT, 0, (LPARAM)g_Aopt.ToChar());
		InitDialog(m_hWnd);
		SBar.SetText(1, g_Prj.ToChar());
		history.AddItem(g_Prj.ToChar());	//ファイルを履歴に記録
		SBar.SendMsg(SB_SETTIPTEXT, 1, (LPARAM)g_Prj.ToChar());	//ToolTipをつける
	}
	return TRUE;
}

bool MAKEDLG::OnOpen() {

	char* cp = NULL;
	//データファイル付きで起動された場合の対応
	if(g_ByFile) {
		if(strstr(Arg.v(1), ".mak") || strstr(Arg.v(1), ".MAK"))
			cp = Arg.v(1);
		else
			MessageBox(m_hWnd, "MAKEファイル（*.mak）ではありません", "エラー", MB_OK | MB_ICONERROR);
		g_ByFile = FALSE;	//一回だけの処理
 	}
	else
		cp = cmndlg.GetFileName(m_hWnd, "メイクファイル(*.mak)\0*.mak\0\0", TRUE, "mak");
	if(cp) {
		g_Prj = cp;
		history.AddItem(g_Prj.ToChar());	//ファイルを履歴に記録
		//仮に該当するパラメーターがなければ前のデータが残るので初期化する
		g_OutDir = FALSE;
		g_InclPath = "";
		g_Copt = "-tW -Od -6 -pc -AT -y -k -Q -b";
		g_Ropt = "-r";
		g_Aopt = "-omf";
		InitDialog(m_hWnd);
		ReadMakeFile(cp);
		SendItemMsg(IDC_PROJECT, WM_SETTEXT, 0, (LPARAM)g_Prj.ToChar());
		SendItemMsg(IDC_BCC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Copt.ToChar());
		SendItemMsg(IDC_BRC32OPTION, WM_SETTEXT, 0, (LPARAM)g_Ropt.ToChar());
		SendItemMsg(IDC_ASMOPTION, WM_SETTEXT, 0, (LPARAM)g_Aopt.ToChar());
		SBar.SetText(1, g_Prj.ToChar());
		SBar.SendMsg(SB_SETTIPTEXT, 1, (LPARAM)g_Prj.ToChar());	//ToolTipをつける
		return TRUE;
	}
	return FALSE;
}

bool MAKEDLG::OnSave() {

	if(*g_Prj.ToChar())
		WriteMakeFile(g_Prj.ToChar());
	else
		MessageBox(m_hWnd, "ファイル名が指定されていません", "警告", MB_OK | MB_ICONSTOP);
	return TRUE;
}

bool MAKEDLG::OnSaveas() {

	char* cp = cmndlg.GetFileName(m_hWnd, "メイクファイル(*.mak)\0*.mak\0\0", FALSE, "mak");
	if(*cp)
		WriteMakeFile(cp);
	else
		MessageBox(m_hWnd, "ファイル名が指定されていません", "警告", MB_OK | MB_ICONSTOP);
	return TRUE;
}

bool MAKEDLG::OnExit() {

	SendMsg(WM_CLOSE, 0, 0);
	return TRUE;
}

bool MAKEDLG::OnMake() {

	//現在の最新makeプロジェクトを保存
	if(*g_Prj.ToChar())
		WriteMakeFile(g_Prj.ToChar());
	else {
		MessageBox(m_hWnd, "makファイルがまだ指定されていません", "注  意", MB_OK | MB_ICONSTOP);
		return TRUE;
	}
	//メッセージ出力用エディットコントロール（IDC_OUTPUT）をクリアする
	SendItemMsg(IDC_OUTPUT, WM_SETTEXT, 0, (LPARAM)"");
	//現在のディレクトリーを保存
	char CurrentDir[MAX_PATH];
	CSTR TargetDir(g_Prj);
	GetCurrentDirectory(MAX_PATH, CurrentDir);
	//makファイルのあるディレクトリーの一つ上のディレクトリーに上がる
	char* cp;
	cp = TargetDir.ToChar() + lstrlen(TargetDir.ToChar());
	while(*cp != '\\')	cp--;
	*cp = NULL;				//自分のフォールダー
	if(*(cp - 1) != ':') {	//ドライブ記号でなければ
		while(*cp != '\\')	cp--;
		*cp = NULL;			//一つ上のフォールダー
	}
	SetCurrentDirectory(TargetDir.ToChar());
	//Makeのコマンドライン作成
	char cmdstr[MAX_PATH * 2];
	lstrcpy(cmdstr, "\"");
	lstrcat(cmdstr, g_Make.ToChar());
	lstrcat(cmdstr, "\" \"-f");
	lstrcat(cmdstr, g_Prj.ToChar());
	lstrcat(cmdstr, "\"");
	//☆Makeの実行
	ce.Exec(cmdstr, "Making starts ...\r\n\r\n",
			"\r\n-------------------- Make Process finished --------------------\r\n");
	//元のディレクトリーに戻る
	SetCurrentDirectory(CurrentDir);
	MessageBox(m_hWnd, "Makeが完了しました", "Make完了", MB_OK | MB_ICONINFORMATION);
	return TRUE;
}

bool MAKEDLG::OnMakeedit() {

	char cmd[MAX_PATH];
	lstrcpy(cmd, "\"");
	lstrcat(cmd, g_Edit.ToChar());
	lstrcat(cmd, "\" \"");
	lstrcat(cmd, g_Prj.ToChar());
	lstrcat(cmd, "\"");
	//ファイルがあるか確認
	OFSTRUCT ofs;
	ZeroMemory(&ofs, sizeof(OFSTRUCT));
	ofs.cBytes = sizeof(OFSTRUCT);
	if(OpenFile(g_Prj.ToChar(), &ofs, OF_EXIST) != HFILE_ERROR)
		WinExec(cmd, SW_SHOWNORMAL);
	else											//無ければエラー
		MessageBox(m_hWnd, "未だmakファイルが作られていません", "注 意", MB_OK | MB_ICONSTOP);
	return TRUE;
}

bool MAKEDLG::OnRun() {

	if(g_Prj == "") {
		MessageBox(m_hWnd, "未だファイルが作られていません", "注 意", MB_OK | MB_ICONSTOP);
		return TRUE;
	}
	CSTR str = g_Prj;
	lstrcpy(strstr(str.ToChar(), ".mak"), ".exe");	//g_Prj(mak)を"exe"に変える
	WinExec(str.ToChar(), SW_SHOWNORMAL);
	return TRUE;
}

bool MAKEDLG::OnSetting() {

	setupdlg.DoModal(m_hWnd, "IDD_SETUP", setupdlgProc);
	return TRUE;
}

bool MAKEDLG::OnHelp() {

	CSTR cmd = "hh \"";
	cmd = cmd + g_HelpFile + "\"";
	WinExec(cmd.ToChar(), SW_SHOWNORMAL);
	return TRUE;
}

bool MAKEDLG::OnOption() {

	helpdlg.DoModal(m_hWnd, "IDD_HELP", helpdlgProc);
	return TRUE;
}

bool MAKEDLG::OnVersion() {

	versiondlg.DoModal(m_hWnd, "IDD_VERSION", versiondlgProc);
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//NEWDLG
///////////////////////////////
bool NEWDLG::OnInit(WPARAM wParam, LPARAM lParam) {

	//出力フォールダーの設定
	SendItemMsg(IDC_TARGET, CB_ADDSTRING, 0, (LPARAM)"Debug");
	SendItemMsg(IDC_TARGET, CB_ADDSTRING, 0, (LPARAM)"Release");
	SendItemMsg(IDC_TARGET, CB_SETCURSEL, 0, 0);
	return TRUE;
}

bool NEWDLG::OnSelect() {

	char* cp;
	if(cp = cmndlg.GetPath(m_hWnd, "Debug/Releaseフォールダーを持つ基点となるフォールダーを選択してください"))
		SendItemMsg(IDC_ORIGIN, WM_SETTEXT, 0, (LPARAM)cp);
	return TRUE;
}

bool NEWDLG::OnIdok() {

	//ターゲットディレクトリー情報を読む
	char Buff[MAX_PATH];
	SendItemMsg(IDC_ORIGIN, WM_GETTEXT, MAX_PATH, (LPARAM)Buff);
	g_Prj = Buff;
	switch(SendItemMsg(IDC_TARGET, CB_GETCURSEL, 0, 0)) {
		case 0:
			g_OutDir = FALSE;		//FALSE - Debug
			g_Copt = "-tW -6 -Od -w- -AT -pc -H- -k -Q -b -v -y";
			g_Prj = g_Prj + "\\Debug";
			break;
		case 1:
			g_OutDir = TRUE;		//TRUE - Release
			g_Copt = "-tW -6 -Od -w- -AT -pc -H- -k -b";
			g_Prj = g_Prj + "\\Release";
			break;
	}
	//無い場合を考えフォールダーを作成する
	CreateDirectory(g_Prj.ToChar(), NULL);
	//ファイル名を付加する
	SendItemMsg(IDC_NAME, WM_GETTEXT, MAX_PATH, (LPARAM)Buff);
	if(!strstr(Buff, ".mak"))	//拡張子がなければ".mak"を追加する
		lstrcat(Buff, ".mak");
	g_Prj = g_Prj + "\\";
	g_Prj = g_Prj + Buff;
	//インクルードパスを初期化
	g_InclPath = "";
	//brc32とAsemblerのオプションを初期化
	g_Ropt = "-r";
	g_Aopt = "-omf";

	EndModal(TRUE);
	return TRUE;
}

bool NEWDLG::OnCancel() {

	EndModal(FALSE);
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//DETAILDLG
///////////////////////////////
bool DETAILDLG::OnInit(WPARAM wParam, LPARAM lParam) {

	//ターゲットタイプの設定
	SendItemMsg(IDC_TARGETTYPE, CB_ADDSTRING, 0, (LPARAM)"コンソールアプリケーション");
	SendItemMsg(IDC_TARGETTYPE, CB_ADDSTRING, 0, (LPARAM)"Windowsアプリケーション");
	SendItemMsg(IDC_TARGETTYPE, CB_ADDSTRING, 0, (LPARAM)"Dynamic Link Liabrary");
	SendItemMsg(IDC_TARGETTYPE, CB_ADDSTRING, 0, (LPARAM)"ライブラリー（TLIB）");
	//出力フォールダーの設定
	SendItemMsg(IDC_TARGETDIR, CB_ADDSTRING, 0, (LPARAM)"Debug");
	SendItemMsg(IDC_TARGETDIR, CB_ADDSTRING, 0, (LPARAM)"Release");
	//最適化の設定
	SendItemMsg(IDC_OPTIMIZATION, CB_ADDSTRING, 0, (LPARAM)"無し");
	SendItemMsg(IDC_OPTIMIZATION, CB_ADDSTRING, 0, (LPARAM)"サイズ最適化");
	SendItemMsg(IDC_OPTIMIZATION, CB_ADDSTRING, 0, (LPARAM)"速度最適化");
	//命令コードの設定
	SendItemMsg(IDC_INSTRUCTIONSET, CB_ADDSTRING, 0, (LPARAM)"80386（-3）");
	SendItemMsg(IDC_INSTRUCTIONSET, CB_ADDSTRING, 0, (LPARAM)"80386/80486（-4）");
	SendItemMsg(IDC_INSTRUCTIONSET, CB_ADDSTRING, 0, (LPARAM)"Pentium（-5）");
	SendItemMsg(IDC_INSTRUCTIONSET, CB_ADDSTRING, 0, (LPARAM)"Pentium Pro（-6）");
	//呼出規約の設定
	SendItemMsg(IDC_CALLTYPE, CB_ADDSTRING, 0, (LPARAM)"C（-pc）");
	SendItemMsg(IDC_CALLTYPE, CB_ADDSTRING, 0, (LPARAM)"Pascal（-p）");
	SendItemMsg(IDC_CALLTYPE, CB_ADDSTRING, 0, (LPARAM)"stdcall（-ps）");
	SendItemMsg(IDC_CALLTYPE, CB_ADDSTRING, 0, (LPARAM)"fastcall（-pr）");
	//言語仕様の設定
	SendItemMsg(IDC_LANGUAGETYPE, CB_ADDSTRING, 0, (LPARAM)"Borland準拠（-AT）");
	SendItemMsg(IDC_LANGUAGETYPE, CB_ADDSTRING, 0, (LPARAM)"ANSI準拠（-A）");
	SendItemMsg(IDC_LANGUAGETYPE, CB_ADDSTRING, 0, (LPARAM)"UNIX V準拠（-AU）");
	SendItemMsg(IDC_LANGUAGETYPE, CB_ADDSTRING, 0, (LPARAM)"K&R準拠（-AK）");
	//デバッグの設定
	SendItemMsg(IDC_DEBUG, CB_ADDSTRING, 0, (LPARAM)"デバッグ情報付加（-v）");
	SendItemMsg(IDC_DEBUG, CB_ADDSTRING, 0, (LPARAM)"行番号情報付加（-y）");
	SendItemMsg(IDC_DEBUG, CB_ADDSTRING, 0, (LPARAM)"デバッグ・行番号情報付加");

	//bcc32のOptionをエディットコントロールから読んで解読する
	char Temp[MAX_PATH * 32];
	makedlg.SendItemMsg(IDC_BCC32OPTION, WM_GETTEXT, MAX_PATH * 32, (LPARAM)Temp);
	CSTR BccOpt = Temp, Token;
	while(BccOpt.Next(Token)) {
		*Temp = NULL;
		if(Token == "-WC" || Token == "-tWC") {			//コンソールアプリ
			SendItemMsg(IDC_TARGETTYPE, CB_SETCURSEL, 0, 0);
		}
		else if(Token == "-W" || Token == "-tW") {		//ウィンドウアプリ
			SendItemMsg(IDC_TARGETTYPE, CB_SETCURSEL, 1, 0);
		}
		else if(Token == "-WD" || Token == "-tWD") {	//DLLアプリ
			SendItemMsg(IDC_TARGETTYPE, CB_SETCURSEL, 2, 0);
		}
		else if(Token == "-WR" || Token == "-tWR") {	//ライブラリー
			SendItemMsg(IDC_TARGETTYPE, CB_SETCURSEL, 3, 0);
		}
		else if(Token == "-WM" || Token == "-tWM") {	//マルチスレッドアプリ
			SendItemMsg(IDC_MULTITHREAD, BM_SETCHECK, BST_CHECKED, 0);
		}
		else if(Token == "-Od") {						//最適化無効
			SendItemMsg(IDC_OPTIMIZATION, CB_SETCURSEL, 0, 0);
		}
		else if(Token == "-O1") {						//サイズを最適化
			SendItemMsg(IDC_OPTIMIZATION, CB_SETCURSEL, 1, 0);
		}
		else if(Token == "-O2") {						//速度を最適化
			SendItemMsg(IDC_OPTIMIZATION, CB_SETCURSEL, 2, 0);
		}
		else if(Token == "-3") {						//CPU命令セット386
			SendItemMsg(IDC_INSTRUCTIONSET, CB_SETCURSEL, 0, 0);
		}
		else if(Token == "-4") {						//CPU命令セット486
			SendItemMsg(IDC_INSTRUCTIONSET, CB_SETCURSEL, 1, 0);
		}
		else if(Token == "-5") {						//CPU命令セットPentium
			SendItemMsg(IDC_INSTRUCTIONSET, CB_SETCURSEL, 2, 0);
		}
		else if(Token == "-6") {						//CPU命令セットPentium Pro
			SendItemMsg(IDC_INSTRUCTIONSET, CB_SETCURSEL, 3, 0);
		}
		else if(Token == "-pc") {						//Cの呼び出し規約
			SendItemMsg(IDC_CALLTYPE, CB_SETCURSEL, 0, 0);
		}
		else if(Token == "-p") {						//パスカルの呼び出し規約
			SendItemMsg(IDC_CALLTYPE, CB_SETCURSEL, 1, 0);
		}
		else if(Token == "-ps") {						//stdcallの呼び出し規約
			SendItemMsg(IDC_CALLTYPE, CB_SETCURSEL, 2, 0);
		}
		else if(Token == "-pr") {						//fastcallの呼び出し規約
			SendItemMsg(IDC_CALLTYPE, CB_SETCURSEL, 3, 0);
		}
		else if(Token == "-AT") {						//予約語BCC32.EXEに準拠
			SendItemMsg(IDC_LANGUAGETYPE, CB_SETCURSEL, 0, 0);
		}
		else if(Token == "-A") {						//予約語ANSIに準拠
			SendItemMsg(IDC_LANGUAGETYPE, CB_SETCURSEL, 1, 0);
		}
		else if(Token == "-AU") {						//予約語UNIXに準拠
			SendItemMsg(IDC_LANGUAGETYPE, CB_SETCURSEL, 2, 0);
		}
		else if(Token == "-AK") {						//予約語K&Rに準拠
			SendItemMsg(IDC_LANGUAGETYPE, CB_SETCURSEL, 3, 0);
		}
		else if(Token == "-H") {						//プリコンパイルヘッダー使用
			SendItemMsg(IDC_PRECOMPILEHEADER, BM_SETCHECK, BST_CHECKED, 0);
		}
		else if(Token == "-w") {						//警告表示使用
			SendItemMsg(IDC_WARNING, BM_SETCHECK, BST_CHECKED, 0);
		}
		else if(Token == "-v") {						//デバッグ情報付加
			if(*Temp) {
				SendItemMsg(IDC_DEBUG, CB_SETCURSEL, 2, 0);
				*Temp = NULL;
			}
			else {
				SendItemMsg(IDC_DEBUG, CB_SETCURSEL, 0, 0);
				*Temp = TRUE;
			}
		}
		else if(Token == "-y") {						//行番号情報付加
			if(*Temp) {
				SendItemMsg(IDC_DEBUG, CB_SETCURSEL, 2, 0);
				*Temp = NULL;
			}
			else {
				SendItemMsg(IDC_DEBUG, CB_SETCURSEL, 1, 0);
				*Temp = TRUE;
			}
		}
		else if(Token == "-d") {						//重複文字を統合
			SendItemMsg(IDC_STRINTEG, BM_SETCHECK, BST_CHECKED, 0);
		}
		else if(Token == "-k") {						//スタックフレーム生成
			SendItemMsg(IDC_STACKFRAME, BM_SETCHECK, BST_CHECKED, 0);
		}
		else if(Token == "-Q") {						//拡張コンパイラー情報
			SendItemMsg(IDC_EXTERRORINFO, BM_SETCHECK, BST_CHECKED, 0);
		}
		else if(Token == "-b") {						//enumをintにする
			SendItemMsg(IDC_ENUM2INT, BM_SETCHECK, BST_CHECKED, 0);
		}
	}
	//出力フォールダー
	if(g_OutDir)
		SendItemMsg(IDC_TARGETDIR, CB_SETCURSEL, 1, 0);
	else
		SendItemMsg(IDC_TARGETDIR, CB_SETCURSEL, 0, 0);
	//インクルードパス
	SendItemMsg(IDC_INCLPATH, WM_SETTEXT, 0, (LPARAM)g_InclPath.ToChar());
	return TRUE;
}

bool DETAILDLG::OnIdok() {

	//bcc32のOptionを構成する
	char Temp[MAX_PATH * 4];
	CSTR BccOpt;
	switch(SendItemMsg(IDC_TARGETTYPE, CB_GETCURSEL, 0, 0)) {
		case 0:
			BccOpt = "-tWC";			//コンソールアプリ
			break;
		case 1:
			BccOpt = "-tW";				//ウィンドウアプリ
			break;
		case 2:
			BccOpt = "-tWD";			//DLLアプリ
			break;
		case 3:
			BccOpt = "-tWR";			//ライブラリー
			break;
		case CB_ERR:
			BccOpt = "-tW";				//ウィンドウアプリ
			break;
	}
	if(SendItemMsg(IDC_MULTITHREAD, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -tWM";		//マルチスレッドアプリ
	switch(SendItemMsg(IDC_OPTIMIZATION, CB_GETCURSEL, 0, 0)) {
		case 0:
			BccOpt = BccOpt + " -Od";	//最適化無効
			break;
		case 1:
			BccOpt = BccOpt + " -O1";	//サイズを最適化
			break;
		case 2:
			BccOpt = BccOpt + " -O2";	//速度を最適化
			break;
		case CB_ERR:
			BccOpt = BccOpt + " -Od";	//最適化無効
			break;
	}
	switch(SendItemMsg(IDC_INSTRUCTIONSET, CB_GETCURSEL, 0, 0)) {
		case 0:
			BccOpt = BccOpt + " -3";	//CPU命令セット386
			break;
		case 1:
			BccOpt = BccOpt + " -4";	//CPU命令セット486
			break;
		case 2:
			BccOpt = BccOpt + " -5";	//CPU命令セットPentium
			break;
		case 3:
			BccOpt = BccOpt + " -6";	//CPU命令セットPentium Pro
			break;
		case CB_ERR:
			BccOpt = BccOpt + " -6";	//CPU命令セットPentium Pro
			break;
	}
	switch(SendItemMsg(IDC_CALLTYPE, CB_GETCURSEL, 0, 0)) {
		case 0:
			BccOpt = BccOpt + " -pc";	//Cの呼び出し規約
			break;
		case 1:
			BccOpt = BccOpt + " -p";	//パスカルの呼び出し規約
			break;
		case 2:
			BccOpt = BccOpt + " -ps";	//stdcallの呼び出し規約
			break;
		case 3:
			BccOpt = BccOpt + " -pr";	//fastcallの呼び出し規約
		case CB_ERR:
			BccOpt = BccOpt + " -pc";	//Cの呼び出し規約
			break;
	}
	switch(SendItemMsg(IDC_LANGUAGETYPE, CB_GETCURSEL, 0, 0)) {
		case 0:
			BccOpt = BccOpt + " -AT";	//予約語BCC32.EXEに準拠
			break;
		case 1:
			BccOpt = BccOpt + " -A";	//予約語ANSIに準拠
			break;
		case 2:
			BccOpt = BccOpt + " -AU";	//予約語UNIXに準拠
			break;
		case 3:
			BccOpt = BccOpt + " -AK";	//予約語K&Rに準拠
		case CB_ERR:
			BccOpt = BccOpt + " -AT";	//予約語BCC32.EXEに準拠
			break;
	}
	if(SendItemMsg(IDC_PRECOMPILEHEADER, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -H";			//プリコンパイルヘッダー使用
	if(SendItemMsg(IDC_WARNING, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -w";			//警告表示使用
	switch(SendItemMsg(IDC_DEBUG, CB_GETCURSEL, 0, 0)) {
		case 0:
			BccOpt = BccOpt + " -v";	//デバッグ情報付加
			break;
		case 1:
			BccOpt = BccOpt + " -y";	//行番号情報付加
			break;
		case 2:
			BccOpt = BccOpt + " -v -y";	//デバッグ・行番号情報付加
			break;
	}
	if(SendItemMsg(IDC_STRINTEG, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -d";			//重複文字を統合
	if(SendItemMsg(IDC_STACKFRAME, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -k";			//スタックフレーム生成
	if(SendItemMsg(IDC_EXTERRORINFO, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -Q";			//拡張コンパイラー情報
	if(SendItemMsg(IDC_ENUM2INT, BM_GETCHECK, 0, 0) == BST_CHECKED)
		BccOpt = BccOpt + " -b";			//enumをintにする
	//bcc32Option文字の設定
	makedlg.SendItemMsg(IDC_BCC32OPTION, WM_SETTEXT, 0, (LPARAM)BccOpt.ToChar());
	//出力フォールダー
	if(SendItemMsg(IDC_TARGETDIR, CB_GETCURSEL, 0, 0))
		g_OutDir = TRUE;
	else
		g_OutDir = FALSE;
	//インクルードパス
	SendItemMsg(IDC_INCLPATH, WM_GETTEXT, MAX_PATH, (LPARAM)Temp);
	g_InclPath = Temp;
	//ダイアログの終了
	EndModal(TRUE);
	return TRUE;
}

bool DETAILDLG::OnInclbtn() {

	char* cp;
	if(cp = cmndlg.GetPath(m_hWnd, "インクルードするファイルのあるフォールダーを選択してください"))
		g_InclPath = cp;
	else
		g_InclPath = "";
	SendItemMsg(IDC_INCLPATH, WM_SETTEXT, 0, (LPARAM)cp);
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//SETUPDLG
///////////////////////////////
bool SETUPDLG::OnInit(WPARAM, LPARAM) {

	SendItemMsg(IDC_MAKEPATH, WM_SETTEXT, 0, (LPARAM)g_Make.ToChar());
	SendItemMsg(IDC_BCCPATH, WM_SETTEXT, 0, (LPARAM)g_Bcc32.ToChar());
	SendItemMsg(IDC_BRCPATH, WM_SETTEXT, 0, (LPARAM)g_Brc32.ToChar());
	SendItemMsg(IDC_ASMPATH, WM_SETTEXT, 0, (LPARAM)g_Asm.ToChar());
	SendItemMsg(IDC_EDITPATH, WM_SETTEXT, 0, (LPARAM)g_Edit.ToChar());
	return TRUE;
}

bool SETUPDLG::OnIdok() {

	EndModal(TRUE);
	return TRUE;
}

bool SETUPDLG::OnMakebtn() {

	char* cp;
	if(cp = cmndlg.GetFileName(m_hWnd, "makeプログラム\0make.exe\0\0", TRUE)) {
		g_Make = cp;
		SendItemMsg(IDC_MAKEPATH, WM_SETTEXT, 0, (LPARAM)cp);
	}
	return TRUE;
}

bool SETUPDLG::OnBccbtn() {

	char* cp;
	if(cp = cmndlg.GetFileName(m_hWnd, "Embarcadero 32bitコンパイラー\0bcc32.exe;bcc32c.exe;bcc32x.exe\0すべての実行ファイル\*.exe\0\0", TRUE)) {
		g_Bcc32 = cp;
		SendItemMsg(IDC_BCCPATH, WM_SETTEXT, 0, (LPARAM)cp);
	}
	return TRUE;
}

bool SETUPDLG::OnBrcbtn() {

	char* cp;
	if(cp = cmndlg.GetFileName(m_hWnd, "Embarcadero 32bitコンパイラー\0brc32.exe;rc.exe\0すべての実行ファイル\*.exe\0\0", TRUE)) {
		g_Brc32 = cp;
		SendItemMsg(IDC_BRCPATH, WM_SETTEXT, 0, (LPARAM)cp);
	}
	return TRUE;
}

bool SETUPDLG::OnAsmbtn() {

	char* cp;
	if(cp = cmndlg.GetFileName(m_hWnd, "アセンブラー\0*.exe\0\0", TRUE)) {
		g_Asm = cp;
		SendItemMsg(IDC_ASMPATH, WM_SETTEXT, 0, (LPARAM)cp);
	}
	return TRUE;
}

bool SETUPDLG::OnEditbtn() {

	char* cp;
	if(cp = cmndlg.GetFileName(m_hWnd, "エディター\0*.exe\0\0", TRUE)) {
		g_Edit = cp;
		SendItemMsg(IDC_EDITPATH, WM_SETTEXT, 0, (LPARAM)cp);
	}
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//HELPDLG
///////////////////////////////
bool HELPDLG::OnInit(WPARAM wParam, LPARAM lParam) {

	//☆エディットコントロールにreadme.txtファイルを読ませる
	CFILE File;
	CSTR ReadMe(g_OwnPath);
	ReadMe = ReadMe + "\\BCCMakerReadMe.txt";
	File.LoadFile(ReadMe.ToChar());
	SendItemMsg(IDC_EDIT, WM_SETTEXT, 0, (LPARAM)File.Read());
	return TRUE;
}

bool HELPDLG::OnSize(WPARAM wParam, LPARAM lParam) {

	MoveWindow(GetDlgItem(m_hWnd, IDC_EDIT), 10, 10, LOWORD(lParam) - 20, HIWORD(lParam) - 50, TRUE);
	RECT rect;
	GetWindowRect(GetDlgItem(m_hWnd, IDOK), &rect);
	MoveWindow(GetDlgItem(m_hWnd, IDOK), (LOWORD(lParam) - rect.right + rect.left) / 2, HIWORD(lParam) - 30, rect.right - rect.left, rect.bottom - rect.top, TRUE);
	return TRUE;
}

bool HELPDLG::OnIdok() {

	EndModal(TRUE);
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//VERSIONDLG
///////////////////////////////
bool VERSIONDLG::OnInit(WPARAM wParam, LPARAM lParam) {

	SendItemMsg(IDC_VERTXT, WM_SETTEXT,
				0, (LPARAM)"BCCMaker Ver 1.0C\r\nCopyright (c) 2002\r\nby ysama");
	return TRUE;
}

bool VERSIONDLG::OnIdok() {

	EndModal(TRUE);
	return TRUE;
}
