#include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); // 사용자와 시스템이 보내오는 메시지를 처리한다. 프로그램의 실질적인 처리를 하는 곳
HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT("KKIMSSI"); // 창 제목
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) // WinMain , API Main 함수, Entry point
{ // nCmdShow = 인자의 갯수 HWND hWnd; // Window Handler // LPSTR 는 char * 배열 C의 main 의 2번째 인자 MSG Message; WNDCLASS WndClass; /* 1. 윈도우 구조체 생성 ( Class ) */ g_hInst = hInstance;
/* 2.1 구조체에 값을 넣어 스타일을 변화시켜준다 */ 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; /* 2.2 앞에 모든 Class 값을 등록시켜주는 함수 */ RegisterClass(&WndClass);
/* 3. 창 만들기 */ hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,(HMENU)NULL,hInstance,NULL); /* 4. 창을 화면에 출력 하는 함수 호출*/ ShowWindow(hWnd,nCmdShow);
/* 5. 창에서 일어나는 메세지 처리 (클릭, 닫기 등등..) */ while(GetMessage(&Message,NULL,0,0)) // 메시지 큐 : 시스템이나 사용자로부터 발생된 메시지가 잠시 대기하는 메시지 임시 저장 영역 { // 메시지 큐에서 메시지를 읽어 들인다 TranslateMessage(&Message); // 입력메시지를 가공해서 프로그램에 쉽게 사용하도록 해준다 DispatchMessage(&Message); // 꺼낸 메시지를 윈도우 메시지 처리함수(WndProc)로 전달한다 } return (int)Message.wParam; }
/* 마우스나 키보드를 움직이면 OS 에서 자동으로 호출 */ /* 메세지 처리는 여기서 처리된다 */ /* 여기서 코드가 핵심 */ LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch(iMessage) { case WM_DESTROY: PostQuitMessage(0); // 창닫기 가능 return 0; case WM_LBUTTONDOWN: // 클릭 시 Beep MessageBeep(0); return 0;
} return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } |