🧼C, C++/그래픽(gdi+)

[임시중단] C++ UI/그래픽스 | 0. 시작하기및 윈도우생성 (GDI+무료강좌)

Mawile 2021. 11. 1.
728x90

해당 포스팅은 임시중단되었습니다.

간단한 이유이지만 더욱 더 높은 퀄리티와 친절한 설명으로 돌아오겠습니다.

감사합니다!

 

 

 

 

 

안녕하세요!

원래는 UI/그래픽스시리즈는 파이썬으로만 진행할려고했는데,

국내자료중에서 c++ GDI+ 무료로 되어있는 관련자료가 찾아보니까 거의 안보이기도하고, 

이렇게 된김에 유튜브에서도 GDI+강좌 진행중이니까, 블로그에서는 읽기형식의 자료형태로써 같이 사용해보겠습니다.

 

파이썬 UI/그래픽스는 해당 링크로 들어가시면 됩니다.

 

파이썬 UI/그래픽스 | 0. 라이브러리 설치및 시작하기

그래픽(Graphic)은 그리스어 낱말 γραφικός (그라피아)에서 온 것으로, 상품화, 정보 제공, 일러스트레이트, 엔터테인먼트를 위한, 벽, 캔버스, 컴퓨터 화면, 종이, 돌과 같은 어떠한 표면에

mawile.tistory.com

 

바로 시작하겠습니다!

 

 

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++이 재밌네요!

 

그럼 안녕~!@!

 


728x90

댓글