반응형
이전 내용은 lib로 연결함.
(lib생성과 연결은 이후에 추가예정)
headerText.h
#pragma once #include "libHeader.h" #include <tchar.h> //1. 출력 영역 얻어오기 // - 윈도우에 텍스트를 출력하거나 그림을 그리려면 먼저 커널에서 출력 영역을 얻어와야 한다. // - 윈도우의 출력 영역은 좌측 상단 모서리를 원점으로 하는 화면 좌표계를 사용한다. // - 출력을 위해서 얻어온 화면 영역을 디바이스 컨텍스트(Device Context : DC)라 한다. // - 얻어온 DC는 HDC 타입의 변수에 저장해서 사용한다. // - HDC 타입은 메모리 영역을 관리하며, 메모리 영역에는 얻어온 화면 영역에 대한 속성값을 저장할 수 있다. // - DC를 얻어오는 함수/ 해제하는 함수 : // // 1) HDC BeginPaint(HWND hwnd, PAINTSTRUCT* lpPaint); / BOOL EndPaint(HWND hwnd, PAINTSTRUCT* lpPaint); // HWND hwnd : DC를 받아올 윈도우의 핸들값, // PAINTSTRUCT* lpPaint : 출력 영역에 대한 정보를 저장할 PAINTSTRUCT 구조체의 주소 // : WM_PAINT 메시지 안에서 사용되는 전용 함수. (다른 곳에서는 사용 불가) // GetMessage()로 메시지를 받아오면 대부분의 경우 가져온 뒤 큐에서 메시지를 지우지만 WM_PAINT메시지는 지우지 않는다. // WM_PAINT 메시지는 BeginPaint()가 그리기를 시작할 때 한다. // 그러므로 WM_PAINT메시지 안에는 BeginPaint();와 EndPaint();가 꼭 있어야한다. // // 2) HDC GetDC(HWND hwnd); / int ReleaseDC(HWND hwnd, HDC hdc); // HWND hwnd : DC를 받아올 윈도우의 핸들값, // HDC hdc : 반환할 DC의 핸들값. // : 단순히 DC만 얻어오는 함수. 다른 곳에서 사용할 수 있다. // BeginPaint()는 WM_PAINT 메시지가 호출될 때 사용되므로 지워진 영역(무효화 영역)을 새로 그려주지만 GetDC는 그런 기능이 없다. // - 텍스트 출력 함수 : // // 1) BOOL TextOut(HDC hdc, int x, int y, LPCTSTR lpString, int nLength); // HDC hdc : 텍스트를 출력할 윈도우 DC의 핸들값 // int x, y : 텍스트를 출력할 위치의 x,y좌표 // LPCTSTR lpString : 출력할 텍스트 // int nLength : 출력할 텍스트의 길이 // // 2) int DrawText(HDC hdc, LPCSTR lpString, int nLength, LPRECT lpRect, UINT Flags); // HDC hdc : 텍스트를 출력할 윈도우 DC의 핸들값 // LPCSTR lpString : 출력할 텍스트 // int nLength : 출력할 텍스트의 길이 // LPRECT lpRect : 문자열을 출력할 박스 영역의 좌표가 저장된 RECT타입 변수의 주소값 // UINT Flags : 박스 영역의 어느 위치에 어떻게 출력할지에 대한 플래그 값. // WNDPROC(WndProc) { HDC hdc; PAINTSTRUCT ps; RECT box1; box1.left = 50; box1.top = 40; box1.right = 200; box1.bottom = 120; RECT box2; box2.left = 210; box2.top = 130; box2.right = 360; box2.bottom = 210; static TCHAR str[2]; switch (iMsg) { case WM_CREATE: //윈도우를 열 때 break; case WM_PAINT: //윈도우를 화면에 그릴 때 hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 0, 0, L"Hello World.", 10); DrawText(hdc, L"Hello World.", 10, &box1, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd, &ps); break; //버튼을 누르면 입력한 문자가 출력된다. case WM_CHAR: hdc = GetDC(hwnd); str[0] = wParam; str[1] = '\0'; TextOut(hdc, 100, 0, str, lstrlen(str)); DrawText(hdc, str, lstrlen(str), &box2, DT_SINGLELINE | DT_CENTER | DT_VCENTER); ReleaseDC(hwnd, hdc); break; case WM_DESTROY: //윈도우를 닫았을 때 PostQuitMessage(0); break; } return DefWindowProc(hwnd, iMsg, wParam, lParam); }
winMain.cpp
#include "headerText.h" WINMAIN(hInst) { WNDCLASSEX Wnd_1; ZeroMemory(&Wnd_1, sizeof(WNDCLASSEX)); Wnd_1.cbSize = sizeof(WNDCLASSEX); Wnd_1.hInstance = hInst; Wnd_1.lpfnWndProc = WndProc; Wnd_1.lpszClassName = L"window_1"; if (RegisterClassEx(&Wnd_1) == false) { return 1; } HWND hwnd_1; hwnd_1 = CREATEDEFAULTWINDOW(L"window_1", hInst); if (hwnd_1 == NULL) { return 1; } ShowWindow(hwnd_1, SW_SHOW); MSG msg; ZeroMemory(&msg, sizeof(MSG)); while (true) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); if (msg.message == WM_QUIT) { break; } } else { //IdleTime } } return 0; }
반응형