//////////////////////////////////////////
// TestControlProc.h
// Copyright (c) 08/19/2002 by BCCSkelton
//////////////////////////////////////////
//WM_TIMERメッセージ処理用フラッグ（グローバル変数）
bool timerflag = TRUE;

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

	//☆PICTUREBOXの初期化
	PicBox.Init(m_hWnd, IDC_PICBOX);
	//☆黒の塗り潰しブラシで背景を黒にします
	PicBox.Color(0);
	PicBox.BrSelection(1);
	PicBox.Clear();
	//☆タイマー関係変数と初期化（SDK参照）
	static UINT uIDEvent = 1;
	UINT uElapse = 1;
	SetTimer(m_hWnd, uIDEvent, uElapse, NULL);

	return TRUE;
}

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

	if(!timerflag) return FALSE;
	//☆PICTUREBOXコントロールのClient領域サイズを取得
	RECT rect;
	GetClientRect(PicBox.GethWnd(), &rect);
	//☆クライアント領域内でランダムな２点を取得
	int x1, y1, x2, y2;
	x1 = random(rect.right);
	y1 = random(rect.bottom);
	x2 = random(rect.right);
	y2 = random(rect.bottom);
	//☆色もランダムに
	PicBox.Color(random(16));
	//☆乱数を使って図形を選定します・ブラシもランダムです
	switch(random(3)) {
		case 0:
			PicBox.Line(x1, y1, x2, y2);
			break;
		case 1:
			PicBox.Box(x1, y1, x2, y2, random(7));
			break;
		case 2:
			PicBox.Ellipsed(x1, y1, x2, y2, random(7));
			break;
	}
	return TRUE;
}

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

	//☆PICTUREBOX内ののマウス情報はWM_NOTIFYを使い、
	//☆１）nmhdr.hwndFromはウィンドウハンドル
	//☆２）nmhdr.codeでマウスメッセージを受け、
	//☆３）wParamはマウス座標を送り
	//☆４）マウス情報(wParam)はnmhdr.idFromで送る
	NMHDR* lpnmhdr = (NMHDR*)lParam;
	PicBox.Color(random(15) + 1);
	if(lpnmhdr->code == WM_LBUTTONDOWN) {
		PicBox.Circle(LOWORD(wParam), HIWORD(wParam), 20);
	}
	else if(lpnmhdr->code == WM_RBUTTONDOWN) {
		PicBox.Box(LOWORD(wParam) - 20, HIWORD(wParam) - 20,
					LOWORD(wParam) + 20, HIWORD(wParam) + 20);
	}
	else if(lpnmhdr->code == WM_MOUSEMOVE) {
		PicBox.Dot(LOWORD(wParam), HIWORD(wParam));
	}
	return TRUE;
}

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

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

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

	PostQuitMessage(0);
	return TRUE;
}

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

	//☆黒の塗り潰しブラシで背景を黒にします
	PicBox.Color(random(16));
	PicBox.BrSelection(1);
	PicBox.Clear();
	return TRUE;
}

bool CMyWnd::OnIdok() {

	SendMessage(m_hWnd, WM_CLOSE, 0, 0);
	return TRUE;
}

bool CMyWnd::OnGrid() {

	//☆グリッドボタンを押すとランダムな色でグリッドを描画します
	RECT rect;
	GetClientRect(PicBox.GethWnd(), &rect);
	PicBox.Color(random(16));
	for(int i = rect.left; i < rect.right; i += 10) {
		PicBox.Line(i, rect.top, i, rect.bottom);
	}
	for(int i = rect.top; i < rect.bottom; i += 10) {
		PicBox.Line(rect.left, i, rect.right, i);
	}
	return TRUE;
}

bool CMyWnd::OnCircle() {

	//☆同心円ボタンを押すとランダムな色で同心円を描画します
	RECT rect;
	GetClientRect(PicBox.GethWnd(), &rect);
	for(int i = rect.top; i < rect.bottom / 2; i += 10) {
		PicBox.Color(random(16));
		PicBox.Circle(rect.right / 2, rect.bottom / 2, i);
	}
	return TRUE;
}

bool CMyWnd::OnClear() {

	//☆クリアーを押すとタイマー処理を一旦中止します・再開を押して再開します
	timerflag = !timerflag;
	if(timerflag)
		SendDlgItemMessage(m_hWnd, IDC_CLEAR, WM_SETTEXT, 0, (LPARAM)"クリア");
	else
		SendDlgItemMessage(m_hWnd, IDC_CLEAR, WM_SETTEXT, 0, (LPARAM)"再開");
	//☆黒の塗り潰しブラシで背景を黒にします
	PicBox.Color(0);
	PicBox.BrSelection(1);
	PicBox.Clear();
	return TRUE;
}

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