헤더파일
윈도우즈에서는 하나의 헤더 파일에 모든 API 함수들의 원형과 사용하는 상수들이 죄다 정의되어 있기 때문에
windows.h만 포함하면 된다. 물론 특별한 경우에는 해당하는 헤더파일을 포함해야 하지만 일반적으로는 window.h만 포함
하면 거의 충분하다.
시작점
다음으로 윈도우즈 프로그램의 시작점은 main이 아닌 WinMain이며 모든 윈도우즈 프로그램은 WinMain에서부터 실행
을 시작한다.
원형은 다음과 같다.
1 | int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) | cs |
WinMain의 원형은 위와 같이 고정되어 있고, APIENTRY 지정자는 윈도우즈의 표준 호출 규약인 _stdcall을 사용한다는 뜻
인데 일단은 없다고 생각해도 무방하다.
4개의 인수를 취하는데 각 인수의 의미는 다음과 같다.
hInstance : 프로그램의 인스턴스 핸들이다.
hPrevInstance : 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들이다. 없을 경우 NULL이 되며 Win32에서는 항상 NULL
이다. 16비트와 호환성을 위해서만 존재하는 인수이므로 신경쓰지 않아도 된다.
IpszCmdParam : 명령행으로 입력된 프로그램 인수이다. 도스의 argv인수에 해당하며 보통 실행 직후에 열 파일의 경로가
전달된다.
nCmdShow : 프로그램이 실행될 형태이며 최소화, 보통 모양 등이 전달된다.
가장 많이 사용되는 것은 hInstance로 인스턴스(Instance)라는 말은 실행중인 프로그램 하나를 칭하는 용어이다.
여러 프로그램이 실행되고 있을 때 각각의 프로그램은 서로 다른 인스턴스 핸들을 가지며 운영체제는 이 인스턴스 핸들 값
으로 프로그램을 구별한다.
메시지 처리 함수
프로그램에서 중요한 함수 두 개가 있는데 그 중 하나는 프로그램의 시작점인 WinMain이며 나머지 하나는 WndProc이
다. WinMain은 메인 윈도우를 만들고 화면에 윈도우를 표시하기만 할 뿐이지만 WndProc은 프로그램의 실질적이고도
고유한 처리를 하는 곳이므로 특히 주의 깊게 봐야한다.
WndProc 함수의 원형은 다음과 같다.
1 | LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); | cs |
함수 원형에 CALLBACK이라는 매크로가 사용되었는데 이 매크로도 APIENTRY와 마찬가지로 _stdcall로 정의되어 있다.
이런 매크로들은 그 자체로 어떤의미를 가진다기보다는 호환성과 이식성을 위해 존재하는 것들이므로 일단은 크게 신경
쓰지 않아도 상관없다.
'Windows API' 카테고리의 다른 글
[API] Window Class란? (2) | 2017.03.11 |
---|