9/4 API - DC & GDI

정수현·2024년 9월 4일

API Programming

목록 보기
6/10

DC란?

  • Device Context
  • 출력에 필요한 모든 정보를 갖는 구조체
    ex) 폰트, 선의 색상과 굵기, 채움 무늬와 색상 등등

윈도우를 만들고 그림을 그리려면 반드시 DC의 핸들을 얻어야 한다.

  • DC 핸들은 사용 후 반드시 해제해야 한다.

GetDC()

  • DC 얻기 : GetDC()
  • DC 해제 : ReleaseDC()
    ↪ Client 영역(창에서 그려지는 영역)을 위한 DC를 얻는다.
HDC hdc = GetDC(hwnd);
ReleaseDC(hwnd, hdc);

BeginPaint()

  • DC 얻기 : BeginPaint()
  • DC 해제 : EndPaint()
    ↪ 무효화 영역을 위한 DC를 얻는다.
HDC hdc = BeginPaint(hwnd);
EndPaint(hwnd, hdc);

무효화 영역

  • 사라졌을 때 다시 그려야 하는 영역
  • 무효화 영역이 발생하면, 운영체제는 WM_PAINT 메시지를 해당 윈도우 프로시저에 보낸다.
  • WM_PAINT는 메시지 큐에 두 번 들어오지 않고 이 좌표만이 새로 업데이트 된다.

좌클릭 했을 때 사각형이 그려지는 함수

case WM_LBUTTONDOWN:
{
    HBC hbc = GetDC(hwnd);
    Rectangle(hdc, 10, 10, 10+100, 10+100);
    ReleaseDC(hwnd, hdc);
    
    return 0;
}
case WM_PAINT:
{
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    
    Rectangle(hdc, 120, 10, 120+100, 10+100);
    
    EndPaint(hwnd, &ps);
    
    return 0;
}
  • PAINTSTRUCT ps;
    색상 정보를 받기 위한 구조체

  • HDC hdc = BeginPaint(hwnd, &ps);
    BeginPaint()ps 변수의 주소를 제공한다.
    ↪ 다시 그려야 하는 영역에 대한 세부 정보를 받을 수 있다.


좌클릭 했을 때

무효화 영역이 발생했을 때

0개의 댓글