WIN32API FrameWork/코드별 설명 개별저장(검색용)

WIN32API FrameWork/코드별 설명 개별저장(검색용)

WIN32API - DeltaTime을 활용하여 일정한 속도로 사각형 움직이기

//RECT 구조체는 Long(=정수) 타입을 저장하므로 소수점 연산이 안 된다. //위아래로 움직일 것이므로 Top, Bottom 부분만 Float 타입으로 만들어서 //프레임이 달라져도 속도가 일정하게 만들어 보자. static int m_Dir = 1; static RECT m_Rect = { 800, 100, 900, 200 }; static float Top = (float)m_Rect.top; static float Bottom = (float)m_Rect.bottom; Rectangle(m_hDC, m_Rect.left, Top, m_Rect.right, Bottom); Top += m_Dir * 500 * DeltaTime; Bottom += m_Dir * 500 * DeltaTime; i..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

WIN32API - HDC를 이용한 그리기 함수들

/* * TextOutA: 멀티바이트 문자열(char 문자열)을 출력하는 함수이다. * TextOutW: 유니코드 문자열(wchar_t 문자열)을 출력하는함수이다. * TextOut: 현재 프로젝트의 설정에 따라 두 함수 중에서 자동 선택해주는 함수이다. #ifdef UNICODE #define TextOut TextOutW #else #define TextOut TextOutA */ TextOut(m_hDC, 50, 50, TEXT("텍스트 출력"), lstrlen(TEXT("텍스트 출력"))); // //가운데가 흰색으로 칠해져있고, 테두리가 검은색인 사각형을 그린다. Rectangle(m_hDC, 100, 100, 200, 200); //원 출력 //지정한 사이즈..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

LARGE_INTEGER , 공용체(Union)

* LARGE_INTEGER: 공용체(union) - 공용체는 메모리 공간을 공유하는 메모리 타입이다. * 32비트 기준 - DWORD LowPart = Unsigned int (4byte) - LONG HighPart= int(4byte) - 둘이 합친 공간인 8byte는 - LONGLONG Quadpart와 공유된다. typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; } DUMMYSTRUCTNAME; struct { DWORD LowPart; LONG HighPart; } u; LONGLONG QuadPart; } LARGE_INTEGER;

WIN32API FrameWork/코드별 설명 개별저장(검색용)

윈도우 핸들( HINSTANCE , HWND , HDC )

* 일종의 번호로 되어 있음. - 이 번호들은 커널 오브젝트에 속함. * 커널: 운영체제가 사용하는 특수한 영역 및 핵심 부분. 사용자는 컨트롤 불가능 * 커널 오브젝트: 커널에 있는 메모리 - 커널에 값을 넣어 놓음 * 핸들은 각자 자신이 부여받은 번호에 속한 오브젝트들을 컨트롤하는 역할을 한다. ex) HWND(윈도우 핸들): 윈도우 창을 컨트롤하기 위한 용도 HDC: WIN32에서 제공하는 그리기 도구. 윈도우 창의 클라이언트와 연결 됨. HINSTANCEm_hInst; HWNDm_hWnd; HDCm_DC;​

WIN32API FrameWork/코드별 설명 개별저장(검색용)

static LRESULT WndProc , static m_Loop

* m_Loop 루프 지속 여부를 확인할 변수 - static 변수로 선언한 이유 static 함수는 static 변수만 처리 가능하다. 계속 루프를 할 지 여부는 메시지를 통해 결정해야 한다. 메시지 루프 처리는 WinProc 함수에서 진행한다. WinProc는 static 함수이다 -> 일반 선언 변수는 처리가 불가능하고 static 변수만 처리 가능하기 때문에 아래 변수를 static으로 선언한 것 static boolm_Loop; static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { //WIN32API 기본 코드에서 가져온 내용 // //message 큐로부터 받은 message에 따라 어떤 ..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

UpdateWindow

이 함수를 호출하여 클라이언트 영역이 제대로 갱신되었다면 0이 아닌 값을 반환하고 갱신이 실패했을 경우 0을 반환한다. UpdateWindow(m_hWnd);

WIN32API FrameWork/코드별 설명 개별저장(검색용)

ShowWindow

윈도우 창을 보여준다. 1번인자에 들어간 핸들의 윈도우 창을 보여줄지 말지를 결정해준다. 2번인자: 기본값인 nCmdShow 대신 SW_SHOW(창을 보여준다), SW_HIDE(창울 숨긴다 - 백그라운드)를 넣어줄 수도 있다. cf)SW_HIDE 외에도 왼도우 서비스를 통해 창을 표시하지 않을 수도 있다. ShowWindow(m_hWnd, SW_SHOW);

WIN32API FrameWork/코드별 설명 개별저장(검색용)

RECT 구조체 , AdjustWindowRect , MoveWindow

사각형을 표현하기 위해서 지원하는 구조체이다. left, top, right, bottom 값으로 이루어져 있다. left와 top = 사각형의 좌측 상단 좌표 right와 bottom = 사각형의 우측 하단 좌표 두 점을 통해 직사각형을 그린다. 윈도우 크기를 표현하는 Rect 구조체를 하나 만들어준다. RECT rc = { 0, 0, 1280, 720 }; 위에서 지정한 크기만큼 클라이언트 영역의 크기로 잡기 위해서 필요한 실제 윈도우의 크기를 얻어온다. * 1번 인자: 원하는 창의 크기가 저장된 주소(RECT 구조체) * 2번 인자: 조절할 창의 기본 형태가 무엇인지 전달 * 3번 인자: 메뉴바 있는지 여부 전달 * 해당 인자들을 전달해 주면, ..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

hWnd = CreateWindowW

* 1번 인자는 윈도우 클래스에 등록할 이름이다. * 2번 인자는 타이틀바에 표시할 이름이다. - 1, 2번 인자의 기본값인 szWIndowClass와 szTitle 대신 그냥 문자열을 넣어 생성해줄수도 있다. * 3번 인자는 이 윈도우 창이 어떻게 생성될지를 결정하는 선택 인자이다. - 현재 인자를 WS_OVERLAPPEDWINDOW의 정의로 타고 들어가보면 여러가지 옵션 조합되어 있는 것을 알 수 있다. * 4, 5번 인자는 윈도우 창이 생설될 화면에서의 위치를 지정한다. 픽셀로 지정한다. - 예를 들어 1920, 1080 해상도라면 거기에서 원하는 값을 넣어주면 해당 위치에 나오게 된다. - 4번은 가로좌표, 5번은 세로좌표. * 6번, 7번 인자는 윈도우창의 가로, 세로의 크기를 지정한다. 픽셀단..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

WNDCLASSEXW wcex (윈도우 클래스 구조체 등록 과정)

* 검색되게 하기 위해 일반 형식에 저장 //레지스터에 등록할 윈도우 클래스 구조체를 만들어준다. WNDCLASSEXW wcex; //wcex의 사이즈를 저장. 존재이유는 잘 모름. wcex.cbSize = sizeof(WNDCLASSEX); //▼ 아래에 윈도우가 어떤 형태의 윈도우를 생성할지를 설정할 수 있다. wcex.style = CS_HREDRAW | CS_VREDRAW; //CS_HREDRAW: Horizontal Redraw | CS_VREDRAW Vertical Redraw //가로세로 영역 크기가 바뀌었을 때 클라이언트 영역을 전부 다시 그려주는 기능 //WndProc(Window Procedure) 전역함수 -> 함수 포인터 //이벤트 -> 메시지 -> 메시지 큐 -> 메시지를 인자로 ..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

TranslateMessage(&msg), DispatchMessage(&msg)

* TranslateMessage - DispatchMessage: 일종의 한 세트 메시지큐에서 꺼내온 메시지를 TranslateMessage 함수로 넘겨주면 문자 키인지 F1, 방향키 같은 키인지를 판단해준다. 이러한 키들은 WM_KEYDOWN으로 메시지가 인식이 되고 문자 키는 WM_CHAR로 인식이 된다. 키를 누르면 문자키의 경우 WM_CHAR도 만들어져야 하기 떄문에 여기에서 WM_KEYDOWN이 일어나면 문자키의 경우 WM_CHAR메시지를 추가로 만들어서 메시지 큐에 넣어준다. 이 함수가 없을 경우 문자 키를 눌렀을 때 WM_CHAR가 발생하지 않으므로 반드시 써 줘야 한다. TranslateMessage(&msg); * DispatchMessage: DispatchMessage 함수는 메시지..

WIN32API FrameWork/코드별 설명 개별저장(검색용)

GetMessage , PeekMessage

* GetMessage: 메시지 큐에서 메시지를 꺼내오는 함수이다. 단, 메시지 큐가 비어있을 경우 메시지가 들어올 때까지 빠져나올 수 없다. 이렇게 멈춰서 대기하고 있는 것을 블로킹 모드라고 한다. 큐가 비어서 멈춰있는 시간을 윈도우 데드타임이라고 한다. 게임의 경우에는 잘 쓰이지 않는다. 사람이 아무리 키보드 마우스로 입력을 많이 해 봐야 컴퓨터가 처리하는 데에는 찰나의 시간밖에 안 걸리기 때문에, 데드타임이 매우 길기 때문이다. 일반 프로그램이 데드타임에 입력이 들어오기만을 기다린다면, 게임은 이 데드타임에 게임의 로직을 처리한다. 그렇기에 게임의 경우에는 PeekMessage라는 함수를 사용한다. 메시지 큐에서 메시지를 꺼낸 뒤의 데드타임동안 프레임을 그리는 것이다. MSG: 운영체제가 만들어준 ..

hyrule
'WIN32API FrameWork/코드별 설명 개별저장(검색용)' 카테고리의 글 목록