Hacking Arts
WinMain - 2.윈도우 객체 생성하기 본문
-클래스를 생성했다고 윈도우가 만들어지는 것이 아니다. 두번째 단계인 윈도우 객체를 생성해야된다.
생성에 이용하는 함수는 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 차이 및 설명)
'Programing > API Programing' 카테고리의 다른 글
WndProc - 메시지 처리하기 (0) | 2014.09.20 |
---|---|
WinMain - 4.메시지 루프 돌리기 (0) | 2014.09.20 |
WinMain - 3.윈도우 객체 화면에 띄우기 (0) | 2014.09.19 |
WinMain - 1.윈도우 클래스 만들기 (0) | 2014.09.19 |
WinMain() 과 WndProc() (0) | 2014.09.19 |