๋ฐ˜์‘ํ˜•

์ด์ „ ํฌ์ŠคํŒ…์—๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ '์„  / ์ง์‚ฌ๊ฐํ˜• / ์›ํ˜•'์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.


๊ณ„์†ํ•ด์„œ ์ƒ‰์ƒ์„ ์ž…ํ˜€ ๋„ํ˜•์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒ‰์ƒ์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” Object๋“ค๊ณผ ๊ฐ™์ด ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


Pen

Pen์€ ์„ ์„ ๊ทธ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Pen์—๋Š” ์„ ์˜ ๋ชจ์–‘์ด๋‚˜ ์ƒ‰์ƒ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MFC์—์„œ Pen์€ CPen ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์˜ ์˜ˆ์ œ๋กœ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

// Picture control ์œผ๋กœ๋ถ€ํ„ฐ DC ์–ป๊ธฐ.
	CClientDC dc(GetDlgItem(IDC_PC_VIEW));

	// ์ƒ์„ฑํ•  myPen๊ณผ ์‚ฌ์šฉ์ค‘์ด๋˜ Pen ์†์„ฑ์„ ๋ฐฑ์—…ํ•  pOldPen์„ ์ •์˜ํ•œ๋‹ค.
	CPen myPen, *pOldPen;

	// ๋‹จ์ƒ‰, ๋‘๊ป˜ 2, Red ์ƒ‰์ƒ์˜ ์†์„ฑ์„ ๊ฐ€์ง„ ํŽœ์„ ์ƒ์„ฑํ•œ๋‹ค.
	myPen.CreatePen(PS_SOLID, 2, RGB(255, 0, 0));

	// ์ƒˆ๋กœ ๋งŒ๋“  myPen์„ ์‚ฌ์šฉํ•จ๊ณผ ๋™์‹œ์— ์ด์ „์— ์‚ฌ์šฉ์ค‘์ด๋˜ Pen ์†์„ฑ์„ ๋ฐฑ์—…ํ•œ๋‹ค.
	pOldPen = dc.SelectObject(&myPen);
	
	// ํ˜„์žฌ ์œ„์น˜๋ฅผ (100, 100)์œผ๋กœ ์ด๋™ํ•˜๊ธฐ.
	dc.MoveTo(100, 100);

	// ์ง์„ ์„ ํ˜„์žฌ ์œ„์น˜์ธ (100, 100) ๋ถ€ํ„ฐ (200, 200) ๊นŒ์ง€ ๊ทธ๋ฆฌ๊ธฐ.
	dc.LineTo(200, 200);

	// ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฐฑ์—…ํ•œ Pen ์†์„ฑ์„ ๋‹ค์‹œ ์„ ํƒํ•œ๋‹ค.
	dc.SelectObject(pOldPen);
	
	// ์ƒ์„ฑํ•œ Pen์„ ์ œ๊ฑฐํ•œ๋‹ค.
	myPen.DeleteObject();

๊ฐ‘์ž๊ธฐ ๋ณต์žกํ•ด์กŒ์ฃ ? GDI Object๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ผญ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


์‚ฌ์šฉ ์ค‘์ด๋˜ ์†์„ฑ์„ ๋ฐฑ์—…ํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ญ์ƒ ์„ ์–ธํ•œ๋‹ค.

GDI Object๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด์ „์— ์‚ฌ์šฉ์ค‘์ด๋˜ ์†์„ฑ์„ ๋ฐฑ์—…ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณ„์†ํ•ด์„œ ๋งŒ๋“  ์†์„ฑ์ด ๋ฎ์—ฌ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋Œ๋ฆด ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์›๋ž˜ ์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์„ ํƒ๋˜์–ด ์žˆ์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์ƒ์„ฑ์„ ํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ํ•ด์ œํ•œ๋‹ค.

์œ„ ์˜ˆ์ œ์—์„œ CreatePen ์„ ํ˜ธ์ถœํ•˜๊ณ  ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด DeleteObject๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์™€๊ฐ™์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ GDI Object๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์–ด๋Š ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์ด ๋ฉˆ์ถœ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€ป ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋Š” '์ž‘์—… ๊ด€๋ฆฌ์ž'์—์„œ ํ”„๋กœ์„ธ์Šค๋ณ„๋กœ 'GDI ๊ฐœ์ฒด'๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 

๊ทธ ์™ธ์— ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜ ๊ฐ์ง€ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Brush

Brush๋Š” ๋ฉด์— ์ƒ‰์„ ์ฑ„์šธ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

MFC์—์„œ Brush๋Š” CBrush ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์˜ ์˜ˆ์ œ๋กœ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

// Picture control ์œผ๋กœ๋ถ€ํ„ฐ DC ์–ป๊ธฐ.
	CClientDC dc(GetDlgItem(IDC_PC_VIEW));

	// ์ƒ์„ฑํ•  myBrs์™€ ์‚ฌ์šฉ์ค‘์ด๋˜ Brush ์†์„ฑ์„ ๋ฐฑ์—…ํ•  pOldBrs๋ฅผ ์ •์˜ํ•œ๋‹ค.
	CBrush myBrs(RGB(255, 0, 0)), *pOldBrs;

	// ์ƒˆ๋กœ ๋งŒ๋“  myBrs๋ฅผ ์‚ฌ์šฉํ•จ๊ณผ ๋™์‹œ์— ์ด์ „์— ์‚ฌ์šฉ์ค‘์ด๋˜ Brush ์†์„ฑ์„ ๋ฐฑ์—…ํ•œ๋‹ค.
	pOldBrs = dc.SelectObject(&myBrs);

	// (100,100) ๋ถ€ํ„ฐ (200,200) ๊นŒ์ง€์˜ ์ง์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ.
	dc.Rectangle(100, 100, 200, 200);

	// ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฐฑ์—…ํ•œ Brush ์†์„ฑ์„ ๋‹ค์‹œ ์„ ํƒํ•œ๋‹ค.
	dc.SelectObject(pOldBrs);

	// ์ƒ์„ฑํ•œ Brush๋ฅผ  ์ œ๊ฑฐํ•œ๋‹ค.
	myBrs.DeleteObject();

์œ„ ์˜ˆ์ œ๋Š” ์‚ฌ์‹ค FillSolidRect(100, 100, 100, 100, RGB(255, 0, 0)); ์„ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅผ๊ฒŒ ์—†์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต Hatch Brush๋‚˜ Pattern Brush๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


Hatch / Pattern Brush ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ MSDN ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

Hatch Brush / Pattern Brush


๋งŒ์•ฝ, ๋„ํ˜•์˜ ์„ ๊ณผ ๋ฉด ์ƒ‰์ƒ ๋ชจ๋‘๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด ์œ„ ๋‘ ๊ณผ์ •์„ ์„ž์œผ๋ฉด ๋˜๊ฒ ์ฃ ?

์ƒ˜ํ”Œ์ฝ”๋“œ๋ฅผ ์ฒจ๋ถ€ํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

GDI_Exam.zip

๋ฐ˜์‘ํ˜•