#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="HELLOWORLD";
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInsance, LPSTR lpszCmdParam, int nCmdShow){
/*HINSTANCE hInstance - 프로그램 핸들
*HINSTANCE hPrevInstance - 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들, 없을 경우 NULL, WIN32에서는 항상 NULL
*LPSTR lpszCmdLine - 명령행으로 입력된 프로그램 인수. 도스의 argv에 해당.
*int nCmdShow - 프로그램이 실행될 형태이며, 보통모양 등이 전달된다.
*/
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance; //Instance 날아가서 나중을 위해 저장
WndClass.cbClsExtra=0; //예약 영역
WndClass.cbWndExtra=0; //예약영역
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //윈도우의 배경 색상 GetStockObject라는 함수 이용 WHITE_BRUSH가 보통 쓰임.
WndClass.hCursor=LoadCursor(NULL, IDC_ARROW); //커서 디폴트
WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION); //아이콘 디폴트(창모양)
WndClass.hInstance=hInstance; //클래스를 사용하는 프로그램의 번호 인수로 전달된 값 그대로 hInstance
WndClass.lpfnWndProc=(WNDPROC)WndProc; //윈도우의 메시지 처리 함수를 지정.
WndClass.lpszClassName=lpszClass; //윈도우 클래스의 이름을 정한다.
WndClass.lpszMenuName=NULL; //프로그램이 사용할 메뉴. 메뉴는 프로그램 코드에서 만드는 것이 아니라 리소스 에디터에 의해 별도로 만들어진 후 링크시에 같이 합쳐진다. 메뉴사용안하면 NULL로.
WndClass.style=CS_HREDRAW | CS_VREDRAW; //윈도우의 스타일. 수직,수평 크기 바꾸면 다시 그림. HORIZON,VERTICAL REDRAW
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,NULL);
//ClassName,WindowName,dwStyle, X, Y, WIDTH, HEIGHT, hWndParent, hMenu, hInstance, lpvParm
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,0,0,0)){ //FALSE 가 아닐때까지 계속 돔.
TranslateMessage(&Message); //키보드에서 받은 메세지 번역.
DispatchMessage(&Message); //처리해 달라.
}
return Message.wParam; //WM_QUIT 메시지로부터 전달된 탈출 코드.
}
//핸들 어떤 종류의 메시지인가.
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));
//DefWindowProc 함수는 위에서 처리해주지 않는 나머지 메시지에 대해 관한 처리를 해준다.
}