Notice
Recent Posts
관리 메뉴

Hacking Arts

WinMain - 2.윈도우 객체 생성하기 본문

Programing/API Programing

WinMain - 2.윈도우 객체 생성하기

Rakehell 2014. 9. 19. 20:46

-클래스를 생성했다고 윈도우가 만들어지는 것이 아니다. 두번째 단계인 윈도우 객체를 생성해야된다.

생성에 이용하는 함수는 CreateWindow라는 함수이다.

LPWSTR lpszClass = L"ApiBase";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
	HWND hWnd;
	MSG Message;

	WNDCLASS WndClass;

	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);

}
-CreateWindow()

[그림 1 MSDN에 정의 되어 있는 함수 원형]


 인수

내용 

 lpClassName

윈도우 클래스를 지정하는 문자열이다. 

 lpWindowName

윈도우의 제목 표시줄에 보여줄 문자열이다.

 dwStyle

윈도우의 스타일을 지정한다.

 x,y

윈도우의 좌표를 지정한다.

 nWidth,nHeight

윈도우의 폭과 높이를 장치 단위(픽셀)로 지정한다. 

 hWndParent

부모 윈도우 또는 소유주 윈도우의 핸들을 지정한다.

 hMenu

겹쳐진(Overlapped)윈도우나 팝업 윈도우의 경우 메뉴의 핸들을 지정한다.

 hInstance

윈도우를 생성하는 인스턴스 핸들을 지정한다.

 lpParam

WM_CREATE 메시지의 인수lParam으로 전달될 CREATESTRUCT 구조체의 포인터이다.

[표1  함수의 형태]


위와 같이 CreateWindow의 인수값을 채우고 이용하여 윈도우 객체를 생성하고 HWND hWnd는 윈도우 핸들이라고 한다.

-참고 서적
API Programing / 이창현 / 혜지원
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632679(v=vs.85).aspx
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=112991&ref=112971 (HANDLE과 HWND 차이 및 설명)