본문 바로가기
C++/WinAPI

[WinAPI] Win32API 기본

by sihyeong 2022. 11. 13.

  • 매개변수의 자료형 앞에 _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