GDI ๋?
GDI(Graphical Device Interface)๋ ์ด์์ฒด์ ์์ ๊ทธ๋ํฝ ์ถ๋ ฅ์ ์ํด ๊ทธ๋ํฝ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๋ฅผ ์ ์ดํ๋ ์ธํฐํ์ด์ค์ด๋ค. ๊ฐ ๋ฒค๋๊ฐ ์ ๊ณตํ๋ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ๊ทธ๋ํฝ ๋๋ฐ์ด์ค์ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ ์ธํฐํ์ด์ค๊ฐ ํ์ํ๋ค. GDI๋ ์ด๋ฌํ ์ญํ ์ ํ๋ฉฐ, ์๋์ฐ ์ด์์ฒด์ ์์๋ gdi.dll ํํ๋ก ์ ๊ณต๋๋ค.
1. ๋์๋ฐฉ์
ํ๋ก๊ทธ๋จ์ด ๊ทธ๋ํฝ ์ถ๋ ฅ์ ์์ฒญํ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
2. ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๋?
๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๋ OS ์์์ ์ฌ๋ฌ ์ฅ์น๋ฅผ ์ ์ดํ๋ ์ํํธ์จ์ด์ด๋ค. ์๋ฅผ ๋ค์ด ๊ทธ๋ํฝ, ์ฌ์ด๋ ๋ฑ ๋ค์ํ ์ฅ์น๊ฐ ์๊ณ , ๊ฐ ์ ์กฐ์ฌ๋ง๋ค ๋ค๋ฅธ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๋ค. ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค:
- ๊ทธ๋ํฝ ์นด๋, ์ฌ์ด๋ ์นด๋ ๋ฑ์ ์ฅ์น๋ฅผ ์ ์ด
- ์ฅ์น์ ์ด์์ฒด์ ์ฌ์ด์ ํต์ ์ ์ค์ฌ
3. GDI์ ์ญํ
GDI๋ ํ์ค ๊ท์ฝ์ ์ํด OS์์ ์ ๊ณตํ๋ DC์ ์ฐ๊ฒฐ๋์ด ํ๋ก๊ทธ๋จ์์ ๊ทธ๋ํฝ์ ์กฐ์ํ ์ ์๊ฒ ํ๋ค. GDI ์ธํฐํ์ด์ค์ ๋ง์ถฐ ๊ฐ๋ฐํ๋ฉด, ํด๋น ๊ทธ๋ํฝ์ด ์ถ๋ ฅ ์ฅ์น์ ๋ง๊ฒ ์์์ ์ถ๋ ฅ๋๋ค. ์๋์ฐ ํผ์์ gdi ํ์ผ์ GDI์ ์ญํ ์ ํ๋ ์์ด์ฝ์ด๋ค.
4. ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ
๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ ์๋ค๋ฉด, ํน์ ์ ์กฐ์ฌ(์: ์๋น๋์)์ ๋ง๊ฒ ๋ณ๋๋ก ๊ฐ๋ฐํด์ผ ํ๋ฉด์ ์ถ๋ ฅ๋๋ค. GDI๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ถํธํจ์ ํด์ํ ์ ์์ต๋๋ค.
GDI+ ๋?
GDI+(Graphical Device Interface Plus)๋ ๊ธฐ์กด GDI๋ฅผ ํ์ฅํ ๋ฒ์ ์ด๋ค. GDI๊ฐ C์ธ์ด ๊ธฐ๋ฐ์ด๋ผ๋ฉด, GDI+๋ ๊ฐ์ฒด์งํฅ ํด๋์ค์ ์งํฉ์ผ๋ก ๋ํ๋ ํํ์ด๋ค. ์ด๋ ๋ ๋ง์ ๊ธฐ๋ฅ๊ณผ ์ ์ฐ์ฑ์ ์ ๊ณตํ๊ณ , ๊ทธ๋ํฝ ์์ ์ ๋ ์ฝ๊ฒ ์ํํ ์ ์๊ฒ ํ๋ค.
GDI+ ์ ํน์ง
- Graphics ๊ฐ์ฒด ์ฌ์ฉ: ํ๋ฉด์ ๋ชจ๋ ๊ทธ๋ํฝ ์ถ๋ ฅ์ Graphics ๊ฐ์ฒด๋ฅผ ํตํด์ ๊ฐ๋ฅํ๋ค.
- ๋ค์ํ ๋ํ ๊ทธ๋ฆฌ๊ธฐ ๋ฉ์๋: ๋ํ์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋๋ค์ด ์ค๋ฒ๋ก๋ฉ ํํ๋ก ๋ค์ํ๊ฒ ์ ๊ณต๋๋ค.
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ํ, ๋ธ๋ฌ์ ๋ฑ์ ๋ฆฌ์์ค ๊ฐ์ฒด๋ฅผ ์์ฑ ํ ๋ณ๋๋ก ํด์ ํ ํ์๊ฐ ์๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค๋ค.
- ๊ณ ๊ธ ๊ทธ๋ํฝ ์ฒ๋ฆฌ ๊ธฐ๋ฅ: ๊ทธ๋ผ๋ฐ์ด์ ๋ธ๋ฌ์, ์ํ๊ฐ ์ฒ๋ฆฌ, ํ ์คํธ ์ํฐ ์๋ฆฌ์์ฑ ๋ฑ๊ณผ ๊ฐ์ ๊ทธ๋ํฝ ์ฒ๋ฆฌ ๊ด๋ จ ๊ธฐ๋ฅ๋ค์ด ์ถ๊ฐ๋์๋ค.
GDI์ GDI+์ ์ฐจ์ด์
- GDI์ GDI+๋ ๊ฐ๊ฐ ๋ณ๋๋ก ์กด์ฌํ๋ฉฐ, GDI+๋ gdiplus.dll ํํ๋ก ์ ๊ณต๋๋ค. GDI+๋ ๊ธฐ์กด GDI์ ๊ธฐ๋ฅ์ ํ์ฅํ์ฌ ๋ ๋์ ๊ทธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค.์์ฝํ์๋ฉด,
- GDI๋ ์ด์์ฒด์ ์ ๊ทธ๋ํฝ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ ์ฌ์ด์์ ๊ทธ๋ํฝ ์ถ๋ ฅ์ ์ํํ๊ฒ ํด์ฃผ๋ ์ธํฐํ์ด์ค๋ก, ๋ค์ํ ์ ์กฐ์ฌ์ ์ฅ์น์๋ ํ์คํ๋ ๋ฐฉ์์ผ๋ก ๊ทธ๋ํฝ ์ถ๋ ฅ์ ์ง์ํ๋ค.
- GDI+๋ ๊ธฐ์กด GDI์ ๊ฐ์ฒด์งํฅ ํ์ฅ ๋ฒ์ ์ผ๋ก, ๋ค์ํ ๊ทธ๋ํฝ ์ฒ๋ฆฌ ๊ธฐ๋ฅ๊ณผ ํธ๋ฆฌํ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค. GDI+๋ gdiplus.dll ํํ๋ก ์กด์ฌํ๊ณ , GDI์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
ํ๊ณผ ๋ธ๋ฌ์
GDI+์์์ ํ๊ณผ ๋ธ๋ฌ์๋ ์ ๊ณผ ์์์ ๋ํ๋ด๋ ๊ทธ๋ํฝ ๊ฐ์ฒด์ด๋ค. ์ด๊ฒ์ ๋ณ๋์ ๋ฆฌ์์ค๋ก ์กด์ฌํ๊ณ , ์๋ฅผ ๋ค์ด ๋ฏธ์ ํ๋ ์ฌ๋์ด ์ฌ์ฉํ๋ ํ๋ ํธ์ ํ์ ์ฐ์์ํฌ ์ ์๋ค. ํ์ ์์ฑํ ๋์๋ ์์๊ณผ ์ ์ ๊ตต๊ธฐ๋ฅผ ์ง์ ํ์ฌ ์์ฑํ ์ ์๋ค.
1. GDI+ ์์์ ํ๊ณผ ๋ธ๋ฌ์
- ํ ์์ฑ: ์์๊ณผ ์ ์ ๊ตต๊ธฐ๋ฅผ ์ง์ ํ์ฌ ์์ฑํ๋ค. ์๋ฅผ ๋ค์ด, "Pen p(Color::Red, 5);"๋ ๋นจ๊ฐ์์ผ๋ก ๊ตต๊ธฐ๊ฐ 5์ธ ํ์ ์์ฑํ๋ค.
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ํ๊ณผ ๋ธ๋ฌ์๋ ๋ณ๋์ ๋ฆฌ์์ค๋ก ์กด์ฌํ๊ณ , ์ฌ์ฉ ํ์๋ ํด์ ํด์ฃผ์ด์ผ ํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์ง ์๋๋ค.
2. C++ ๊ธฐ๋ฐ์ MFC์์์ ํ๊ณผ ๋ธ๋ฌ์
- ๋ฆฌ์์ค๋ก ์กด์ฌ: MFC์์๋ ํ๊ณผ ๋ธ๋ฌ์๊ฐ ๋ณ๋์ ๋ฆฌ์์ค๋ก ์กด์ฌํ๋ค.
- ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ: ์ฌ์ฉ ํ์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฆฌ์์ค๋ฅผ ํด์ ํด์ฃผ์ด์ผ ํ๋ค.
3. C# ์์์ ํ๊ณผ ๋ธ๋ฌ์
- ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ: C#์์๋ ํ๊ณผ ๋ธ๋ฌ์์ ๋ฆฌ์์ค ๊ด๋ฆฌ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ํ๊ณผ ๋ธ๋ฌ์๋ฅผ ์ฌ์ฉํ ํ์ ๋ณ๋์ ํด์ ์์ ์ด ํ์ํ์ง ์๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ค.
ํ
ํ์ ์ ์ ๋ํ๋ด๋ ๊ทธ๋ํฝ ๊ฐ์ฒด๋ก, ์์๊ณผ ๊ตต๊ธฐ๋ฅผ ์ง์ ํ์ฌ ์์ฑ๋๋ค.
- ์์ ์ ํ: ์ ํ๋ ์์์ ์ ํํ๋ค. ์์์ RGB ๊ฐ์ผ๋ก ์ง์ ํ ์ ์๋ค. ๊ฐ ์์์ 0๋ถํฐ 255๊น์ง์ ๋ฒ์์์ ์กฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, (255,0,0)์ ๋นจ๊ฐ์์ ์๋ฏธํ๋ค.
- ๊ตต๊ธฐ ์ง์ : ์ ์ ๋๊ป๋ฅผ ์ง์ ํ๋ค. ์ ์ ๊ตต๊ธฐ๋ ํฝ์ ๋จ์๋ก ์ค์ ๋๋ค.
- ํ ์์ฑ: ์ ํํ ์์๊ณผ ๊ตต๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ํ์ ์์ฑํ๋ค. ์ด๋ ๊ฒ ์์ฑํ ํ์ ๊ทธ๋ํฝ ์์ ์์ ์ฌ์ฉ๋๋ค.
1. ํ์ด๋ ์ ์ ๋ํ๋ผ ๋ ์ฌ์ฉํ๋ ๊ทธ๋ํฝ ๊ฐ์ฒด
public Pen(Color color, float width);
2. ํ ์์ฑ ๋ฐฉ๋ฒ
Pen p = new Pen(Color.Red, 5);
Pen p = new Pen(ColorFromArgb(255,0,0),5);
๋ธ๋ฌ์
๋ธ๋ฌ์๋ ๋ํ์ ์ฑ์ธ ๋ ์ฌ์ฉํ๋ ๊ทธ๋ํฝ ๊ฐ์ฒด๋ก, ๋ค์ํ ์ข ๋ฅ๊ฐ ์๋ค. ๊ทธ ์ค์์๋ ๋จ์ ๋ธ๋ฌ์๋ ์ผ๋ฐ์ ์ธ ํํ์ ๋ธ๋ฌ์๋ ์ผ๋ฐ์ ์ธ ํํ์ ๋ธ๋ฌ์์ด๋ค.
๋ธ๋ฌ์ ์ข ๋ฅ
Brush ์ข ๋ฅ | ์ค๋ช |
๋จ์ ๋ธ๋ฌ์(SolidBrush) | ์ฑ์ธ ์์์ ์ธ์๋ก ์ ๋ฌํ์ฌ ์์ฑ |
ํด์น ๋ธ๋ฌ์(HatchBrush) | ์ง์ ๋๋ ๊ณก์ ์ผ๋ก ํจํด์ด ๊ทธ๋ ค์ง ๋ธ๋ฌ์ |
๊ทธ๋ผ๋์ธํธ ๋ธ๋ฌ์(Linear/Path GradientBrush) | ์์์ด ์์ํ ๋ณํ๋ ๊ทธ๋ผ๋ฐ์ด์ ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ ๋ธ๋ฌ์ |
ํ ์ค์ฒ ๋ธ๋ฌ์(TextureBrush) | ์ด๋ฏธ์ง๋ ํจํด์ ์ฌ์ฉํ์ฌ ์ฑ์ฐ๋ ๋ธ๋ฌ์ |
๋จ์ ๋ธ๋ฌ์
- ์ผ๋ฐ์ ์ธ ํํ์ ๋ธ๋ฌ์๋ก, ์ฑ์ธ ์์์ ์ง์ ํ์ฌ ์์ฑํ๋ค.
public SolidBrush(Color color);
- ๋จ์ ๋ธ๋ฌ์๋ฅผ ์์ฑํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
SolidBrush b = new SolidBrush(Color.Blue); // ๋ธ๋ฃจ ์์์ ๋จ์ ๋ธ๋ฌ์ ์์ฑ g.FillRectangle(b, 10, 10, 100, 100); // ์์ฑํ ๋จ์ ๋ธ๋ฌ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ฐํ ์ฑ์ฐ๊ธฐ g.FillRectangle(Brushes.Red, 130, 10, 100, 100);
- ๋ธ๋ฌ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ ์๋ ์๊ณ , ์์ฑ์์๊ฒ ์ ์ ์ผ๋ก ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์๋์๋ค.
- ๋จ์ ๋ธ๋ฌ์๋ ์๋ฆฌ๋๋ธ๋ฌ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๊ณ , ์ด๋ฅผ ์ ์ฉํ๋ฉด ํด๋น ์์ผ๋ก ๋ํ์ ์ฑ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ํ ๊ทธ๋ฆฌ๊ธฐ - Graphics ํด๋์ค
Graphics ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ธ ๋ํ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ API๋ฅผ ์ ๊ณตํ๋ ๋งค์ฐ ์ค์ํ ํด๋์ค์ด๋ค. ์ด ํด๋์ค๋ ๋ค์ํ ๋ํ์ ๊ทธ๋ฆด ์ ์๋ ๋ฉ์๋๋ฅผ ํฌํจํ๊ณ ์๋ค.
์ฃผ์ ๋ฉ์๋
Graphics ํด๋์ค๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. Draw ๋ฉ์๋๋ ์ ์ ๊ทธ๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๊ณ , Fill ๋ฉ์๋๋ ๋ํ์ ์ฑ์ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ค์์ ๊ทธ ์ค ์ผ๋ถ ๋ฉ์๋์ด๋ค.
๋ฉ์๋ | ์ค๋ช |
DrawArc | ์ขํ, ๋๋น, ๋์ด์ ์์ผ๋ก ์ง์ ๋ ํ์์ ๋ถ๋ถ์ ๋ํ๋ด๋ ํธ๋ฅผ ๊ทธ๋ฆผ |
DrawBezier | 4๊ฐ์ Point ๊ตฌ์กฐ์ฒด๋ก ์ ์๋๋ 3์ฐจ์ ๊ณก์ ์คํ๋ผ์ธ์ ๊ทธ๋ฆผ |
DrawCurve | Point ๊ตฌ์กฐ์ฒด์ ์ง์ ๋ ๋ฐฐ์ด์ ๋ฐ๋ผ ์นด๋๋ ์คํ๋ผ์ธ์ ๊ทธ๋ฆผ |
DrawEllipse | ์ขํ, ๋์, ๋๋น ์์ผ๋ก ์ง์ ๋ ๊ฒฝ๊ณ ์ฌ๊ฐํ์ ์ํด ์ ์๋๋ ํ์์ ๊ทธ๋ฆผ |
DrawIcon | ์ง์ ๋ ์์ด์ฝ์ ์ํด ๋ํ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ ์ขํ์ ๊ทธ๋ฆผ |
DrawImage | ์ง์ ๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ ์์น์ ๊ทธ๋ฆผ |
DrawLine | ์ขํ์ ์ํด ์ง์ ๋ ๋๊ฐ์ ์ ์ ์ฐ๊ฒฐํ๋ ์ ์ ๊ทธ๋ฆผ |
FillEllipse | ์ขํ, ๋๋น, ๋์ด์ ์ํด ์ง์ ๋ ์ฌ๊ฐํ ๋ด๋ถ์ ๋ด์ ํ๋ ์์ ์ฑ์ |
FillRectangle | ์ขํ, ๋๋น, ๋์ด ์ํด ์ง์ ๋ ์ฌ๊ฐํ์ ๋ด๋ถ๋ฅผ ์ฑ์ |
FillRegion | Region์ ๋ด๋ถ๋ฅผ ์ฑ์ |
Graphics ํด๋์ค์ ๊ทธ๋ํฝ ๊ฐ์ฒด ์์ฑ
Form ํด๋์ค์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ Paint ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํด์ผํ๋ค. ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๊ธฐ๋ณธ ํ๊ฒฝ์ ์ค์ ํ๊ณ , ๋ค๋ฅธ ๋ฉ์๋์์๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋๋ก ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- Paint ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ ์์ฑ: Form ํด๋์ค์ Paint ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ๋ค.
Form1_Paint
- Paint ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ ๋ด๋ถ์์ ๊ทธ๋ํฝ ๊ฐ์ฒด ์์ฑ: Form1_Paint ๋ฉ์๋ ๋ด๋ถ์์ Graphics ๊ฐ์ฒด๋ฅผ ์์ฑ
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; }
- ๋ค๋ฅธ ๋ฉ์๋์์ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ: ๋ค๋ฅธ ๋ฉ์๋์์ ๊ทธ๋ฆผ์ ๊ทธ๋ ค์ผ ํ ๊ฒฝ์ฐ CreateGraphics() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ์์ฑ
private void Form1_Load(object sender, PaintEventArgs e) { Graphics g = this.CreateGraphics(); }
Form1_Paint ์ด๋ฒคํธ์์ ์ ๊ทธ๋ฆฌ๊ธฐ
์ง๊ธ๊น์ง ํผ ๊ธฐ๋ฐ์์ ์ปจํธ๋กค๋ง ๋ฐฐ์นํ์ง๋ง, ์ด์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋ ํ๊ฒฝ์ ๋ง๋ค ์ ์๋ค. ๊ทธ๋ฆผํ์ ๋ง๋ค๊ธฐ ์ํด์๋ Form1_Paint ์ด๋ฒคํธ๊ฐ ํ์ํ๋ค.
๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ณธ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ Form1_Paint๋ฐ์ ์๋ค. ๋ฌด์กฐ๊ฑด ํด๋น ์์ญ์์ ๊ทธ๋ ค์ผํ๋ค. Form์ด ๋ก๋ ๋์์ ๋, ๋ค๋ฅธ ์ด๋ฒคํธ์์ ๊ทธ๋ฆฌ๊ณ ์ถ๋ค๋ฉด, ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ์ธ์์ ์ผ๋ก ๋ง๋ค์ด์ค์ผํ๋ค. ์ธ๋ถ์์ ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ CreateGraphics()๋ก ๋ง๋ค์ด์ค์ผํ๋ค.
1. ๊ธฐ๋ณธ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์ฑ
ํผ ์ ํ ํ paint ์ด๋ฒคํธ๊ฐ ์๋ค. ์์ฑ์์ ๋๋ธ paint๋ฅผ ๋๋ธํด๋ฆญํ๋ฉด, ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์ฑ
2. PaintEvent ํธ๋ค๋ฌ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด์ ์๋ ์ด์
์๋์ ๊ฐ์ด ์ด๋ฒคํธํธ๋ค๋ฌ๊ฐ ์์ฑ๋์๋ค. ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด์ ์๋ค. PaintEvent ํธ๋ค๋ฌ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด์ ์๋ ์ด์ ๋ PaintEventArgs ํด๋์ค ์์์ Graphics ๊ฐ์ฒด๊ฐ ๋ด์ฅ๋์ด ์๋ค. ๋ค๋ฅธ ๊ณณ์๋ ์๋ค!! ๋ค๋ฅธ ๊ณณ์์๋ Graphics ์๊ท๋จผํธ๋ฅผ ์ฐ์ง ์๋๋ค.
new ์ฐ์ฐ์๋ก Graphics๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๋ด์ฅํ๊ณ ์๋ ๊ฒ์ ๊ฐ์ ธ์จ๋ค. Graphics๊ฐ ํ๋กํผํฐ๋ก ๋์ด์๋ค.
๋ด๋ถ์์ returnํจ.
3. PaintEvent ์ฒ๋ฆฌ๊ธฐ ๋ด๋ถ์ ๊ทธ๋ํฝ ๊ฐ์ฒด ์์ฑ
4. ์ฝ๋ ์์ฝ ์ค๋ช
- Graphics ๊ฐ์ฒด ์์ฑ
- Graphics g = e.Graphics;
- Paint ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ์์ ์ ๊ณต๋๋ e.Graphics๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ์์ฑ
- Pen ๊ฐ์ฒด ์์ฑ
- Pen p = new Pen(Color.Red, 5);
- ๋นจ๊ฐ์(Color.Red)๊ณผ ๊ตต๊ธฐ 5๋ฅผ ๊ฐ์ง Pen ๊ฐ์ฒด๋ฅผ ์์ฑ
- ์ขํ์ค์
- Point start = new Point(50,50);
- Point end = new Point(250,250);
- ์์์ ๊ณผ ๋์ ์ ๋ํ๋ด๋ Point ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์์์ ์(50,50), ๋์ ์(250,250)์ด๋ค.
- ์ ๊ทธ๋ฆฌ๊ธฐ
- g.DrawLine(p, start, end);
- Graphics๊ฐ์ฒด์ DrawLine ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๊ทธ๋ฆฐ๋ค.
- p๋ Pen๊ฐ์ฒด start์ end๋ ์์์ ๊ณผ ๋์ ์ขํ์ด๋ค.
5. ์ถ๋ ฅ UI
์์ฝํ์๋ฉด, Graphics๊ฐ์ฒด์ DrawLine๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ๊ณผ ๋์ ์ฌ์ด์ ์ ์ ๊ทธ๋ฆด์ ์๋ค.
์ด๋ก ์ธํด ํผ์ ๋ค์ํ ๊ทธ๋ํฝ ์์ ์ ์ํํ ์ ์๋ ๊ณต๊ฐ์ผ๋ก ํ์ฉ๋ ์ ์๋ค.
์ฌ๊ฐํ, ์ํ ๊ทธ๋ฆฌ๊ธฐ
์ฌ๊ฐํ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ ์์ ์ขํ(x, y)์ ๋๋น, ๋์ด๋ฅผ ์ง์ ํด์ผ ํ๋ค. ์ด ์ ๋ณด๋ก Graphics ๊ฐ์ฒด์ Pen ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ฐํ์ ์ํ๋ ์์น์ ํฌ๊ธฐ๋ก ๊ทธ๋ฆด ์ ์๋ค. ์๋ ์ฝ๋ ์์ ๋ฅผ ํตํด ํผ์ ์ฌ๊ฐํ์ ๊ทธ๋ฆด ์ ์๋ค.
Rectangle ํด๋์ค ๋ฉ์๋
์ด Rectangle ํด๋์ค์์ ์ ๊ณตํด์ฃผ๋ ๋ฉ์๋๊ฐ 2๊ฐ์ง ์๋ค.
- DrawRectangle: ์ฌ๊ฐํ์ ํ ๋๋ฆฌ๋ฅผ ๊ทธ๋ ค์ฃผ๋ ๋ฉ์๋
- FillRectangle: ์ฌ๊ฐํ์ ๋ด๋ถ๋ฅผ ์ฑ์ฐ๋ ๋ฉ์๋
์ฝ๋ ์์
์ถ๋ ฅ UI
PaintEvent๋ ์ธ์ ๋ฐ์ํ ๊น?
Form1.Designer.cs ๊ฐ๋ฉด PaintEventHandler๊ฐ ๋ฐ์์ด ๋์์๋, form1_Paint๊ฐ ํธ์ถ๋๋๋ก ์ฐ๊ฒฐ ๋์ด์๋ค.
์ฆ, ํ๋ฉด์ด ๋ณด์ฌ์ง๋, ํด๋น ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.