#include <windows.h>

#define APP_NAME TEXT("Sample_MainWindow")
#define BACK_BMPFILE TEXT("back.bmp")
#define FORE_BMPFILE TEXT("sato.bmp")
#define MASK_BMPFILE TEXT("sato_mask.bmp")

LRESULT CALLBACK WindowProc (
	HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
) {
	HDC hdc;
	PAINTSTRUCT ps;
	POINT pt;
	static HINSTANCE hInstance;
	static HDC hMemDC;
	static HBITMAP hForeBmp , hMaskBmp , hBackBmp;
	static BITMAP bmpFore , bmpBack;
	

	switch(uMsg) {
	case WM_DESTROY:
		DeleteDC(hMemDC);
		DeleteObject(hForeBmp);
		DeleteObject(hMaskBmp);
		DeleteObject(hBackBmp);

		PostQuitMessage(0);
		return 0;
	case WM_CREATE:
		hInstance = (HINSTANCE)GetWindowLong(hWnd , GWL_HINSTANCE);
		hMemDC = CreateCompatibleDC(NULL);
		hForeBmp = LoadImage(
			hInstance , FORE_BMPFILE , IMAGE_BITMAP ,
			0 , 0 , LR_LOADFROMFILE
		);
		hMaskBmp = LoadImage(
			hInstance , MASK_BMPFILE , IMAGE_BITMAP ,
			0 , 0 , LR_LOADFROMFILE
		);
		hBackBmp = LoadImage(
			hInstance , BACK_BMPFILE , IMAGE_BITMAP ,
			0 , 0 , LR_LOADFROMFILE
		);
		GetObject(hForeBmp , sizeof(BITMAP) , &bmpFore);
		GetObject(hBackBmp , sizeof(BITMAP) , &bmpBack);
	case WM_KEYUP:
		if (wParam == VK_ESCAPE)
			SendMessage(hWnd , WM_CLOSE , 0 , 0);
		return 0;
	case WM_NCHITTEST:
		
		return HTCAPTION;
	case WM_PAINT:
		hdc = BeginPaint(hWnd , &ps);
		//MessageBox(NULL,"uho","yaranaika",MB_OK);
		/*背景を転送*/
		//SelectObject(hMemDC , hBackBmp);
		//BitBlt(
		//	hdc , 0 , 0 , bmpBack.bmWidth , bmpBack.bmHeight ,
		//	hMemDC , 0 , 0 , SRCCOPY
		//);

		/*マスク画像を論理和で転送*/
		SelectObject(hMemDC , hMaskBmp);
		pt.x = bmpBack.bmWidth / 2 - bmpFore.bmWidth / 2;
		pt.y = bmpBack.bmHeight - bmpFore.bmHeight;
		BitBlt(
			hdc , pt.x , pt.y , bmpFore.bmWidth , bmpFore.bmHeight ,
			hMemDC , 0 , 0 , SRCPAINT
		);

		/*キャラクター画像を論理積で転送*/
		SelectObject(hMemDC , hForeBmp);
		BitBlt(
			hdc , pt.x , pt.y , bmpFore.bmWidth , bmpFore.bmHeight ,
			hMemDC , 0 , 0 , SRCAND
		);

		EndPaint(hWnd , &ps);
		return 0;

	}
	return DefWindowProc(hWnd , uMsg , wParam , lParam);
}

int WINAPI WinMain(
	HINSTANCE hInstance, HINSTANCE hPrevInstance,
	PSTR lpCmdLine, int nCmdShow
) {
	WNDCLASS wc;
	MSG msg;

	// ウィンドウクラスの登録
	wc.style		= CS_HREDRAW | CS_VREDRAW;			// スタイル
	wc.lpfnWndProc	= WindowProc;						// ウィンドウプロシージャ
	wc.cbClsExtra	= 0;								// 補助メモリ
	wc.cbWndExtra	= 0;								// 補助メモリ
	wc.hInstance	= hInstance;						// インスタンスハンドル
	wc.hIcon		= LoadIcon(NULL , IDI_APPLICATION);	// アイコン
	wc.hCursor	= LoadCursor(NULL , IDC_ARROW);			// カーソル
	wc.hbrBackground	= GetStockObject(NULL_BRUSH);	// 背景ブラシ
	wc.lpszMenuName	= NULL;								// メニュー名
	wc.lpszClassName	= APP_NAME;						// クラス名

	if (!RegisterClass(&wc)) return 0;


	// ウィンドウの作成
	if (CreateWindow(
		APP_NAME , TEXT("里美時計〜C版") ,//APP_NAME,タイトル名
		WS_POPUP | WS_VISIBLE ,		// 窓の種類。WS_VISIBLEが見える窓。WS_POPUPはポップアップウィンドウ、即ち枠なし。標準窓はWS_OVERLAPPEDWINDOW
		30,30,150,275,				// X座標、Y座標、width、height
		NULL , NULL , hInstance , NULL
	) == NULL) return 0;


	

	while(GetMessage(&msg , NULL , 0 , 0) > 0) {
		DispatchMessage(&msg);
	}
	return msg.wParam;
}