示例#1
0
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int cmdShow)
{
	MSG message;
	WNDCLASS wndClass;

	_hInstance = hInstance;

	wndClass.cbClsExtra = 0;									// 클래스 여분 메모리
	wndClass.cbWndExtra = 0;									// 윈도우 여분 메모리
	wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);	// 백그라운드
	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);			// 커서 모양
	wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);		// 상위 창 아이콘 모양
	wndClass.hInstance = hInstance;							// 윈도우 인스턴스
	wndClass.lpfnWndProc = (WNDPROC)WndProc;						// (*중요)프로시저 함수(메세지 처리함수) - 키보드 입력등에 호출되는 함수
	wndClass.lpszClassName = WIN_NAME;					// 클래스 명(화면 창 이름)
	wndClass.lpszMenuName = NULL;									// 메뉴명
	wndClass.style = CS_HREDRAW | CS_VREDRAW;				// 윈도우 창 상단오른쪽 버튼 스타일

	RegisterClass(&wndClass);

	_hWnd = CreateWindow(
		WIN_NAME,		// 윈도우 클래스 이름
		WIN_NAME,		// 윈도우 타이틀바의 이름
		WIN_STYLE,		// 윈도우 스타일
		WIN_START_X,	// 윈도우 화면 좌표 x(좌우) - 픽셀 단위
		WIN_START_Y,	// 윈도우 화면 좌표 y(상하) - 픽셀 단위
		WIN_SIZE_X,		// 윈도우 화면 크기 width(폭)
		WIN_SIZE_Y,		// 윈도우 화면 크기 height(높이)
		NULL,			// 부모 윈도우 인스턴스
		(HMENU)NULL,	// 메뉴 핸들
		hInstance,		// 인스턴스 윈도우 지정
		NULL			// mdi 클라이언트 윈도우 및 자식 윈도우를 생성하면 지정해 주고, 사용하지 않으면 NULL
		);

	_option.setStart(WIN_START_X, WIN_START_Y);
	_option.setScreenSize(WIN_SIZE_X, WIN_SIZE_Y);

	ShowWindow(_hWnd, cmdShow);

	if (FAILED(_gameStudy.initialize()))
	{
		//초기화 실패시 종료
		return 0;
	}

	//게임용	
	while (true)
	{
		if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
		{
			if (message.message == WM_QUIT)
			{
				break;
			}
			TranslateMessage(&message);
			DispatchMessage(&message);
		}
		else
		{
			TIMEMANAGER->update(MAX_GAME_FPS);
			_gameStudy.update();
			_gameStudy.render();
		}
	}

	_gameStudy.release();

	UnregisterClass(WIN_NAME, _hInstance);

	return message.wParam;
}