본문 바로가기

Win32 API

10. Win32 API - DC 개요

WIn32 API DC(Device Context) 개요

  • DC(Device Context)는 Win32 API에서 출력 장치와 상호 작용하는데 사용하는 중요한 개체입니다.
  • GDI(Graphics Device Interface)에서 사용하는 데이터 구조이며, 윈도우, 프린터, 메모리 등 다양한 출력 장치에 대한 정보를 담고 있습니다.

 

1. DC의 주요 기능

  • 그래픽 출력 : 선, 곡선, 사각형, 텍스트 등 다양한 그래픽 요소를 출력할 수 있습니다.
  • 폰트 관리 : 폰트를 선택하고, 크기, 스타일 등을 설정할 수 있습니다.
  • 색상 관리 : 색상을 선택하고, 팔레트를 설정할 수 있습니다.
  • 비트맵 관리 : 비트맵을 로드하고, 출력하고, 메모리에 저장할 수 있습니다.
  • 지역 설정 : 출력 영역을 설정하고, 좌표 변환을 수행할 수 있습니다.

 

2. DC 종류

  • 화면 DC : 윈도우 클라이언트 영역에 출력하는 데 사용됩니다.
  • 프린터 DC : 프린터에 출력하는데 사용됩니다.
  • 메모리 DC : 메모리에 출력하는데 사용됩니다.
  • 호환 DC : 다른 DC와 호환되는 DC를 만드는 데 사용됩니다.

 

3. DC의 사용 방법

 

DC 핸들 얻기

  • GetDC, CreateDC등의 함수를 사용하여 DC 핸들을 얻습니다.
HDC hdc = ::GetDC(hWnd);

 

DC 설정

  • 색상, Brush, 출력 영역 등을 설정합니다.
// Brush 설정
hBrush = (HBRUSH)GetStockObject(dwBrushStyle[0]);
// DC에 적용
SelectObject(hdc, hBrush);
// 출력 영역 설정
Rectangle(hdc, 400, 400, 600, 600);

 

DC 해제

  • ReleaseDC 함수를 사용하여 DC 핸들을 해제합니다.
::ReleaseDC(hWnd, hdc); // DC 반납

 

DC 사용 예시

  • Brush 객체를 적용하고 이를 통해 사각형을 그리는 예제입니다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{

  DWORD dwBrushStyle[] = {
          BLACK_BRUSH,
          GRAY_BRUSH,
          DKGRAY_BRUSH,
          DC_BRUSH,
          HOLLOW_BRUSH,
          LTGRAY_BRUSH
      };

  switch (iMessage) {
      case WM_LBUTTONDOWN:
      {   
          hdc = ::GetDC(hWnd);
          hBrush = (HBRUSH)GetStockObject(dwBrushStyle[0]);
          SelectObject(hdc, hBrush);
          Rectangle(hdc, 400, 400, 600, 600);

          hBrush = (HBRUSH)GetStockObject(dwBrushStyle[1]);
          SelectObject(hdc, hBrush);
          Rectangle(hdc, 200, 200, 400, 400);
          ::ReleaseDC(hWnd, hdc); // DC 반납
          return 0;
      }
     case WM_DESTROY:
       {
            PostQuitMessage(0);
            return 0;
       }
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
 }

 

4. DC 관련 주요 함수

  • GetDC: 윈도우의 클라이언트 영역에 대한 DC 핸들을 얻습니다.
  • CreateDC: 특정 출력 장치에 대한 DC 핸들을 생성합니다.
  • ReleaseDC: DC 핸들을 해제합니다.
  • BeginPaint: 윈도우의 클라이언트 영역에 대한 페인팅을 시작합니다.
  • EndPaint: 윈도우의 클라이언트 영역에 대한 페인팅을 종료합니다.
  • TextOut: 윈도우의 클라이언트 영역에 텍스트를 출력합니다.
  • MoveToEx: 펜을 이동합니다.
  • LineTo: 현재 펜 위치에서 지정된 위치까지 선을 그립니다.
  • Rectangle: 사각형을 그립니다.
  • Ellipse: 타원을 그립니다.

 

5. 참고

https://learn.microsoft.com/ko-kr/windows/win32/gdi/device-contexts

'Win32 API' 카테고리의 다른 글

12. Win32 API - 무효화 / 유효화 영역  (0) 2024.03.06
11. Win32 API - Bitmap  (0) 2024.03.02
9. Win32 API - GDI 개요  (0) 2024.02.24
8. Win32 API - 윈도우의 생성과 소멸  (0) 2024.02.24
7. Win32 API - Windows 프로그램 구성  (0) 2024.02.24