삽질의 현장/- 윈도우 API

#Win API 기본

shovelman 2015. 9. 6. 01:17

#include <windows.h>

#include <TCHAR.H>

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

//프로그램에 커널이 부여하는 ID, 이전에 부여받은 값(사용x), 문자열, 윈도우가 화면에 출력될 때 형태를 정의

{

HWND hwnd; 

MSG msg;

WNDCLASS WndClass;

WndClass.style = CS_HREDRAW | CS_VREDRAW; //윈도우가 출력되는 형태 (윈도우의 크기를 변경하면 다시 그리는 형태의 윈도우)

WndClass.lpfnWndProc = WndProc; //메시지 처리에 사용될 함수의 이름 기재

WndClass.cbClsExtra = 0; // 클래스를 위한 여분의 메모리 크기

WndClass.cbWndExtra = 0; // 윈도우를 위한 여분의 메모리 크기

WndClass.hInstance = hInstance; //첫번째 매개변수

WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //기본 아이콘 지정

WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //기본 커서 지정

WndClass.hbrBackground(HBRUSH)GetStockObject(WHITE_BRUSH); //윈도우 배경색 지정

WndClass.lpszMenuName = NULL; // 메뉴 이름

WndClass.lpszClassName = _T("Window Class Name"); // 윈도우 클래스의 이름

RegisterClass(&WndClass); // 커널에 등록

hwnd = CreateWindow(_T("Window Class Name"), // 윈도우 핸들값 반환, 윈도우 클래스 이름

_T("Window Title Name"), // 윈도우 타이틀 이름

WS_OVERLAPPENDWINDOW, // 윈도우 스타일 (기본적인 윈도우)

CW_USEDEFAULT, // 윈도우 위치 x 좌표

CW_USEDEFAULT, // 윈도우 위치 y 좌표

CW_USEDEFAULT, // 윈도우 가로 크기

CW_USEDEFAULT, // 윈도우 세로 크기

NULL, // 부모 윈도우 핸들

NULL, // 메뉴 핸들

hInstance, // 응용 프로그램 인스턴스

NULL // 생성 윈도우 정보

);

ShowWindow(hwnd, nCmdShow); // 윈도우를 화면에 보여준다

UpdateWindow(hwnd); // 윈도우를 화면에 보여준다

while(GetMessage(&msg, NULL, 0, 0)) //메시지 큐에서 메시지를 꺼낸다

{

TranslateMessage(&msg); // 두 메시지를 하나로 변형할 때 이용

DispatchMessage(&msg); // 메시지를 처리하는 함수에 메시지를 보낸다

}

return (int)msg.wParam;

}


LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

// 생성된 윈도우의 핸들 값, 메시지 번호, 메시지 종류에 따라 값을 해석하는 방법이 다르다.

{

HDC hdc;

PAINTSTRUCT ps;

switch(iMsg)

{

case WM_CREATE:

break;

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

EndPaint(hwnd, &ps);

break;

case WM_DESTORY:

PostQuitMessage(0);

break;

}

return DefWindowProc(hwnd, iMsg, wParam, lParam); // 메시지 중 윈도우 메시지 처리 함수에서 처리하지 않은 것을 기본 메시지 처리함수에서 담당하도록 한다.

}