[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #3
์ง๋ ํฌ์คํ
์ ์ด์ด GDI+
, ๋๋ธ ๋ฒํผ๋ง
๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๊ทธ๋ฆด ๊ฒ์ธ์ง์ ๋ํ ๋ด์ฉ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #2
๋ํ์ ์ด๋ป๊ฒ ๊ทธ๋ฆด ๊ฒ์ธ๊ฐ
์ฌ์ค ์ฒ์์๋ vector
๋ฅผ ์ฌ์ฉํ์ฌ IFigure
๋ฅผ ์ฐจ๋ก๋๋ก ๊ทธ๋ฆฌ๋๋ก ๊ตฌํํ์์ต๋๋ค. ์ด๋ ๊ฒ ๊ตฌํํ๋ฉด, ์ฌ๋ฌ ๋ํ์ ์์ฐจ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋ ํ ํน์ ๋ํ ํธ์ง์ด ๊ฐ๋ฅํด์ง๋๋ค. ๋๋ ์ญ์ ๋ ๊ฐ๋ฅํ๊ฒ ์ฃ ? ๋ค๋ก ๋๋๋ฆฌ๊ธฐ ์์
๋ ๊ฐ๋ฅํด ๋ณด์
๋๋ค. ํ์ง๋ง CropBox
๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ์ด ํธ์ง๋ ๊ฒฝ์ฐ, vector
์ ์๋ ๋ํ์ ๋ค์ ๊ทธ๋ฆฌ๊ฒ ๋๋ฉด ์๋ณต ๋๊ฒ ์ฃ ?
๊ทธ๋์ ๋ณธ๋ฌธ์ ๊ทธ๋ฆผํ ํ๋ก์ ํธ์์๋ vector
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ๊ทธ๋๊ทธ๋ ์ถ๊ฐํ ๋ํ์ ์ด๋ฏธ์ง์ ๋ง ๊ทธ๋ฆฌ๊ธฐ ํํ๋ก ๊ตฌํํ์ต๋๋ค. ๋๋๋ฆฌ๊ธฐ๋ ๊ธฐ๋ฅ์ ์๋์ง๋ง CropBox ์ง์ ํ ํธ์งํ๋ฉด ๊ทธ๋๋ก ์ ์ง๊ฐ ๋ฉ๋๋ค. ๋ฌผ๋ก , vector
๋ก ๊ตฌํํ๊ณ CropBox
๋ก ํธ์ง๋ ๊ฒฝ์ฐ์ Canvas๋ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ ... ์ฝ๋๋ฅผ ๋ณด์ํ๋ฉด Windows ๊ทธ๋ฆผํ์ฒ๋ผ ๋์ํ ์ ์์ต๋๋ค.
//์ธ๋ฑ์ค ๋ณ ์ ํ์ ์ํ ๊ฒฝ์ฐ.
std::vector<std::shared_ptr<Figure::IFigure>> m_figures;
//์ผํ์ฑ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ.
std::shared_ptr<Figure::IFigure> m_figure;
GDI ๋๋ GDI+
์ฌ์ค GDI
๋ GDI+
๋ ๋ฌด์์ ์ฌ์ฉํ๋์ง๋ ์๊ด์์ต๋๋ค. ๊ทธ์ GDI+
์ Drawing ๊ด๋ จ ์์ ํจ๊ณผ๊ฐ ๋ ๋ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ๊ฒ์
๋๋ค. GDI+
๋ ๋ถํฌ๋ช
ํจ๊ณผ๋ผ๋ ๊ฐ Smoothing, Anti-Aliasing ๋ฑ์ ๊ฐ์ข
ํจ๊ณผ๋ฅผ ์ง์ํ๊ณ , ๊ฐ์ธ์ ์ผ๋ก GDI+
์ฌ์ฉ ๋ฒ์ด ๋ ํธํ๋๊ตฐ์.
๋๋ธ ๋ฒํผ๋ง(Double Buffering)
๋๋ธ ๋ฒํผ๋ง
์ด ๋ฌด์์ธ์ง๋ ์๊ณ ๊ณ์ ๊ฐ์? ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ดํดํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
[GDI] ๋๋ธ ๋ฒํผ๋ง(Double Buffering) ์๊ฐ
[GDI+] ๋๋ธ ๋ฒํผ๋ง(Double Buffering) ์ฌ์ฉํ๊ธฐ
์ฆ, ๊น๋นก์ ํ์(Flicker)
๋๋ฌธ์ ๋๋ธ ๋ฒํผ๋ง์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋ฐฐ๊ฒฝ ์์์ ์ฑ์ฐ๊ณ , ๊ทธ ์์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๊ณ (Drawing), ๊ทธ ์์ ๋ํ์ ๊ทธ๋ฆฌ๋ ๋์์ด ๋ง์ฐ์ค Drag ์์ง์์ ๋ฐ๋ผ ๊ณ์ํด์ ๋ฐ๋ณต๋๋ค๋ฉด ์๊ฐ์ ์ผ๋ก ๊น๋นก์ด๋ฏ์ด ๋ํ๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ๋์ ์บ๋ฒ์ค(Canvas)์ ๋ฐฐ๊ฒฝ์ ๊ทธ๋ฆฌ๊ณ , ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ , ๋ํ์ ๊ทธ๋ฆฌ๋ ์์ผ๋ก ๋ณด์ฌ์ค ๊ฒ์
๋๋ค.
๊ทธ๋์ Draw()
ํจ์๋ ์๋์ ๊ฐ์ด ๋์ํฉ๋๋ค.
void CExamPaintDlg::OnDrawImage()
{
//View ์์ญ์ DC๋ฅผ ์ป๋๋ค.
CPaintDC dc(this);
//์ป์ด์ง DC์ Graphics๋ฅผ ์ป๋๋ค.
Gdiplus::Graphics mainG(dc.GetSafeHdc());
//ํ์ฌ ๊ทธ๋ฆฌ๋ Canvas์ Graphics๋ฅผ ์ป๋๋ค.
Gdiplus::Graphics memG(m_canvasDuringDraw.get());
//ํ์ฌ ๊ทธ๋ฆฌ๋ Canvas์ ๋ง์ง๋ง์ ๋ฐฑ์
ํ Canvas๋ฅผ ๊ทธ๋ฆฐ๋ค.
memG.DrawImage(m_canvasAfterDrawing.get(), 0, 0, m_canvasAfterDrawing->GetWidth(), m_canvasAfterDrawing->GetHeight());
//๋ํ์ด ์กด์ฌํ๋ฉด ํ์ฌ Graphics์ ๊ทธ๋ฆฐ๋ค.
if (m_figure != nullptr)
m_figure->Draw(&memG);
//View DC์ Graphics์ ํ์ฌ ๊ทธ๋ ค์ง Canvas๋ฅผ ๊ทธ๋ฆฐ๋ค(์ต์ข
๋ณธ์ ๊ทธ๋ฆฐ๋ค).
mainG.DrawImage(m_canvasDuringDraw.get(), 0, 0);
}
๋ง์ฝ, ์ ์ฝ๋์์ mainG์๋ง Draw ํ๋ค๋ฉด ์ด๋ ๋๋ธ ๋ฒํผ๋ง์ด ์๋ ๋ง ๊ทธ๋ฆฌ๊ธฐ ํํ์ ๋๋ค. ์ฆ, ๊น๋นก์ ํ์์ด ๋ํ๋๊ฒ ์ฃ ?
๋ฐฑ์ ํ ์บ๋ฒ์ค(Canvas)์ ๊ทธ๋ ค์ง ์บ๋ฒ์ค
์์์ ์ธ๊ธ๋ ์ฝ๋์ m_canvasDuringDraw
์ m_canvasAfterDrawing
์ด ๋ณด์
๋๋ค. ์ด๋ ํ์ฌ ๊ทธ๋ ค์ง๊ณ ์๋ ์บ๋ฒ์ค(m_canvasDuringDraw)์ ๋ง์ง๋ง์ ๊ทธ๋ ค์ง ์บ๋ฒ์ค(m_canvasAfterDrawing, ๋ฐฑ์
ํ ์บ๋ฒ์ค)๋ฅผ ์๋ฏธํ๋๋ฐ์. ๋๊ฐ์ ์บ๋ฒ์ค์ ์ฐ๋ฌ์์ ๊ณ์ ๊ทธ๋ฆฌ๊ฒ ๋๋ฉด, ๋ํ์ ์์ง์์ด ํ์ ์ผ๋ก ๋จ์ ์์ ๊ฐ์ ํ์์ด ๋ํ๋ฉ๋๋ค. ๊ทธ๋์ ๋ง์ฐ์ค ์ด๋ฒคํธ์ ์ฐ๋ํ์ฌ, ๊ทธ๋ฆฌ๋ ๋์์ด ์๋ฃ๋๋ฉด ๊ทธ๋ ค์ง ์บ๋ฒ์ค๋ฅผ ๋ฐฑ์
ํ๋ ์์
์ด ํ์ํฉ๋๋ค.
์๋ ์ฝ๋๋ ์ผ์ชฝ ๋ง์ฐ์ค ๋ฒํผ์ด ํด๋ฆญ๋ ๋, ํ์ฌ๊น์ง ๊ทธ๋ ค์ง ๊ทธ๋ฆผ์ ๋ฐฑ์ ์บ๋ฒ์ค์ ๋ณด๊ดํ๋ ๋ด์ฉ์ ๋๋ค.
void CExamPaintDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
//...
//๋ง์ง๋ง ์บ๋ฒ์ค๋ฅผ ๊ฐ์ ธ์์
Gdiplus::Graphics memG(m_canvasAfterDrawing.get());
//ํ์ฌ ์บ๋ฒ์ค๋ฅผ ๋ง ๊ทธ๋ฆฐ๋ค.
memG.DrawImage(m_canvasDuringDraw.get(), 0, 0, m_canvasDuringDraw->GetWidth(), m_canvasDuringDraw->GetHeight());
//...
}
์ด์ ๊ฑฐ์ ๋ค ์์ต๋๋ค. ๋ค์ ํฌ์คํ ์์๋ MFC์์ ๊ฐ์ข ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ์ฐ๋ํ์ฌ ๊ตฌํํ๋์ง ์ค๋ช ํ๊ฒ ์ต๋๋ค.
'Programming > MFC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #4 (์์ ํฌํจ)
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #4 (์์ ํฌํจ)
2021.01.11 -
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #2
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #2
2021.01.04 -
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
2020.12.31 -
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
2020.05.31