//////////////////////////////////////////
// LifeGameProc.h
// Copyright (c) 06/20/2020 by BCCSkelton
//////////////////////////////////////////

/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//ウィンドウメッセージ関数
/////////////////////////////////
bool CMyWnd::OnCreate(WPARAM wParam, LPARAM lParam) {

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

	//ステータスバー登録−Init(hWnd, hIinstance, ID, (以下省略可）Style)
	SBar.Init(m_hWnd, m_hInstance, STATUSBAR);
	//ステータスバー区画設定
	int sec[2] = {200, 400};
	SBar.SetSection(2, sec);
	//ステータスバー文字列設定
	SBar.SetText(0, "LifeGame Version 1.0");
	SBar.SetText(1, str.ToChar());

	//仮想ウィンドウの初期化
	cvs.SetCanvas(m_hWnd);
	cvs.BrSelection(1);		//塗潰し
	cvs.Color(15);			//白

	//外部ビットマップを読みこむ
	Flower.LoadBMP(m_hWnd, "IDI_FLOWER");

	return TRUE;
}

bool CMyWnd::OnTimer(WPARAM wParam, LPARAM lParam) {

	int Width = life.GetW();
	int Height = life.GetH();
	int* Cells = life.GetCells();
	cvs.Box(0, 0, Width * Unit, Height * Unit, 1);	//最後の1は塗り潰しブラシ
	for(int y = 0; y < Height; y++) {		// 高さ
		for(int x = 0; x < Width; x++) {	// 幅
			if(Cells[x + Width * y])
				cvs.PutBMP(Flower.Handle(), x * Unit, y * Unit, 0);	// 0 = PSET
		}
	}
	str = "第";
	str = str + Generation;
	str = str + "世代";
	SBar.SetText(1, str.ToChar());
	life.Eval();		//世界評価
	life.Transition();	//世代交代
	Generation++;
	return TRUE;
}

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

	SBar.AutoSize();
	SendMsg(WM_PAINT, 0, 0);
	return TRUE;
}

bool CMyWnd::OnPaint(WPARAM wParam, LPARAM lParam) {

	PAINTSTRUCT paint;
	cvs.OnPaint(BeginPaint(m_hWnd, &paint));
	EndPaint(m_hWnd, &paint);
	return TRUE;
}

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

	if(MessageBox(m_hWnd, "終了しますか", "終了確認",
					MB_YESNO | MB_ICONINFORMATION) == IDYES) {
		//処理をするとDestroyWindow、PostQuitMessageが呼ばれる
		if(Timer_On)	KillTimer(m_hWnd, ID_TIMER);
		return TRUE;
	}
	else
		//そうでなければウィンドウではDefWindowProc関数をreturn、ダイアログではreturn FALSEとなる。
		return FALSE;
}

/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//メニュー項目、コントロール関数
/////////////////////////////////
bool CMyWnd::OnBegin() {

	if(!Timer_On) {
		if(!SetTimer(m_hWnd, ID_TIMER, 50, NULL)) {
				MessageBox(m_hWnd, "タイマー設定に失敗しました", "Error", MB_OK | MB_ICONERROR);
				return FALSE;
		}
		else	Timer_On = TRUE;
	}
	else {
		MessageBox(m_hWnd, "タイマーは既にオンです", "警告", MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}
	return TRUE;
}

bool CMyWnd::OnStop() {

	KillTimer(m_hWnd, ID_TIMER);
	Timer_On = FALSE;
	return TRUE;
}

bool CMyWnd::OnExit() {

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

bool CMyWnd::OnVersion() {

	MessageBox(m_hWnd, "LifeGame Ver1.0\nCopyright by YSAMA", "Version", MB_OK | MB_ICONINFORMATION);
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
