스프링노트

[C++] 간단한 Win32 SDK 윈도우 프로그램 만들기 본문

DEVELOPMENT/C/C++

[C++] 간단한 Win32 SDK 윈도우 프로그램 만들기

RAYZIE 2013. 7. 11. 10:38

#include <Windows.h>


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM IParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR IpszCmdLine, int nCmdShow) {


static LPTSTR szAppName = "EasyText";

static LPTSTR szTitleName = "Practice1_1";


HWND hwnd;

MSG msg;

WNDCLASSEX WndClass;


//1_윈도우 클래스 구조체 WndClass에 값을 채워 윈도우 클래스를 등록한다.

WndClass.cbSize = sizeof(WNDCLASSEX); //구조체 크기

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 = szAppName;

WndClass.hIconSm = 0;


// 윈도우 클래스를 등록한다.

RegisterClassEx(&WndClass);


//2_프레임 윈도우를 생성한다.

hwnd = CreateWindow(

szAppName,

szTitleName,

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

NULL,

NULL,

hInstance,

NULL

);


//프레임 윈도우를 화면에 표시한다.

ShowWindow(hwnd, nCmdShow);

UpdateWindow(hwnd);


//3_메시지 큐로부터 메시지를 받아와 메시지를 해당 윈도우 프로시저로 보낸다.

while(GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM IParam)

{

HDC hdc; //디바이스 컨텍스트

RECT rect; //RECT 구조체

PAINTSTRUCT ps; //페인트 구조체

LPTSTR szMsg1 = "I LOVE WINDOW PROGRAMMING!";

LPTSTR szMsg2 = "키보드가 눌러졌습니다.";

LPTSTR szMsg3 = "키보드가 떼어졌습니다.";


//1_ 커널에서 들어온 메시지를 switch문을 이용하여 처리

switch(message)

{

case WM_CREATE : //윈도우가 처음 생성 메시지가 온 경우

break;

case WM_PAINT : //화면에 출력 메시지가 온 경우

hdc = BeginPaint(hwnd, &ps);

TextOut(hdc, 10, 10, szMsg1, strlen(szMsg1)); //윈도우에 문자열을 출력

EndPaint(hwnd, &ps);

break;

case WM_KEYDOWN : //키보드 버튼이 눌린 경우

hdc = GetDC(hwnd);

GetClientRect(hwnd, &rect);

DrawText(hdc, szMsg2, strlen(szMsg2), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

ReleaseDC(hwnd, hdc);

break;

case WM_KEYUP :

hdc = GetDC(hwnd);

GetClientRect(hwnd, &rect);

DrawText(hdc, szMsg3, strlen(szMsg3), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

ReleaseDC(hwnd, hdc);

break;

case WM_DESTROY : //프로그램 종료 메시지가 온 경우

PostQuitMessage(0);

break;

default : //그 외 메시지가 온 경우

return DefWindowProc(hwnd, message, wParam, IParam);

}

return 0;

}




출처 : 생능출판사

'DEVELOPMENT > C/C++' 카테고리의 다른 글

[C#] 텍스트박스에서 엔터키 이벤트  (0) 2013.07.18
[C#] MySQL 레코드 불러오기  (0) 2013.07.17
간단한 구조체 예시  (0) 2013.04.29
[C] 함수의 크기  (0) 2013.04.29
학점 계산 프로그램  (0) 2013.04.29