API-DC(Device Context),WM_PAINT
- 프로그래밍/WindowsAPI
- 2011. 5. 11. 10:32
1. 동적 연결 라이브러리
1) Device Context 의 약자로 출력에 필요한 모든 정보를 가지는 데이터 구조체
3) GDI 모듈에 의해 관리된다. (폰트, 선의 색상 굵기, 무늬 그리기 모드 등등 )
WM_PAINT에 대해서 알아보자.
윈도우의 작업 영역중 일부가 무효화되어 있을 때 시스템이 이 메시지를 큐에 넣어준다. 다음과 같은 경우에 무효 영역이 설정되며 이때마다 WM_PAINT메시지가 전달된다.
① 윈도우가 처음 생성되었을 때
② 윈도우의 위치가 이동되었을 때
③ 윈도우의 크기가 변경되었을 때. 최대, 최소화되었을 때
④ 다른 윈도우에 가려져 있다가 드러날 때
⑤ 스크롤 될 때
또는 응용 프로그램 내부에서 InvalidateRect 함수 호출에 의해 강제로 무효 영역을 설정할 수 있다.
WM_PAINT 메시지는 모든 메시지 중에 우선 순위가 가장 늦다. GetMessage 함수는 메시지 큐에 WM_PAINT가 있더라도 다른 메시지가 대기중이면 이 메시지를 먼저 처리한다.
Uncover : 다른 윈도우에 의해 가려졌다가 다시 나타나면 지워지는 현상.
4. DC를 얻는 방법 2가지
HDC GetDC(HWND hWnd);
int ReleaseDC(HWND hWnd,HDC hDC);
DC는 주로 하나의 윈도우와 연관되는 출력정보를 가진다. 그래서 인수로 어떤 윈도우에 대한 DC가 필요한가를 밝혀주어야 한다. GetDC는 hWnd가 가리키는 윈도우에 적당한 DC를 만들어 그 핸들을 반납한다. DC도 메모리를 차지하므로 할당 후 해제 원칙이 반드시 준수되어야 한다.
HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);
BOOL EndPaint(HWND hWnd,CONST PAINTSTRUCT *lpPaint);
DC를 얻는 두번째 방법은 WM_PAINT 메시지 루틴에서만 사용할 수 있다. BeginPaint는 WM_PAINT 메시지내에서 그림 그리기 준비를 하는 좀 더 전문적인 함수이다.
BeginPaint 함수는 윈도우 핸들 외에도 페인트 정보 구조체를 인수로 요구하며 이 구조체는 그림 그리기에 필요한 정보를 담는다.
typedef struct tagPAINTSTRUCT
{
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[16];
} PAINTSTRUCT;
이 글을 공유하기