DC

Programming/API 2015. 6. 7. 19:33

윈도우즈는 3가지 동적 연결 라이브러리(DLL)로 이루어져 있다.

 

1. 메모리를 관리하고 프로그램을 실행시키는 KERNEL

2. 유저 인터페이스와 윈도우를 관리하는 USER

3. 화면 처리와 그래픽을 담당하는 GDI

 

DC (Device Context)

- 출력에 필요한 모든 정보를 가지는 데이터 구조체이며 GDI 모듈에 의해서 관리된다.

 

DC를 사용하는 이유?

 

예를 들어서 LinTo()함수가 있다.

그런데 LineTo함수의 인수에는 선을 긋기위한 두 점의 좌표이외에도 여러 가지 정보가

필요한대 선의 색상, 굵기, 모양등 여러가지가 있다.

 

그런데 이러한 정보들을 한 곳에 모아서 그 값들을 사용하는 방법이 훨씬 더 편리하고 효율적일텐데 그래서 이러한 정보들을 모두 모아서 DC라는 것을 만들고 그리기 함수에선느 DC의 핸들을

넘겨받아서 그리기에 필요한 추가 정보는 모두 DC 에 정의되어 있는 값을 사용한다.

 

결과적으로 DC가 그리기에 필요한 여러 가지 정보와 안전 장치 역할을 하기 때문에

모든 그리기 함수는 DC의 핸들을 첫 번째 인수로 전달받아야 한다.

 

 

DC를 얻는 방법

 

DC를 얻는 방법에는 두 가지 방법이 있다.

 

1. GetDC()로 얻은 다음에 ReleaseDC()로 해제하는 것

   HDC GetDC(HWND hWnd);

   int ReleaseDC(HWND hWnd, HDC hDC);

 

2. WM_PAINT 메시지 루틴에서 BeginPaint함수로 DC를 얻으며 해제할때는 EndPaint함수를 사용

    한다.

    HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);

    BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);

 

 

BeginPaint함수는 윈도우 핸들 외에 페인트 정보 구조체를 인수로 요구하며 이 구조체에 그림그리기에 필요한 여러 가지 복잡한 정보를 리턴한다.

 

 

    typedef struct tagPAINTSTRUCT

    {

HDC        hdc;

BOOL     fErase;

RECT     rcPaint;

BOOL    fRestore;

BOOL    fIncUpdate;

BYTE    rgbReserved[16];

}PAINTSTRUCT;

 

HDC hdc;

PAINTSTRUCT ps;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

EndPaint(hWnd, &ps);

 

 

 

 

 

'Programming > API' 카테고리의 다른 글

그래픽 출력, 메세지 박스  (0) 2015.06.08
문자열 출력  (0) 2015.06.08
핸들  (0) 2015.06.07
사용자 정의 데이터  (0) 2015.06.07
윈도우 프로그래밍의 구조  (0) 2015.06.03
admin