CDC클래스를 이용하여 출력하기

CDC 클래스


MFC 에서는 출력과 관련한 다양한 정보를 제공해주는 디바이스 컨텍스트(DC, Device Context)를 제공하고 있습니다.

  

DC는 응용 프로그램 화면에 출력하는 작업을 처리하기 위해서 필요한 속성을 정의하고 있는 자료구조 입니다. CDC 클래스는 텍스트를 출력하거나 그래픽 이미지를 출력하는 등에 관련된 다양한 멤버함수로 구현되어 있습니다.


 그러면 CDC클래스를 이용하여 MFC에서는 어떻게 실제로 윈도우 상에 출력을 해주는지 예제를 통해 알아보도록 하겠습니다.

 

대화상자 기반으로 MFC 프로젝트 하나를 생성해 줍니다.


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
31
32
33
void CMFCCDCDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
 
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
        // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1/ 2;
        int y = (rect.Height() - cyIcon + 1/ 2;
 
        // 아이콘을 그립니다.
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
 
    CDC *pDC = GetDC(); //윈도우 운영체제로부터 디바이스 컨텍스트를 요청하여 얻어옵니다.
    pDC->TextOut(10050, _T("MFC Application")); //운영체제로부터 받은 디바이스 컨텍스트 핸들을 사용하여 출력을 합니다.
    ReleaseDC(pDC); //메모리 누수 현상이 발생할 수 있으므로 사용이 끝나면 반납합니다.
 
    //CClientDC는 생성자에서 DC를 얻어오고 소멸자에서 DC를 반납해주기 때문에 
    //ReleaseDC를 호출하지 않아도 됩니다. -> 개발자 실수 방지하고 안전하게 코딩 가능
    CClientDC dc(this); 
    dc.TextOut(100100, _T("MFC Application"));
}
cs


위와 같이 OnPaint() 함수 안에 CDC, CClientDC 클래스들을 이용하여 윈도우 대화상자에 텍스트를 출력해 줄 수 있습니다.


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY