이 코드를 가지고 설명을 할 것이다!
일단 WINAPI를 만들 때는 타 언어 c언어 프로그램들이 main에서 시작하는 것과 비슷하게 WinMain에서 시작한다
main함수는 인수 사용 여부에 따라 인자가 달라지지만 WinMain은 아래와 같이 고정된다!
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow)
위 코드에서 APIENTRY는 함수 호출 규약을 __stdcall로 사용한다는 뜻인데 지금 상황에서는 그리 중요하지 않다!
만약 궁금하다면 구글에 검색해 찾아보는 것을 추천한다!
이제 WinMain의 인수에 대해 설명을 해보도록 하겠다
인수 | 의미 |
hInstance | 프로그램 인스턴스 '핸들' |
hPrevInstance | 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들. 없을 경우는 NULL이 되며 WIN32에서는 항상 NULL이다. 호환성을 위해서만 존재하는 인수이므로 신경쓰지 않아도 된다. |
lpCmdLine | 명령행으로 입력된 프로그램 인수이다. 도스의 argv인수에 해당한다. |
nCmdShow | 프로그램이 실행될 형태이며 최소화, 보통모양 등이 전달된다. |
일단 hlnstance는 프로그램 인스턴스 핸들이라고 하는데 말을 쉽게 바꿔서 프로그램을 구별해주는 핸들이라고 하겠다!
한 프로그램으로 여러 프로세스를 생성할 수 있다 하지만 같은 프로그램을 실행했으나 각각 다른 프로세스이기 때문에
컴퓨터는 프로세스를 구별하기 위해 핸들을 부여하는 것이다 프로세스가 시작할때 hlstance에 인자로 전달된다
두 번째는, 말 그대로 상관을 안써도 되니 바로 IpCmdline으로 넘어가 설명하도록 하겠다
IpCmdLine은 main의 char * argv[]와 비슷하다고 설명할 수 있다
그 전 강의에서 외우야하는 부분을 잘 외었다면 LPSTR은 char *를 typedef해 표현한다는 것을 알고 충분히 예측할 수 있
었을 것이라고 생각한다
위 예제 코드에서는 hLnstance를 전역변수 g_hInst에 저장해놓는다 위 코드에서는 따로 사용하지는 않지만 다음 강좌들
사용하게 될 때가 있을 것이다
이제 WndProc함수가 무엇인지 물어볼 수 있다
WinMain함수는 프로그램을 시작시키고 윈도창을 뛰어주기만 하고 메시지(입력)에 대한 처리는 하지 않고 이 일은
WinProc함수에서 처리한다 그렇기에 WinMain의 함수의 모양은 대부분 일정하지만, WndProc함수가 많이 변화한다
그렇기에 WINAPI프로그램을 분석할때 WinMain을 분석하기 보다는 WndProc함수를 분석하는 것을 추천하다
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
굳이 이름을 바꾸고 싶다면 바꿔도 되지만 바꾸지 않는 것을 추천한다
여기서 CALLBACK은 __stdcall을 의미한다
오늘은 여기에서 마치도록 하겠다
'WINapi' 카테고리의 다른 글
CreateWindow함수, ShowWindow함수 (0) | 2022.04.01 |
---|---|
윈도우 클래스 정리 (0) | 2022.04.01 |
Win32Api)UINT style 매크로 정리 (0) | 2022.04.01 |
WIN32 접두어 및 데이터형 일부 정리 (0) | 2022.03.30 |
오래된 코드들이 visual studio에서 실행이 안될때 (0) | 2022.03.30 |