WinMain

원형

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow)

MFC 원형

해당하는 함수 없음. MFC 라이브러리 내부에 숨겨져 있다.

인수

▶hInstance : 프로그램의 인스턴스 핸들이 전달된다. 이 핸들은 이후 프로그램 자체를 칭할 때 사용되므로 보통 전역 변수에 따로 저장해 놓는다.

▶hPrevInstance : 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들. 없을 경우는 NULL이 되며 Win32에서는 항상 NULL이다. 호환성을 위해서만 존재하며 Win32에서는 의미가 없다.

▶lpszCmdParam : 명령행으로 입력된 프로그램 인수이다.

▶nCmdShow : 프로그램이 실행될 형태이며 최소화, 보통 모양 등이 전달된다.

리턴

WM_QUIT 메시지를 받았을 때 이 메시지의 wParam을 리턴해야 한다. 이 리턴값은 프로그램을 종료할 때 PostQuitMessage 함수의 인수와 같은 값이며 이 프로그램을 실행한 부모 프로세스로 전달되며 보통의 경우 무시된다. 프로그램 자체의 에러 코드를 점검할 때는 이 리턴값을 사용할 수도 있다.

설명

모든 윈도우즈 프로그램의 시작점(Entry Point)이 되는 함수이며 모든 프로그램은 이 함수로부터 시작된다. 운영체제는 프로세스를 실행할 때 프로세스의 실행 환경을 만든 후 이 함수를 호출해 주는데 이 때 운영체제가 할당한 인스턴스의 핸들과 사용자가 지정한 프로그램 인수, 쉘 프로그램이 지정한 초기화 형태가 전달된다. 응용 프로그램이 이 함수에서 윈도우 클래스 등록, 메인 윈도우 생성, 메시지 루프 등의 작업을 해야 한다. 이 함수에서 직접 프로그램의 코드를 작성하는 경우는 드물며 정해진 순서대로 초기화 작업을 하는 것이 보통이다. 다음은 전형적인 WinMain 함수의 예이다.

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
	  ,LPSTR lpszCmdParam,int nCmdShow)
{
	HWND hWnd;
	MSG Message;
	WNDCLASS WndClass;
	g_hInst=hInstance;
	
	WndClass.cbClsExtra=0;
	WndClass.cbWndExtra=0;
	WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
	WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	WndClass.hInstance=hInstance;
	WndClass.lpfnWndProc=(WNDPROC)WndProc;
	WndClass.lpszClassName=lpszClass;
	WndClass.lpszMenuName=NULL;
	WndClass.style=CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&WndClass);

	hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
		NULL,(HMENU)NULL,hInstance,NULL);
	ShowWindow(hWnd,nCmdShow);
	hWndMain=hWnd;
	
	while(GetMessage(&Message,0,0,0)) {
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	return Message.wParam;
}

윈도우 클래스 등록, 메인 윈도우 생성, 메시지 루프 실행 등의 코드가 포함되어 있다. 초기화 코드와 메시지 루프만 있을 뿐이며 응용 프로그램의 고유한 코드는 보통 메인 윈도우의 윈도우 프로시저에 작성한다.

참고함수

WndProc : 윈도우로 전달되는 메시지를 처리하는 윈도우 프로시저 함수

플랫폼

95이상

참조

WinMain의 초기 코드에 대한 분석은 2장을 참고한다.


written by http://www.winapi.co.kr