[임시중단] C++ UI/그래픽스 | 0. 시작하기및 윈도우생성 (GDI+무료강좌)
해당 포스팅은 임시중단되었습니다.
간단한 이유이지만 더욱 더 높은 퀄리티와 친절한 설명으로 돌아오겠습니다.
감사합니다!
안녕하세요!
원래는 UI/그래픽스시리즈는 파이썬으로만 진행할려고했는데,
국내자료중에서 c++ GDI+ 무료로 되어있는 관련자료가 찾아보니까 거의 안보이기도하고,
이렇게 된김에 유튜브에서도 GDI+강좌 진행중이니까, 블로그에서는 읽기형식의 자료형태로써 같이 사용해보겠습니다.
파이썬 UI/그래픽스는 해당 링크로 들어가시면 됩니다.
바로 시작하겠습니다!
GDI+
우선 GDI+는 마이크로소프트 윈도우 에서 지원하는 사용자지원 인터페이스중 하나입니다.
그렇습니다, 당연히 윈도우프로그래밍입니다.
GDI+는 그래픽 객체를 표시하고 모니터나 프린터와 같은 출력 장치로 전송합니다.
또는, GDI+는 직선이나 곡선, 글꼴을 그리거나 팔레트를 다루는 등의 일을 합니다.
쉽게 말해서 우리가 직접 윈도우창에다가 페인트칠하고, 문자나 그림을 그리고, 프린터로도 출력이 가능합니다.
이번 강좌에서는 GDI+를 시작하기위해서 기본적인 윈도우를 생성하는 작업을 진행하겠습니다.
개발환경
언어: C++20
컴파일러: GCC, MSVC
통합개발환경(IDE): Devcpp, Visual Studio 2022 Preview
윈도우(빈 화면) 생성
우선 윈도우프로그래밍에서는 무엇보다 제일중요한것은 빈 화면을 생성하는것입니다.
무엇이든간에 화면을 만들지않고선은 아무것도그릴수가 없죠..
코드설명은 주석을 이용하겠습니다.
빈 화면 생성
#include <windows.h>
/*
*
* 다음을 링킹 해주시기 바랍니다.
* -lgdi32 #pragma comment(lib, "gdiplus")
*
*/
#include <gdiplus.h>
/**
* @fn 본격적으로 윈도우에 그림그리는 함수
*/
void PaintGdi(HWND hwnd, HDC hdc) {
}
/**
* @fn 윈도우 콜백함수
*/
LRESULT CALLBACK WndProcedure(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
PAINTSTRUCT ps;
HDC hdc; /* <그림그리기위해 필요한 스케치북입니다.> */
switch (msg) {
case WM_CREATE:
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
PaintGdi(hwnd, hdc);
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
break;
}
return DefWindowProcW(hwnd, msg, wp, lp);
}
/**
* @fn 윈도우 메인함수
*/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpStr, int cmdLines) {
Gdiplus::GdiplusStartupInput input; /* <GDI+입력객체> */
ULONG_PTR token;
Gdiplus::GdiplusStartup(&token, &input, 0); /* <GDI+시작> */
MSG msg = { 0 };
WNDCLASSW w = { 0 };
w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); /* <윈도우 시작배경색> */
w.hCursor = LoadIconA(hInst, IDI_APPLICATION); /* <윈도우 아이콘불러오기> */
w.hCursor = LoadCursorA(hInst, IDC_ARROW); /* <윈도우 커서불러오기> */
w.hInstance = hInst; /* <윈도우 모듈핸들> */
w.lpfnWndProc = WndProcedure; /* <윈도우 콜백함수> */
w.lpszClassName = L"mawile"; /* <실행할 윈도우의 클래스이름> */
if (!RegisterClassW(&w)) return -1; /* <클래스적용!> */
/* <창 생성!> */
HWND hwnd = CreateWindowExW(0, L"mawile", L"Mawile's GDI+", WS_VISIBLE | WS_OVERLAPPEDWINDOW, 100, 100, 920, 780, 0, 0, 0, 0);
if (hwnd == nullptr) return -1;
/* <시작> */
while (GetMessage(&msg, 0, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/* <종료> */
Gdiplus::GdiplusShutdown(token);
return msg.wParam;
}
실행 해보면 다음과 같은 방식으로 윈도우 창이 생성됩니다.
와우!!
윈도우11이라서 그런지 둥글둥글하고 뭔가 더 예쁘네요 ㅋㅋ..
오늘은 별내용없었습니다.
그냥 GDI+사용을 위해서 기본적인 윈도우 창 생성을 해봤습니다.
다음 시간에는 C++ UI/그래픽스 | 1. 선과 도형, 말그대로 선과 도형에 관하여 포스팅하겠습니다.
사실 저도 예전에 GDI+재미있어서 엄청삽질했었는데, 확실히 c++이 재밌네요!
그럼 안녕~!@!
댓글