vc 2008 pro의 환경에서 실습을 하겠다. 설치방법은 블로그 category - enviroment에 있다. 새 프로젝트만들기 -> Win32 프로젝트 -> 빈프로젝트 만들기 로 실습환경을 만든다.
빈 프로젝트가 생성되면 리소스파일 우측버튼을 눌러 .cpp파일을 새로 만들면 아래와 같은 그림이 될 것이다.
소스코드를 직접 쳐본다.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("First");
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;
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);
while(GetMessage(&Message, NULL, 0, 0)){
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch(iMessage){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
f5를 눌러 아래와 같은 아무런 기능도 없는 윈도우를 하나 만들었다.
2. 예제 분석
-windows.h 헤더에 데이터타입, 함수 원형, 매크로 상수 그리고 필요 보조 헤더 파일을 포함한다. 죄다 정의되어 있기에 이것만 선언하면 된다.
- 시작점은 WinMain이다. 원형은 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) 이다.
4개의 인수를 취하는데 의미는 다음과 같다
인수 의미
hInstance 프로그램의 인스턴스 핸들. 실행되는 프로그램 하나를 칭한다.
hPrevInstance 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들. win32에서는 NULL
16bit와 호환성을 위해 존재하는 인수로 없다고 봐도 무방하다.
lpszCmdParam 명령행으로 입력된 프로그램 인수. 도스의 argv인수에 해당.
nCmdShow 프로그램이 실행될 형태이며 최소화, 보통 모양 등이 전달된다.
댓글 없음:
댓글 쓰기