티스토리 뷰
CDC 에서 제공하는 함수
1. CPaintDC
Client 영역에 출력할때, WM_PAINT 메시지 핸들러 안에서만 사용 가능
특정 윈도우애 출력하므로 객체를 만들때 대상이 되는 윈도우를 알려줘야 한다.
1
2
3
4
5 |
void CChildView::OnPaint()
{
CPaintDC dc(this); // 뷰에 출력
}
|
cs |
2. CClientDC
Client 영역에 출력할때, WM_PAINT 메시지 이외의 다른 모든 곳에서 사용 가능
특정 윈도우애 출력하므로 객체를 만들때 대상이 되는 윈도우를 알려줘야 한다.
1
2
3
4
5
6
7 |
void CChildView::OnLButtonDown(UINT nFalgs, CPoint point)
{
CClientDC dc(this);
dc.Ellipse(80, 5, 100, 200);
CWnd::OnLButtonDown(nFalgs, point)
} |
cs |
3. CWindowDC
윈도우의 전체 영역에 출력할때 (Client + 비Client 영역)
특정 윈도우애 출력하므로 객체를 만들때 대상이 되는 윈도우를 알려줘야 한다.
1
2
3
4
5
6
7 |
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
CWindowDC dc(this);
dc.Ellipse(80, 5, 100, 200);
} |
cs |
4. CMetaFileDC
메타파일에 출력할때
GDI 명령어를 메모리나 파일로 저장해서 실행(Play)함으로써 여러개의 GDI명령어를 한꺼번에 수행할 수 있다.
그림파일과 차이점은 그림파일은 픽셀정보를 저장하지만 메타파일은 그림을 그리는 명령어가 저장된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
class CMFCApplication1View : public CView
{
private:
HMETAFILE m_hmf;
...
void CMFCApplication1View::OnLButtonDown(UINT nFlags, CPoint point)
{
::DeleteMetaFile(m_hmf); // 이전에 생성된 메타파일을 메모리에서 삭제
CMetaFileDC dc;
dc.Create(); // 메타파일 생성
dc.Ellipse(point.x - 30, point.y - 30, point.x + 30, point.y + 30);
m_hmf = dc.Close(); // 메타파일 핸들을 저장
CWnd::OnLButtonDown(nFlags, point);
}
void CMFCApplication1View::OnRButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
dc.PlayMetaFile(m_hmf); // 메타파일을 실행
CWnd::OnRButtonDown(nFlags, point);
} |
cs |
참고>
CPaintDC, CClientDC 대신 CDC 사용하면 반드시 ReleaseDC() 해줘야 한다.
1
2
3 |
CDC *pDC = GetDC();
pDC->Ellipse(...);
ReleaseDC(pDC); |
cs |