< DC를 얻는 방법 >

 

화면으로 출력을 하기 위해서는 반드시 DC가 있어야 하며 DC를 얻는 방법에는 두 가지가 있다.

 

방법 1.

 

GetDC 함수를 사용하여 DC를 얻고 사용 후 ReleaseDC로 해제하는 방법.

 

1
2
HDC GetDC(HWND hWnd);
int ReleaseDC(HWND hWnd, HDC hDC);
cs

 

DC는 주로 하나의 윈도우와 연관되는 출력 정보를 가진다.

GetDC는 hWnd가 가리키는 윈도우에 적당한 DC를 만들어 그 핸들을 리턴한다.

GetDC에 의해 얻어진 핸들은 사용 후에 반드시 ReleaseDC 함수로 해제해야 한다.

 

방법 2.

 

우선 해당 방법은 WM_PAINT 메시지 루틴에서만 사용할 수 있다.

WM_PAINT 메시지 처리 루틴에서는 DC 핸들을 GetDC로 얻지 않고 BeginPaint 함수로 얻으며 핸들을 해제할 때는 EndPaint 함수를

사용한다. GetDC는 DC 핸들을 얻는 일반적인 방법이며 BeginePaint는 WM_PAINT 메시지 내에서 그림 그리기 준비를 하는 좀 더

전문적인 함수이지만 그 외의 메시지에서는 절대로 사용할 수 없다.

 

1
2
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT* lpPaint);
cs

 

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

리턴한다. (페인트 정보 구조체는 주소값을 넘겨야 한다.)

 

1
2
3
4
5
6
7
8
typedef struct tagPAINTSTRUCT {
    HDC         hdc;
    BOOL        fErase;
    RECT        rcPaint;
    BOOL        fRestore;
    BOOL        fIncUpdate;
    BYTE        rgbReserved[32];
} PAINTSTRUCT;
cs

 

위의 3개 멤버(hdc, fErase, rcPaint)는 사용자가 사용하는 멤버이며 아래의 3개 멤버(fRestore, fIncUpdate, rgbReserved)는 윈도우즈가

내부적으로 사용하는 멤버이므로 사용자가 건드려서는 안 된다.

또한, PAINTSTRUCT 구조체에는 그리기 속도를 비약적으로 향상시킬 수 있는 정보들이 들어 있는데 이 정보를 활용하는 방법에 대해서는

다음에 설명한다.

+ Recent posts