https://hyrule.tistory.com/111
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. (ex)
hyrule.tistory.com
지난 번에 창을 초기화하는 CreateWindowW() 함수에서 1280x720 사이즈로 창의 크기를 설정했었다.
근데, 이 방식에는 문제가 있다.

상단 타이틀바까지 합친 길이로 사이즈를 조정해놓는다는 것이다.
하지만 상단 타이틀바를 제외한 하단 클라이언트 창 영역만 1280x720로 잡는 것이 일반적이기 때문에,
CGameManager::Create() 함수에 대한 수정이 필요하다.
RECT rc = { 0, 0, 1280, 720 };
우선 RECT 구조체를 이용하여 창 크기를 지정해주어야 한다.
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
그냥 사각형의 왼쪽 위 좌표, 오른쪽 아래의 LONG타입의 좌표를 저장해 주는 단순한 구조체이다.
그릴때는 두 점 좌표를 이용하여 '직사각형'을 그린다.
AdjustWindowRect();
- WIN32API의 창 조절은 무조건 타이틀바를 포함한다.
- AdjustWindowRect() 함수를 사용하면
지정한 사각형의 크기만큼 '클라이언트 영역'을 잡기 위해서 필요한 창의 크기를 계산해서 리턴해준다.- 타이틀바 포함 창 사이즈를 얼마로 해야 클라이언트 영역이 원하는 값이 되는지 계산
- 인자는 3개 들어간다.
- 1번 인자는 RECT 구조체의 '주소'
- 2번 인자는 창의 종류 - 우리는 기존에 WS_OVERRAPPEDWINDOW를 사용하고 있었으므로 똑같이 입력해주면 된다.
- 3번 인자에는 드롭다운 메뉴를 사용하는지에 대한 bool 타입 변수를 입력한다.
- 우리는 메뉴를 사용하지 않는다.
- 해당 인자를 입력하면, 1번 인자에 입력한 RECT 구조체 변수의 주소에 사이즈 크기가 새로 저장된다.

** 주의: 조절된 값에는 음수가 들어올수도 있다. 계산할 때 주의.
MoveWindow()
- 정해놓은 크기로 윈도우 창의 크기를 변경해주는 함수이다.
- 인자는 6개 들어간다.
- 1번 인자는 현재 창의 HWND값
- 2번 인자와 3번 인자는 기준이 될 창의 좌측 상단 좌표
- 4번 인자는 가로 길이
- 5번 인자는 세로 길이
- 6번 인자는 다시 그릴것인지 여부
* 이번에는 글이 길지 않아 수정된 부분의 코드만 업로드
bool CGameManager::Create()
{
m_hWnd = CreateWindowW(TEXT("GameFramework"),
TEXT("GameFramework"), WS_OVERLAPPEDWINDOW,
100, 0, 0, 0, nullptr, nullptr, m_hInst, nullptr);
if (!m_hWnd)
{
return false;
}
// RECT : 사각형을 표현하기 위해서 지원하는 구조체이다.
// left, top, right, bottom 값으로 이루어져 있다.
// 윈도우 크기를 표현하는 Rect 구조체를 하나 만들어준다.
RECT rc = { 0, 0, 1280, 720 };
// 위에서 지정한 크기만큼 클라이언트 영역의 크기로 잡기 위해서
// 필요한 실제 윈도우의 크기를 얻어온다.
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
// 위에서 얻어온 크기로 윈도우 창의 크기를 변경한다.
MoveWindow(m_hWnd, 50, 50, rc.right - rc.left,
rc.bottom - rc.top, TRUE);
// 윈도우 창을 보여준다. 1번인자에 들어간 핸들의 윈도우 창을 보여줄지 말지를
// 결정해준다.
ShowWindow(m_hWnd, SW_SHOW);
// 이 함수를 호출하여 클라이언트 영역이 제대로 갱신되었다면 0이 아닌 값을 반환하고
// 갱신이 실패했을 경우 0을 반환한다.
UpdateWindow(m_hWnd);
return true;
}
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
05. PeekMessage 함수와 Run() 루프 (0) | 2022.05.15 |
---|---|
04. crtdbg 헤더를 통한 메모리 누수 잡기 (0) | 2022.05.15 |
*** 공부 방법 *** (0) | 2022.05.15 |
02. 프레임워크 기본 설정 및 간단한 구현 (0) | 2022.05.15 |
01. 프레임워크에 사용될 WINAPI32 기본 생성 코드 알아보기 (0) | 2022.05.15 |
https://hyrule.tistory.com/111
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. (ex)
hyrule.tistory.com
지난 번에 창을 초기화하는 CreateWindowW() 함수에서 1280x720 사이즈로 창의 크기를 설정했었다.
근데, 이 방식에는 문제가 있다.

상단 타이틀바까지 합친 길이로 사이즈를 조정해놓는다는 것이다.
하지만 상단 타이틀바를 제외한 하단 클라이언트 창 영역만 1280x720로 잡는 것이 일반적이기 때문에,
CGameManager::Create() 함수에 대한 수정이 필요하다.
RECT rc = { 0, 0, 1280, 720 };
우선 RECT 구조체를 이용하여 창 크기를 지정해주어야 한다.
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
그냥 사각형의 왼쪽 위 좌표, 오른쪽 아래의 LONG타입의 좌표를 저장해 주는 단순한 구조체이다.
그릴때는 두 점 좌표를 이용하여 '직사각형'을 그린다.
AdjustWindowRect();
- WIN32API의 창 조절은 무조건 타이틀바를 포함한다.
- AdjustWindowRect() 함수를 사용하면
지정한 사각형의 크기만큼 '클라이언트 영역'을 잡기 위해서 필요한 창의 크기를 계산해서 리턴해준다.- 타이틀바 포함 창 사이즈를 얼마로 해야 클라이언트 영역이 원하는 값이 되는지 계산
- 인자는 3개 들어간다.
- 1번 인자는 RECT 구조체의 '주소'
- 2번 인자는 창의 종류 - 우리는 기존에 WS_OVERRAPPEDWINDOW를 사용하고 있었으므로 똑같이 입력해주면 된다.
- 3번 인자에는 드롭다운 메뉴를 사용하는지에 대한 bool 타입 변수를 입력한다.
- 우리는 메뉴를 사용하지 않는다.
- 해당 인자를 입력하면, 1번 인자에 입력한 RECT 구조체 변수의 주소에 사이즈 크기가 새로 저장된다.

** 주의: 조절된 값에는 음수가 들어올수도 있다. 계산할 때 주의.
MoveWindow()
- 정해놓은 크기로 윈도우 창의 크기를 변경해주는 함수이다.
- 인자는 6개 들어간다.
- 1번 인자는 현재 창의 HWND값
- 2번 인자와 3번 인자는 기준이 될 창의 좌측 상단 좌표
- 4번 인자는 가로 길이
- 5번 인자는 세로 길이
- 6번 인자는 다시 그릴것인지 여부
* 이번에는 글이 길지 않아 수정된 부분의 코드만 업로드
bool CGameManager::Create()
{
m_hWnd = CreateWindowW(TEXT("GameFramework"),
TEXT("GameFramework"), WS_OVERLAPPEDWINDOW,
100, 0, 0, 0, nullptr, nullptr, m_hInst, nullptr);
if (!m_hWnd)
{
return false;
}
// RECT : 사각형을 표현하기 위해서 지원하는 구조체이다.
// left, top, right, bottom 값으로 이루어져 있다.
// 윈도우 크기를 표현하는 Rect 구조체를 하나 만들어준다.
RECT rc = { 0, 0, 1280, 720 };
// 위에서 지정한 크기만큼 클라이언트 영역의 크기로 잡기 위해서
// 필요한 실제 윈도우의 크기를 얻어온다.
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
// 위에서 얻어온 크기로 윈도우 창의 크기를 변경한다.
MoveWindow(m_hWnd, 50, 50, rc.right - rc.left,
rc.bottom - rc.top, TRUE);
// 윈도우 창을 보여준다. 1번인자에 들어간 핸들의 윈도우 창을 보여줄지 말지를
// 결정해준다.
ShowWindow(m_hWnd, SW_SHOW);
// 이 함수를 호출하여 클라이언트 영역이 제대로 갱신되었다면 0이 아닌 값을 반환하고
// 갱신이 실패했을 경우 0을 반환한다.
UpdateWindow(m_hWnd);
return true;
}
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
05. PeekMessage 함수와 Run() 루프 (0) | 2022.05.15 |
---|---|
04. crtdbg 헤더를 통한 메모리 누수 잡기 (0) | 2022.05.15 |
*** 공부 방법 *** (0) | 2022.05.15 |
02. 프레임워크 기본 설정 및 간단한 구현 (0) | 2022.05.15 |
01. 프레임워크에 사용될 WINAPI32 기본 생성 코드 알아보기 (0) | 2022.05.15 |