ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;

    사용예시. 실행결과

Designed by Tistory.