본문 바로가기

C++ 2D

1. C++ Window.h

#include <Windows.h>

1.인스턴스(메모리 상에 할당되어 실행중인 프로그램)
HINSTANCE _hInstance;

2.윈도우 핸들
HWND _hWnd;

3.클래스 이름
LPCTSTR _lpszClass = TEXT("나태함이 느껴진다");

4.함수의 프로토 타입 선언
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

5.메인함수
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpszCmdParam, int cmdShow)
{
	_hInstance = hInstance;

	6.윈도우 메세지 구조체
	MSG message;

	7.윈도우 클래스 구조체
	WNDCLASS wndClass;

	wndClass.cbClsExtra = 0;				8.클래스 여분 메모리
	wndClass.cbWndExtra = 0;				9.윈도우 여분 메모리
	wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);			10.윈도우 바탕색
	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);					11.윈도우 커서모양
	wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);				12.아이콘 모양
	wndClass.hInstance = hInstance;							13.인스턴스 부여
	wndClass.lpfnWndProc = (WNDPROC)WndProc;					14.프로시저 설정
	wndClass.lpszClassName = _lpszClass;						15.클래스 이름
	wndClass.lpszMenuName = NULL;							16. 메뉴 이름
	wndClass.style = CS_HREDRAW | CS_VREDRAW;					17.클래스 스타일

	//윈도우를 위에 설정한 정보를 토대로 등록해준다
	RegisterClass(&wndClass);

	_hWnd = CreateWindow(
		_lpszClass,		16.클래스 이름
		_lpszClass,		17.윈도우 이름
		WS_OVERLAPPEDWINDOW,	18.윈도우 창 모양
		50,			19.시작좌표 X (left)
		50,			20.시작좌표 Y (top)
		800,			21.윈도우 창 가로크기
		600,			22.윈도우 창 세로크기
		NULL,			23.부모 윈도우의 핸들
		(HMENU)NULL,		24.메뉴 또는 자식 윈도우의 핸들
		hInstance,		25.에플리케이션 인스턴스 핸들
		NULL);			26.윈도우 생성 데이터의 주소

	23.실제로 윈도우 창을 우리 눈에 보이게 해주는 함수
	ShowWindow(_hWnd, cmdShow);

	24.GetMessage vs PeekMessage
	25.겟메세지는 윈도우에서 처리해달라는 메세지가 넘어올때 동작하고
	26.픽메세지는 메세지가 있든 없든 계속해서 동작하고 있다.

	while (GetMessage(&message, 0, 0, 0))	27.큐로부터 메시지를 받아와 메시지를 윈도우 프로시저로 보냄
	{
         TranslateMessage(&message);		28.키보드 입력 메시지를 프로그램에서 쉽게 사용가능하게 해줌
		DispatchMessage(&message);	29.큐에서 꺼낸 메시지를 메시지 처리함수로 보냄
	}

	return message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{	

	PAINTSTRUCT 	ps;	30. < -- PAINTSTRUCT 찾아보기
	HDC		hdc;	31. 핸들러 디바이스 컨텍스트, DC를 사용하게 해주는 도구
				31-1. DC => 디바이스 컨텍스트, 출력을 위한 데이터를 가지는 구조체
	switch (iMessage)
	{
		case WM_PAINT: 				32. 출력 메시지가 온 경우
		{ 
			hdc = BeginPaint(hWnd, &ps);	30.화면에 대한 DC(디바이스 콘텍스트) 획득
			
			EndPaint(hWnd, &ps); 		33. BeginPaint로 획득한 DC 해제
		}
		break;

		case WM_DESTROY: 			34. 프로그램 종료 메시지가 온 경우
			PostQuitMessage(0);
		return 0;
	}

	return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}

35. 좌표는 10시방향 모서리 ,TL(top letf) 방향이 좌표 0,0
36. 오른쪽으로 갈수록 x++ 아래로 내려갈수록 y++

 

'C++ 2D' 카테고리의 다른 글

7. 시간과 입력  (0) 2021.05.31
6. 싱글 톤 패턴  (0) 2021.05.31
5. 마우스  (0) 2021.05.28
3.Rect, WM, VK, InvalidateRect(,,)  (0) 2021.05.26
2. 텍스트 및 도형 출력  (0) 2021.05.26