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 |