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 |