- 매개변수의 자료형 앞에 _In_, _In_opt_, _In_ 같은건 SAL 주석이다.
SAL주석
- SAL 주석을 사용하면 함수를 사용하는 개발자가 함수를 사용하는 방법을
더 잘 이해할 수 있도록 함수를 더 자세히 설명할 수 있습니다.
- 함수의 속성 및 구현에 대한 명확성을 제공
wWinMain 매개변수
_IN_ HINSTANCE hInstance
- 가상 메모리 안 실행 된 프로세스의 시작 주소
_IN_opt_ HINSTANCE hPrevInstance
- 가상 메모리 사용 이전에 사용한 것으로 현재는 가상 메모리를 사용하기 때문에 거의 사용하지 않는다.
- 과거엔 프로세스의 실행 주소를 사용하여 관리할 필요가 있었기에 사용했었던 것
_IN_ LPWSTR lpCmdLine
- 명령프롬프트로 실행 시 문자열을 주면 lpCmdLine 매개변수로 받아올 수 있음
UNREFERENCED_PARAMETERS( )
- 참조하지않는 파라미터 라는 것을 명시적으로 알려 주기 위해 사용한 매크로일 뿐
- 아무 동작도 하지 않으니 삭제해도 무방함
LoadStringW()
- szTitle 변수에 IDS_APP_TITLE에 해당하는 문자열을 가져와서 넣는 기능
- IDS_APP_TITLE, IDS_WINOMOK은
- 헤더파일 -> Resource.h나 리소스뷰 -> String Table 들어가면 확인 및 수정이 가능하다.
- 말 그대로 앱 타이틀에 사용할 문자열을 가져온 다음 사용한다.
MyRegisterClass()
- 윈도우의 정보(형태)를 등록한다.
- 설정한 정보를 토대로 출력 윈도우 형태가 달라진다.
- 등록한 정보는 lpszClassName = szWindowClass; 을 통해 참조하여 사용함 (밑에 InitInstance()에서 사용한다)
- wcex.lpfnWndProc = WndProc;는 윈도우에서 발생한 메시지를 처리할 함수를 지정하는 부분이다.
- 자세한 건 msdn 참고
InitInstance()
- 윈도우 생성
- 생성한 윈도우 정보를 참조하는 szWindowClass를 사용하여 윈도우 생성
- 이전에 문자열을 등록해 뒀던 szTitle변수를 사용해 타이틀 이름 지정
- 윈도우 크기나 형태도 지정 가능
- ctrl + alt + delete와 같이 특정한 키 여러개를 눌러서 사용할 수 있는 단축키를 확인하는 부분
- 리소스뷰 -> Accelerator에 들어가서 단축키를 추가, 수정 할 수 있다.
- 단축키 눌렀을 때 특정 기능을 사용하는 것이 아니라면 삭제해도 무방하다.
- 가장 핵심적인 부분으로 메시지 받았으면 처리하는 부분이다.
- 해당 윈도우의 처리기에서 처리할 수 있도록 메시지를 주면서 호출하는 부분임
- 메시지가 발생하면 받아서 위의 MyRegisterClass()에서 등록했던 (wcex.lpfnWndProc = WndProc;) WndProc 함수에서 메시지를 받아 처리하게 된다.
- GetMessage()는 메시지큐에서 메시지 확인 될 때까지 대기한다.
- WM_QUIT 메시지가 발생하면 false가 반환되어 종료되고 그게 아니면 계속 true를 반환하여 루프된다.
- 메시지 반응형이라 메시지가 발생하지 않으면 아무것도 동작하지 않는다. -> 게임 동작엔 부적합
- 등록한 WndProc이다.
- 직접 처리하고자 하는 메시지는 따로 case WM_XXXX: 라고 적어서 추가하여 처리하면 된다.
- 처리하지 못하는 메시지는 default: 부분에 DefWindowProc(hWnd, message, wParam, lParam);에서 받아서 기본 메시지 처리를 진행한다.
'C++ > WinAPI' 카테고리의 다른 글
[WinAPI] DC, BITMAP, 더블버퍼링 (0) | 2022.11.15 |
---|---|
[WinAPI] 윈도우 크기 지정 (0) | 2022.11.15 |
[WinAPI] 그리기 (0) | 2022.11.13 |
[WinAPI] DeltaTime(델타타임) 구현 (0) | 2022.10.10 |
[WinAPI] 자동 생성 기본 구조 해석 (0) | 2022.10.10 |