본문 바로가기

C++ 2D

2. 텍스트 및 도형 출력

1. 텍스트 출력 , paint 이외 구역에서 출력하기

 

1. api 글에 메시지 출력 구간


	switch (iMessage)
	{
		case WM_PAINT:
		{ 
			hdc = BeginPaint(hWnd, &ps);
			1.텍스트 출력
			TextOut(hdc, 100, 100, "2d다", strlen("2d다"));
			2.텍스트 색
			SetTextColor(hdc, RGB(255, 0, 255));
			TextOut(hdc, 100, 120,"새벽1시", strlen("새벽1시"));
			
			EndPaint(hWnd, &ps);
		}
		break;
        
		case WM_LBUTTONDOWN:// 마우스 왼쪽 클릭
		{	3.핸들 생성 및 제거
			hdc = GetDC(_hWnd);
			TextOut(hdc, WINSIZEX / 2, 20, "렉트 안", strlen("렉트 안"));
			ReleaseDC(_hWnd, hdc);
		}
        break;
	}

1. TextOut(hdc, 100, 100, "2d다", strlen("2d다"));

TextOut(hdc, x좌표, y좌표, 문자 , 문자열 ); : 지정된 좌표에 텍스트를 출력함

2. SetTextColor(hdc, RGB(255, 0, 255));

SetTextColor(hdc, RGB(255, 0, 255)); : 지정된 RGB색상으로 텍스트 색 변환


3. hdc = GetDC(_hWnd);		ReleaseDC(_hWnd, hdc);

paint이외의 구역에서 핸들을 가져와 그린다.
GetDC 가져온 이후 사용하고 자원을 계속 소모하기 때문에 ReleaseDC로 사용한걸 치워야함.

 

2. 선과 도형

2-1 선

 

switch (iMessage)
{
	case WM_PAINT:
	{ 
		hdc = BeginPaint(hWnd, &ps);
		1.선 시작점
		MoveToEx(hdc,50,50,NULL);
		2.다음 점
		LineTo(hdc,100,100);
            
		EndPaint(hWnd, &ps);
	}
	break;
}

1. MoveToEx(hdc,50,50,NULL);	: 선을 긋기 위해 찍는 시작점. 지정된 좌표에 생성됨

MoveToEx(hdc,x 좌표,y 좌표 ,이전 위치 좌표);


2. LineTo(hdc, 100 ,100);	: 지정된 좌표와 MoveToEx로 생성된 좌표 사이에 선을 만듬.(이후 연속 사용가능) 

LineTo(hdc, x 좌표 , y 좌표);


 

2-2 사각형, 원형

 

switch (iMessage)
{
	case WM_PAINT:
	{ 
		hdc = BeginPaint(hWnd, &ps);
		1.사각형
		Rectangle(hdc, 500,500,600,600);		
		2.원형
		Ellipse(hdc, 200, 200, 300, 300);
		
		EndPaint(hWnd, &ps);
	}
	break;
}

1.Rectangle(hdc, 500,500,600,600); : 지정된 1번째 점과 2번째 점 사이에 사각형을 출력함

Rectangle(hdc, 1번째 점 x좌표,
		1번째 점 y좌표,
		2번째 점 x좌표,
		2번째 점 y좌표);
        
2. Ellipse(hdc, 200, 200, 300, 300); : 지정된 1번째 점과 2번째 점 사이에 원을 출력함
					사각형을 만들고 그 안에 원을 만든다 생각하면 편함

Ellipse(hdc, 1번 x, 1번 y, 2번 x, 2번 y);

 

3.펜 브러쉬, Create, SelectObject(,), DeleteObject()

 

switch (iMessage)
{
	case WM_PAINT:
	{ 
		hdc = BeginPaint(hWnd, &ps);
        
		1. 새로운 펜인 hpen을 만든다.
		HPEN hpen = CreatePen(PS_SOLID, 3, RGB(255, 0, 255));
        
		2. Select로 새로운 펜으로 스왑하고 이전 펜은 oldpen에 반환한다.
		HPEN oldPen = (HPEN)::SelectObject(hdc, (HGDIOBJ)hpen);
        
		3. 펜을 사용한다.
		Rectangle(hdc, 500,500,600,600);
        
		4. Select로 원래 사용하던 값이 들어있는 oldpen으로 스왑하고 이전 펜은 hpen에 반환한다.
		hpen = (HPEN)::SelectObject(hdc, oldPen);
        
		5. hpen을 삭제한다.
		::DeleteObject(hpen);

		5-1 브러쉬도 동일함
		EndPaint(hWnd, &ps);
	}
	break;
}

6. HPEN hpen = CreatePen(PS_SOLID, 3, RGB(255, 0, 255)); : 펜 생성

CreatePen(글꼴, 선 굵기, 색상);

7. HPEN oldPen = (HPEN)::SelectObject(hdc, (HGDIOBJ)hpen);

(타입)::SelectObject(hdc, (HGDIOBJ)스왑할 도구);

8. HBRUSH hbr = CreateBrush(RGM(20,20,20)); : 브러쉬 생성

CreateBrush(색상);

9.HBRUSH oldHbr = (HBRUSH)::SelectObject(hdc, (HGDIOBJ)hbr);

(타입)::SelectObject(hdc, (HGDIOBJ)스왑 도구)

10. ::DeleteObject(hpen);

::DeleteObject(삭제할 도구);

 

HPEN
HBRUSH
SelectObject()
DeleteObject()

'C++ 2D' 카테고리의 다른 글

7. 시간과 입력  (0) 2021.05.31
6. 싱글 톤 패턴  (0) 2021.05.31
5. 마우스  (0) 2021.05.28
3.Rect, WM, VK, InvalidateRect(,,)  (0) 2021.05.26
1. C++ Window.h  (0) 2021.05.25