티스토리 뷰

프로그래밍/MFC

GDI+ 기본

에어버스 2022. 9. 18. 19:48

GDI 비교, 깜박임 제거 : https://petra.tistory.com/1728

GDI+ 기본 코드

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <Gdiplus.h> // GDI+
using namespace Gdiplus;
//#pragma comment(lib, "gdiplus.lib) // Win32 API 에서 필요함
 
void DrawLine(CDC* ap_dc) // GDI+ 그리기, 25행 _DEBUG 선언 보더 먼저 함수정의해야만 new 연산자 오류가 없다.
{
    Graphics* p_graphic = new Graphics(ap_dc->m_hDC);
    Pen* p_pen = new Pen(Color(25525500), 2);
 
    p_graphic->SetSmoothingMode(SmoothingModeInvalid);
    p_graphic->DrawEllipse(p_pen, 301307050); // 채워지지 않는 도형을 그림
    p_graphic->DrawEllipse(p_pen, 1101307050);
    p_graphic->DrawEllipse(p_pen, 701507050);
    ap_dc->TextOut(210130, TEXT("GDI+ SmoothingModeInvalid (DGI와 같음)"));
 
    p_graphic->SetSmoothingMode(SmoothingModeAntiAlias);    
    p_graphic->DrawEllipse(p_pen, 302307050); // 채워지지 않는 도형을 그림
    p_graphic->DrawEllipse(p_pen, 1102307050);
    p_graphic->DrawEllipse(p_pen, 702507050);
    ap_dc->TextOut(210230, TEXT("GDI+ SmoothingModeAntiAlias"));    
    delete p_graphic;
    delete p_pen;    
}
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
BOOL CL2022Dlg::OnInitDialog()
{
    ...
 
    // TODO: 여기에 추가 초기화 작업을 추가합니다.
    GdiplusStartupInput gpsi;    
    if (Ok != GdiplusStartup(&m_token, &gpsi, NULL)) return 0// GDI+ 지원여부 검사
 
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
 
void CL2022Dlg::OnDestroy()
{
    ...
    // TODO: 여기에 메시지 처리기 코드를 추가합니다.
    GdiplusShutdown(m_token); // GDI+ 라이브러리 정리 작업
}
 
 
void CL2022Dlg::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 // GDI 그리기
    {
        CPaintDC dc(this);
        CPen blue_pen(PS_SOLID, 2, RGB(00255));
        dc.SelectStockObject(NULL_BRUSH);
        dc.SelectObject(&blue_pen);
        dc.Ellipse(303010080);
        dc.Ellipse(1103018080);
        dc.Ellipse(7050140100);
        dc.TextOut(21030, TEXT("GDI"));
 
        DrawLine(&dc);
 
        //CDialogEx::OnPaint();
    }
}
cs

1~3행
34, 35행
5행 DarwLine() 에서 GDI+ 그리기 (OnPaint 에서 호출됨)
44행

DGI 보다 빠르다.

GDI_PLUS.zip
3.77MB

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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