WTLÀº GDI¿ÀºêÁ§Æ®ÀÇ ¸®Á¯À» CRgnT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö´Âbool°ªÀ¸·Î trueÀÇ °æ¿ì´Â ¼Ò¸êÀÚ·Î DeleteObject()¸¦ È£ÃâÇØ falseÀÇ °æ¿ì´Â È£ÃâÇÏÁö ¾Ê½À´Ï´Ù. atlgdi.h Çì´õ¿¡¼´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.
|
// atlgdi.h³» typedef CRgnT<false> CRgnHandle; typedef CRgnT<true> CRgn; |
¡¡WTLÀÇ CRgnŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ¾Æ·¡¿¡ ³ªÅ¸³»´Â °ÍÀº CRgnŬ·¡½º¸¦ »ç¿ëÇØ Ŭ¶óÀÌ¾ðÆ® ¿µ¿ªÀÇ Áß¾Ó¿¡ "Arial
Black"ÆùÆ®ÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ» ¹¦È ÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// WM_PAINT¸Þ¼¼Áö Çڵ鷯 void OnPaint(HDC /*hDC*/){ CPaintDC
dc(m_hWnd); CRect
rect; GetClientRect(rect); // »çÀÌÁî 20 Æ÷ÀÎÆ®ÀÇ "Arial Black" ÆùÆ®¸¦
ÀÛ¼ºÇØ ¼±Åà CFont
font; font.CreatePointFont(200,
_T("Arial Black")); HFONT hOldFont
= dc.SelectFont(font); // ÆÐ½º¸¦ ÀÛ¼º dc.BeginPath(); dc.DrawText(_T("Hello,
ATL/WTL"), -1, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); dc.EndPath(); // ¿øÀÇ ÆùÆ®¸¦ ¼±Åà dc.SelectFont(hOldFont); CRgn
rgn1; rgn1.CreateFromPath(dc); CRgn
rgn2;
rgn2.CreateRectRgnIndirect(rect); // ¸®Á¯À» ÇÕ¼º rgn1.CombineRgn(rgn1,
rgn2, RGN_XOR); // ¸®Á¯À» Ŭ¸®ÇÎ ¿µ¿ªÀ¸·Î¼ ¼±Åà dc.SelectClipRgn(rgn1); // ±½±â1·Î ÃÊ·ÏÀÇ ½Ç¼±ÀÇ ÆæÀ» ÀÛ¼ºÇØ , ¼±Åà CPen
pen; pen.CreatePen(PS_SOLID,
1, RGB(0, 128, 0)); HPEN hOldPen
= dc.SelectPen(pen); // ¼¶ ¸ð¾çÀ» ¹¦È for(int i=0; i<rect.bottom; i+=2){ dc.MoveTo(0, i); dc.LineTo(rect.right, i); } // ¿øÀÇ ÆæÀ» ¼±Åà dc.SelectPen(hOldPen); } |
¡¡ÀÌ ¿¹¿¡¼´Â ¿ì¼± ÆùÆ®¸¦ ÀÛ¼ºÇØ Ä³¸¯ÅÍ ¶óÀÎÀ» ¹¦È ÇØ ±×°ÍÀ» ¹ÙÅÁÀ¸·Î ÆÐ½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ±× ÆÐ½º·ÎºÎÅÍ ¸®Á¯À» ÀÛ¼ºÇØ ÇÑÃþ ´õ Ŭ¶óÀÌ¾ðÆ® ±¸ÇüÀ¸·ÎºÎÅÍ ¸®Á¯À» ÀÛ¼ºÇØ ÀÌ µÎ °³ÀÇ ¸®Á¯À» CombineRgn()¿¡ ÀÇÇØ ÇÕ¼ºÇÕ´Ï´Ù. CombineRgn()ÀÇ Á¦3Àμö¿¡´ÂRGN_XORÀ» ÁöÁ¤ÇØ ÀÖÀ¸¹Ç·Î rgn1(ij¸¯ÅÍ ¶óÀÎ ¸®Á¯)rgn2(Ŭ¶óÀÌ¾ðÆ® ±¸Çü ¸®Á¯) ¸¦ ÇÕÇÑ °ÍÀ¸·ÎºÎÅÍ ¼·Î °ãÄ£ ºÎºÐÀ» ¾ø¾Ø ¸®Á¯ÀÌ ÀÛ¼ºµË´Ï´Ù.
´ÙÀ½¿¡ ±× ÇÕ¼ºÇÑ ¸®Á¯À» Ŭ¸®ÇÎ ¿µ¿ªÀ¸·Î¼ ¼±ÅÃÇØ Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡ ÃÊ·ÏÀÇ ¼¶ ¸ð¾çÀ» ¹¦È ÇÕ´Ï´Ù. ÀÌ ¶§, Ŭ¸®ÇÎ ¿µ¿ªÀ¸·Î¼ ¼±ÅÃµÈ ¸®Á¯ ºÎºÐ¿¡´Â ¸ð¾çÀÌ ¹¦È µÇÁö ¾Ê±â ¶§¹®¿¡ Èò ¹è°æÀÌ ±×´ë·Î º¸ÀÔ´Ï´Ù.