참고> blog.naver.com/tipsware/220987761947
1. Windows 운영체제에서 그림을 그리기 위해선 GDI가 제공하는 DC(Device Context)를 먼저 얻어 와야 함.
-> ex) Rectangle(h_dc, 50, 50, 100, 100);
2. GetDC: '화면 전체' 또는 '특정 Window'에 그림을 그리기 위해 사용할 DC를 만드는 함수
3. DC는 기본 설정값(Pen은 검은색 실선, Brush는 흰색 채우기..)으로 GDI Object가 만들어져서 그 핸들 값이 저장되어 있음.
-> 다른 GDI Object를 쓰고 싶으면 SelectObject() 함수를 사용하여 현재 사용중인 GDI Object를 다른 GDI Object로 변경해야 함.
-> But, GetDC로 얻는 DC의 Bitmap 객체는 화면에 출력 중인 '비트 패턴'을 유지해야 하기 때문에 SelectObject() 함수를 사용하여 다른 Bitmap 객체로 변경이 불가능함.
4. GetDC 원형
HDC GetDC(HWND hWnd);
-> 매개변수 hWnd에 NULL을 명시하면 화면 전체를 그릴 수 있는 DC의 핸들 값을 얻고, 특정 윈도우의 핸들 값을 명시하면 해당 윈도우에 그림을 그릴 수 있는 DC의 핸들 값을 얻게 됨.
-> 성공시 HDC 형식의 핸들 값 반환, 실패시 NULL 반환
-> 특정 윈도우의 DC를 얻으면 그림 그리기에 사용되는 좌표가 해당 윈도우의 클라이언트 영역에 적용. 즉, 모니터의 맨 좌측 맨 위가 아님.
-> 특정 윈도우의 DC를 사용하여 그림을 그리는 경우에 클라이언트 영역을 벗어나는 좌표를 사용함년 클라이언트 영역에 포함되는 부분만 출력되고 나머지 부분은 그려지지 않음.
5. ReleaseDC: DC는 사용 개수에 제한이 있기 때문에 GetDC 함수를 반복해서 사용하면 DC를 더 이상 사용할 수 없음.
따라서 자신이 GetDC 함수를 사용해서 얻은 DC는 반드시 ReleaseDC 함수를 사용해서 반환해야 함.
6. DC의 개수
-> 동일한 WIndow 핸들 값으로 DC를 만드는 경우 GDI Object 중에 Bitmap 객체는 공유되기 떄문에 같은 Bitmap 위에 그려짐. 따라서 종종 비효율적이 되기 쉬움.
-> 그러나 DC에 저장된 각각의 Pen 객체나 Brush 객체는 DC 간에 서로 공유되지 않기 때문에 DC가 자신만의 Pen과 Brush를 가지게 한다면 DC를 여러 개 선언하는 것도 의미가 있음. 예를 들어 첫번째 DC는 빨간펜, 두번째 DC는 파란 펜으로 사용할 수 있음.
But, DC를 여러개 만들어서 계속 사용하는 건 그래픽 자원에 부담을 주기 때문에 꼭 필요하거나 빠른 수행 능력을 가져야 하는 경우에만 사용하는 것이 좋음.
-> 보통의 경우에는 하나의 Window는 한 개의 DC를 만들어서 사용하는 것이 일반적.
'Study Memos > Windows Programming' 카테고리의 다른 글
사각형 그리기 (Section 23) (0) | 2020.09.15 |
---|---|
POINT (Section 22) (0) | 2020.09.07 |
Windows 컴퓨터의 설정 정보 (Section 20) (0) | 2020.09.07 |
비트 패턴 (Section 19) (0) | 2020.09.07 |
DC (Section 18) (0) | 2020.09.07 |