티스토리 뷰

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(805100200);
 
   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(805100200);
}
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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30