-
Win32 API 5강. 그래픽 오브젝트(1) 스톡 오브젝트와 GDI 오브젝트Win32 API with 나우캠퍼스 2022. 8. 15. 15:37
목차
1. 개요
2. 스톡 오브젝트와 GDI 오브젝트
3. 펜
4. 브러시
5. 비트맵
1. 개요
개요
▩ 비교
c/c++ : int main(), prinft()
win32 : WinMain(), WinProc(), TextOut() + DC
▩ GDI 오브젝트
Pen, Brush, Enhanced metafile, Enhanced-metafile DC, Font, Memory DC, Metafile, Metafile DC, Bitmap, Paltette, Rgion
▩ GID 오브젝트 사용 방법
- 운영체제에서 제공
- 사용자가 직접 설정
2. 스톡 오브젝트와 GDI 오브젝트
스톡오브젝트
▩ GetStockObject()
OS에서 제공해주는 자원에 대한 ID 즉, GDI핸들에 대한 내용을 얻고하자는 함수
HGDIOBJ GetStockObject([in] int i);
i : 사용할 fnObject
▩ fnObject브러시 : BLACK_BURSH, KDGRAY_BRUSH, WHITE_BRUSH, HOLLOW_BRUSH펜 : BLACK_PEN, DC_PEN, NULL_PEN, WHITE_PEN폰트 : ANSI_FIXED_FONT, ANSI_VAR_FONT팔레트 : DEFAULT_PALLETTE
GDI 오브젝트 설정과 해제
▩ SelectObject()와 DeleteObject()
HGDIOBJ SelectObject( [in] HDC hdc, [in] HGDIOBJ h );
hdc : 사용할 DC
h : 사용할 GDI오브젝트
BOOL DeleteObject( [in] HGDIOBJ ho );
ho : 삭제할 GDI오브젝트
3. 펜
펜(pen)
▩ 선 색상, 선 굵기, 스타일 지정(점선, 실선 등)
▩ 펜 생성
HPEN CreatePen( int fnPenStyle, int nWidth, COLORREF crColor );
fnPenStyle : 펜 스타일 지정(점선, 실선 등)
nWidth : 선 굵기 설정
crColor : 선 색상 설정(RGB함수 사용)
펜 스타일 : PS_SOLID, PS_DASH 등.. MSDN문서 참조
▩ 펜을 사용하기 위한 함수
BOOL MoveToEx( [in] HDC hdc, [in] int x, [in] int y, [out] LPPOINT lppt );
hdc : 사용할 DC
x : 그려질 선의 시작 x좌표
y : 그려질 선의 시작 y좌표
lppt : 이전에 그린 선의 끝나는 지점. 없으면 NULL 또는 0을 사용.
BOOL LineTo( [in] HDC hdc, [in] int x, [in] int y );
hdc : 사용할 DC
x : 그려질 선의 끝 x좌표
y : 그려질 선의 끝 y좌표
▩ 펜 사용 방법
1) 펜 생성 : CreatePen(), GetStockObject()
2) 펜 선택 : SelectObject()
3) 선 그리기 : MoveToEx(), LineTo()
4) 펜 제거 및 이전 펜 설정 : DeleteOjbect(), SelectObject() => 스톡 오브젝트는 제외
사용예시1. CreatePen()
switch(message) { case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); HPEN hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0)); SelectObject(hdc, hPen); MoveToEx(hdc, 20, 20, NULL); LineTo(hdc, 100, 20) DeleteObject(hPen); EndPaint(hWnd, &ps); } break; }
사용예시1. CreatePen() 실행결과 사용예시2. GetStockObject()
switch(message) { case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); HPEN hPen = (HPEN)GetStockObject(BLACK_PEN); SelectObject(hdc, hPen); MoveToEx(hdc, 20, 20, NULL); LineTo(hdc, 100, 20); EndPaint(hWnd, &ps); } break; }
사용예시2. GetStockObject() 실행결과 펜을 이용한 도형 출력
▩ 사각형
BOOL Rectangle( [in] HDC hdc, [in] int left, [in] int top, [in] int right, [in] int bottom );
hdc : 사용할 DC
left : 왼쪽 좌표
top : 위 좌표
right : 오른쪽 좌표
bottom : 아래 좌표
기본적으로 왼쪽위 + 오른쪽아래로 사각형을 표시
▩ 원
BOOL Ellipse( [in] HDC hdc, [in] int left, [in] int top, [in] int right, [in] int bottom );
hdc : 사용할 DC
left : 왼쪽 좌표
top : 위 좌표
right : 오른쪽 좌표
bottom : 아래 좌표
기본적으로 왼쪽위 + 오른쪽아래로 원을 표시
4. 브러시(brush)
브러시(brush)
▩ 역할
- 도형의 내부를 색상과 패턴으로 채우는 역할
▩ 스톡오브젝트를 사용한 브러시
- GetStockObject()함수를 사용
브러시(brush) 생성과 실행
▩ 브러시 생성 함수
CreateSolidBrush(), CreateHatchBrush(), CreatePatternBrush(), CreateBrushIndirectBrush(), CreateDIBPatternBrushPt()
HBRUSH CreateSolidBrush( COLORREF crColor );
crColor : 브러시 색상 설정(RGB함수 사용)
▩ 브러시 사용 방법
1) 브러시 생성 : CreateSolidBrush()
2) 브러시 설정 : SelectObject()
3) 도형 출력(Rectangle, Ellipse 등)
4) 이전 브러시 복구 : SelectObject()
4) 생성한 브러시 제거 : DeleteOjbect()
사용예시.
case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); HBRUSH hBrush = CreateSolidBrush(RGB(0, 255, 0)); SelectObject(hdc, hBrush); Rectangle(hdc, 0, 0, 100, 100); EndPaint(hWnd, &ps); } break;
사용예시. 실행결과 'Win32 API with 나우캠퍼스' 카테고리의 다른 글
Win32 API 6강. (1) 키보드 (0) 2022.08.16 Win32 API 5강. 그래픽 오브젝트(2) 비트맵 (0) 2022.08.15 Win32 API 4강. 그래픽(3) 문자열의 색상 설정 및 InvalidateRect() (0) 2022.08.15 Win32 API 4강. 그래픽(2) 문자 출력과 색상 설정 (0) 2022.08.13 Win32 API 4강. 그래픽(1) GDI, DC 개념과 함수 (0) 2022.08.13