GDI+ÀÇ ¹®ÀÚ¿ Ãâ·Â ±â´ÉÀº GDI¿¡ ºñÇؼ ¾ÈƼ ¾Ë¸®¾Æ½ÌÀÌ °¡´ÉÇÏ´Ù´Â °Í ¿Ü¿¡´Â ½Ç¿ëÀûÀ¸·Î ¿ì¼öÇÑ ¸éÀÌ º°·Î ¾ø´Ù. ´ÜÁö, ÆùÆ®¸¦ »ý¼ºÇÏ°í ¼±ÅÃÇÏ´Â ¹æ½Ä°ú ¹®ÀÚ¿ Ãâ·Â¿¡ ´ëÇÑ ¿É¼ÇÀÌ Á» ¸¹´Ù´Â Á¤µµ¿¡ ºÒ°úÇÏ´Ù. ¹°·Ð GDI+ÀÇ ¶Ç´Ù¸¥ ´É·Â, ¿¹¸¦ µé¾î ±×·¡µð¾ðÆ® ºê·¯½Ã³ª ¾ËÆÄ ºí·£µù µîÀÇ ±â´É°ú °áÇյǸé GDIº¸´Ù´Â ÈξÀ ´õ ´Ù¾çÇÑ ÇüÅÂÀÇ Ãâ·ÂÀ» ÇÒ ¼ö ÀÖ´Ù.
´Ü¼øÈ÷ ¹®ÀÚ¿À» Ãâ·ÂÇÏ´Â °Í¸¸ÀÌ ¸ñÀûÀ̶ó¸é GDI+ÀÇ ÅؽºÆ® Ãâ·Â ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù GDIÀÇ TextOut ÇÔ¼ö¸¦ ¾²´Â °ÍÀÌ ÈξÀ ´õ °£ÆíÇÏ´Ù. TextOutÀº ÆùÆ®¸¦ ¸¸µéÁö ¾Ê¾Æµµ ½Ã½ºÅÛ ÆùÆ®¸¦ Àû¿ëÇϸç ANSI ¹®ÀÚ¿µµ Ãâ·ÂÇÒ ¼ö ÀÖ°í ÀÌ¹Ì Àͼ÷ÇØ ÀÖÀ¸¹Ç·Î º°´Ù¸¥ ³ë·ÂÀ» µéÀÌÁö ¾Ê°íµµ ¹®ÀÚ¿À» ½±°Ô Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.
¹®ÀÚ¿À» Ãâ·ÂÇÏ´Â ÇÔ¼ö´Â DrawStringÀÌ¸ç ´Ù¸¥ ÀÛµµ ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î Graphics Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö·Î Æ÷ÇԵǾî ÀÖ´Ù. Ãâ·Â ¿µ¿ªÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ý°ú ¼±Åà ¿É¼ÇÀÇ À¯¹«¿¡ µû¶ó ¼¼ °¡Áö ¹öÀüÀÇ ÇÔ¼ö°¡ ÁغñµÇ¾î Àִµ¥ ¾ÕÂÊ¿¡¼ºÎÅÍ ¼¼ °³ÀÇ Àμö´Â °øÅëÀûÀÌ¸ç ³ª¸ÓÁö Àμöµé·Î ¿É¼ÇÀ̳ª ¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù.
Status DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush);
Status DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat, const Brush *brush);
Status DrawString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, const Brush *brush);
»ó´ëÀûÀ¸·Î °£´ÜÇÑ Ã¹ ¹ø° ÇÔ¼öºÎÅÍ ¾Ë¾Æº¸ÀÚ. stringÀº Ãâ·ÂÇÒ ¹®ÀÚ¿ÀÌµÇ ¹Ýµå½Ã À¯´ÏÄÚµå ¹®ÀÚ¿À̾î¾ß ÇÑ´Ù. length´Â Ãâ·ÂÇÒ ¹®ÀÚ¿ÀÇ ±æÀÌÀÌµÇ ³Î Á¾·á ¹®ÀÚ¿À̸é -1·Î ÁöÁ¤ÇÏ¸é µÈ´Ù. font´Â Ãâ·Â¿¡ »ç¿ëÇÒ ÆùÆ®¸¦ ÁöÁ¤ÇÏ´Â Font °´Ã¼ÀÇ Æ÷ÀÎÅÍÀ̸ç GDI+´Â ÀÌ ÆùÆ®·Î ¹®ÀÚ¿À» Ãâ·ÂÇÑ´Ù. ÆùÆ®¸¦ ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇؼ´Â ´ÙÀ½ Ç׿¡¼ µû·Î ¿¬±¸ÇØ º¼ °ÍÀÌ´Ù. originÀº ¹®ÀÚ¿À» Ãâ·ÂÇÒ ÁÂÇ¥À̸ç brush´Â ¹®ÀÚ¿ÀÇ È¹À» ä¿ï ºê·¯½ÃÀÌ´Ù.
¹®ÀÚ¿ÀÇ È¹ÀÌ ±½°Å³ª ±×·¡ÇÈ ¹®ÀÚ(¡Ú,¢¼,¢Ï)ó·³ ³»ºÎ¿¡ ³ÐÀº ¿µ¿ªÀÌ ÀÖ´Â ±ÛÀÚÀÇ °æ¿ì ȹÀÌ ¼±À¸·Î Ç¥½ÃµÇÁö ¾Ê°í ¸éÀ¸·Î Ç¥½ÃµÇ´Âµ¥ À̶§ ³»ºÎ¸¦ ä¿ï ºê·¯½Ã°¡ ÇÊ¿äÇÏ´Ù. Åë»ó ´Ü»ö ºê·¯½Ã¸¦ ÁöÁ¤Çϴµ¥ ÀÌ ºê·¯½ÃÀÇ »ö»óÀÌ °ð Ãâ·ÂµÉ ¹®ÀÚ¿ÀÇ »ö»óÀÌ µÈ´Ù. ¹®ÀÚ¿ Ãâ·Â Å×½ºÆ®¸¦ À§ÇØ DrawString ¿¹Á¦¸¦ ¸¸µé°í ´ÙÀ½ Äڵ带 ÀÔ·ÂÇØ º¸ÀÚ.
¿¹ Á¦ : DrawString |
void OnPaint(HDC hdc)
{
Graphics G(hdc);
Font F(L"Arial",20,FontStyleRegular,UnitPixel);
PointF P(10.0f,10.0f);
SolidBrush B(Color(0,0,255));
G.DrawString(L"Test String",-1,&F,P,&B);
}
ArialÀÇ 20Çȼ¿ º¸Åë ¸ð¾çÀÇ ÆùÆ®¸¦ ¸ÕÀú »ý¼ºÇØ ³õ°í (10,10) ÁÂÇ¥¿¡ "Test String"À̶ó´Â ³Î Á¾·á ¹®ÀÚ¿À» ÆĶõ»ö ºê·¯½Ã·Î Ãâ·ÂÇß´Ù. ȹÀÌ ±½Àº ±Û²Ã¿¡ ´ëÇØ ÇØÄ¡ ºê·¯½Ã³ª ±×·¡µð¾ðÆ® ºê·¯½Ã¸¦ »ç¿ëÇÏ¸é ¹®ÀÚ¿ÀÇ È¹ ³»ºÎ¸¦ »ö´Ù¸£°Ô ä»öÇÒ ¼öµµ ÀÖ°í ¹ÝÅõ¸íÇÑ ºê·¯½Ã¸¦ »ç¿ëÇϸé Á¡Á¡ Èå·ÁÁö´Â ±ÛÀÚ¸¦ ¸¸µé ¼öµµ ÀÖ´Ù.
Font F(L"±Ã¼",100,FontStyleBold,UnitPixel);
HatchBrush HB(HatchStyleWeave,Color(255,0,0),Color(255,255,0));
LinearGradientBrush GB(Point(10,0),Point(600,0),Color(0,255,0),Color(0,0,255));
G.DrawString(L"ÇØÄ¡ ºê·¯½Ã",-1,&F,PointF(10.0f,10.0f),&HB);
G.DrawString(L"±×·¡µð¾ðÆ®",-1,&F,PointF(10.0f,110.0f),&GB);
DrawStringÀÇ µÎ ¹ø° ¿øÇüÀº ¹®ÀÚ¿À» Ãâ·ÂÇÏ´Â ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â StringFormat °´Ã¼¸¦ Àμö·Î ¹Þ¾ÆµéÀ̴µ¥ ÀÌ °´Ã¼ÀÇ »ý¼ºÀÚ·Î ¿©·¯ °¡Áö Ç÷¡±×¸¦ OR·Î Á¶ÇÕÇÏ¿© ÁöÁ¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº Ç÷¡±×°¡ Á¦°øµÈ´Ù.
Ç÷¡±× |
¼³¸í |
StringFormatFlagsDirectionRightToLeft |
¹®ÀÚ¿À» ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊÀ¸·Î Ãâ·ÂÇÑ´Ù. |
StringFormatFlagsDirectionVertical |
¼¼·Î·Î Ãâ·ÂÇÑ´Ù. |
StringFormatFlagsNoFitBlackBox |
ÀϺΠ¹®ÀÚ°¡ Ãâ·Â ¿µ¿ª¿¡ °ÉÄ¥ ¼öµµ ÀÖ´Ù. |
StringFormatFlagsDisplayFormatControl |
Á¦¾î ¹®ÀÚ¸¦ Ãâ·ÂÇÑ´Ù. |
StringFormatFlagsNoFontFallback |
ÆùÆ®¿¡ ¾ø´Â ¹®ÀÚ¸¦ ´ëü ¹®ÀÚ·Î ¹Ù²ÙÁö ¾Ê´Â´Ù. |
StringFormatFlagsMeasureTrailingSpaces |
ÆøÀ» °è»êÇÒ ¶§ ÈÄÇà °ø¹éÀÇ ÆøÀ» Æ÷ÇÔÇÑ´Ù. |
StringFormatFlagsNoWrap |
»ç°¢ ¿µ¿ª¿¡ Ãâ·ÂÇÒ ¶§ ÀÚµ¿ ÁٹٲÞÀ» ÇÏÁö ¾Ê´Â´Ù. |
StringFormatFlagsLineLimit |
¿ÏÀüÈ÷ ´Ù º¸ÀÌ´Â ÁÙ¸¸ Ãâ·ÂÇÑ´Ù. |
StringFormatFlagsNoClip |
Ãâ·Â ¿µ¿ªÀ» ¹þ¾î³ªµµ ¹®ÀÚ¿À» ÀÚ¸£Áö ¾Ê´Â´Ù. |
Ç÷¡±×ÀÇ À̸§ÀÌ ¿ö³« ¼³¸íÀûÀÌ¾î¼ ¼³¸íÀ» µû·Î ÀÐÁö ¾Ê¾Æµµ µÉ Á¤µµ·Î ½±´Ù. ´ÙÀ½ ÄÚµå´Â ¹®ÀÚ¿À» ¼öÁ÷À¸·Î Ãâ·ÂÇÑ´Ù.
Font F(L"Arial",20,FontStyleRegular,UnitPixel);
PointF P(10.0f,10.0f);
SolidBrush B(Color(0,0,255));
StringFormat SF(StringFormatFlagsDirectionVertical);
G.DrawString(L"Test String",-1,&F,P,&SF,&B);
ÀÌ¿Ü¿¡ Á¤·ÄÀ̳ª ÅÇ Á¤ÁöÁ¡ µîÀ» ¼³Á¤ÇÏ´Â ¸â¹ö ÇÔ¼öµéµµ Àִµ¥ »ç°¢ ¿µ¿ª¿¡ ¹®ÀÚ¿À» Ãâ·ÂÇÒ ¶§ ÁÖ·Î »ç¿ëµÈ´Ù. DrawStringÀÇ ¼¼ ¹ø° ¿øÇüÀº »ç°¢ ¿µ¿ª¾È¿¡ ¹®ÀÚ¿À» Ãâ·ÂÇϴµ¥ GDIÀÇ DrawText ÇÔ¼ö¿Í À¯»çÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù. º°´Ù¸¥ ¿É¼ÇÀ» ÁÖÁö ¾ÊÀ» ¶§´Â StringFormatÀ» NULL·Î ÁöÁ¤ÇÑ´Ù.
Font F(L"Arial",20,FontStyleRegular,UnitPixel);
RectF R(10,10,200,200);
SolidBrush B(Color(0,0,255));
Pen P(Color(0,0,0));
G.DrawRectangle(&P,R);
G.DrawString(L"DrawString function draws a string in layout rectangle"
L" with a specified font.",-1,&F,R,NULL,&B);
Ưº°ÇÑ Æ÷¸ËÀ» ÁöÁ¤ÇÏ°í ½ÍÀ¸¸é StringFormat °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ Æ÷¸ËÀ» ÁöÁ¤Çϴµ¥ ´ÙÀ½ ÄÚµå´Â ¹®ÀÚ¿À» Áß¾ÓÀ¸·Î Á¤·ÄÇÑ´Ù.
Font F(L"Arial",20,FontStyleRegular,UnitPixel);
RectF R(10,10,200,200);
SolidBrush B(Color(0,0,255));
Pen P(Color(0,0,0));
StringFormat SF;
SF.SetAlignment(StringAlignmentCenter);
SF.SetLineAlignment(StringAlignmentCenter);
G.DrawRectangle(&P,R);
G.DrawString(L"DrawString function draws a string in layout rectangle"
L" with a specified font.",-1,&F,R,&SF,&B);
StringFormat Ŭ·¡½º¿¡´Â ¹®ÀÚ¿ÀÇ Á¤·Ä ¹æ½ÄÀ̳ª ÅÇ Á¤ÁöÁ¡, & ¹®ÀÚ ´ÙÀ½ÀÇ ¼îÆ®ÄÆ ¹®ÀÚ ÁöÁ¤À» ó¸®ÇÏ´Â ¹æ½ÄÀ» º¯°æÇÒ ¼ö ÀÖ´Â ¸â¹ö ÇÔ¼öµéÀÌ ÁغñµÇ¾î ÀÖ´Ù.
GDI+´Â ÆùÆ®¸¦ Font Ŭ·¡½º·Î Ç¥ÇöÇÑ´Ù. Font °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ DrawString ÇÔ¼ö·Î ÀÌ °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ¸é ¹®ÀÚ¿ Ãâ·Â¿¡ ÀÌ ÆùÆ®°¡ »ç¿ëµÈ´Ù. ´ÙÀ½Àº FontÀÇ »ý¼ºÀÚµéÀε¥ ÀÌ¿Ü¿¡ GDI¿ÍÀÇ È£È¯¼º À¯Áö¸¦ À§ÇØ LOGFONT ±¸Á¶Ã¼³ª HFONT¸¦ ÃëÇÏ´Â Àμöµéµµ Á¤ÀǵǾî ÀÖ´Ù.
Font(const WCHAR *familyName, REAL emSize, INT style, Unit unit, const FontCollection *fontCollection);
Font(const FontFamily *family, REAL emSize, INT style, Unit unit);
»ó´ëÀûÀ¸·Î °£´ÜÇÑ Ã¹ ¹ø° »ý¼ºÀÚºÎÅÍ ¾Ë¾Æº¸ÀÚ. familyNameÀº ÆùÆ®ÀÇ Æйи®¸¦ ÁöÁ¤Çϴµ¥ ŸÀÔÆäÀ̽ºÀÇ À̸§°ú °°À¸¸ç "Times New Roman", "¹ÙÅÁ" µî°ú °°ÀÌ ¿ì¸®°¡ ÈçÈ÷ ¾Ë°í ÀÖ´Â ÆùÆ®ÀÇ À̸§À̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. emSize´Â ±Û²ÃÀÇ Å©±âÀ̸ç UnitÀÌ ÁöÁ¤ÇÏ´Â ´ÜÀ§¸¦ »ç¿ëÇÑ´Ù. ȸé»óÀ¸·Î¸¸ Ãâ·ÂÇÑ´Ù¸é Çȼ¿ ´ÜÀ§¸¦ ÁÖ·Î »ç¿ëÇÏ°ÚÁö¸¸ Àμ⸦ °í·ÁÇÑ´Ù¸é Æ÷ÀÎÆ®³ª ÀÎÄ¡ ´ÜÀ§¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ À¯¸®ÇÏ´Ù. styleÀº ÆùÆ®ÀÇ ¸ð¾ç¸¦ ÁöÁ¤Çϸç 6°¡Áö Á¾·ù°¡ ÀÖ´Ù.
typedef enum {
FontStyleRegular = 0,
FontStyleBold = 1,
FontStyleItalic = 2,
FontStyleBoldItalic = 3,
FontStyleUnderline = 4,
FontStyleStrikeout = 8
} FontStyle;
±½°Ô, ¹ØÁÙ, ±â¿ïÀÓ, Ãë¼Ò¼± µîÀÇ ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇÏ´Â ¿°Å »ó¼öµéÀÌ Á¤ÀǵǾî ÀÖ´Ù. ¸¶Áö¸· Àμö fontCollectionÀº ¼±ÅÃµÉ ÆùÆ®ÀÇ ÁýÇÕÀε¥ NULLÀÏ °æ¿ì ½Ã½ºÅÛÀÇ ÆùÆ® ÁýÇÕ Áß¿¡¼ Çϳª¸¦ ¼±ÅÃÇÑ´Ù. ´ÙÀ½ ÄÚµå´Â ±Ã¼ 20¹Ð¸®¹ÌÅÍ Å©±âÀÇ ±½°Ô ±â¿ïÀÎ ½ºÅ¸ÀÏ·Î ±Û²ÃÀ» »ý¼ºÇÏ¿© ¹®ÀÚ¿À» Ãâ·ÂÇÑ´Ù.
Font F(L"±Ã¼",20,FontStyleBoldItalic,UnitMillimeter);
PointF P(10.0f,10.0f);
SolidBrush B(Color(255,0,0));
G.DrawString(L"ÇÑ±Û ¹®ÀÚ¿",-1,&F,P,&B);
20¹Ð¸®¹ÌÅÍ·Î Å©±â¸¦ ÁöÁ¤ÇßÀ¸¹Ç·Î ȸ鿡´Â 20Çȼ¿º¸´Ù ÈξÀ ´õ Å« Å©±â·Î Ãâ·ÂµÉ °ÍÀÌ´Ù. GDI+´Â ȸéÀÇ Çػ󵵸¦ ÂüÁ¶ÇÏ¿© 20¹Ð¸®¹ÌÅÍ°¡ ȸ鿡¼ ¸î Çȼ¿ Å©±âÀÎÁö¸¦ °è»êÇÏ¿© ÀÌ Å©±â´ë·Î ÆùÆ®¸¦ »ý¼ºÇÑ´Ù. ¹°·Ð ȸé»ó¿¡¼´Â ÇØ»óµµ Á¤º¸ÀÇ ¿ÀÂ÷·Î ÀÎÇØ Á¤È®È÷ 20¹Ð¸®¹ÌÅÍ·Î Ãâ·ÂµÇÁö ¾ÊÁö¸¸ ¶È°°Àº Ãâ·Â¹®À» ÇÁ¸°ÅÍ¿¡ ´ëÇØ Àû¿ëÇϸé ÁöÁ¤ÇÑ Å©±â´ë·Î Á¤È®ÇÏ°Ô Ãâ·ÂµÈ´Ù.
Font Ŭ·¡½ºÀÇ µÎ ¹ø° »ý¼ºÀÚ´Â FontFamily ¿ÀºêÁ§Æ®¸¦ ¹Ì¸® ¸¸µé¾î ³õ°í ÆùÆ®¸¦ ¸¸µé ¶§ ÀÌ Á¤º¸¸¦ ÂüÁ¶ÇÑ´Ù. FontFamily Ŭ·¡½º´Â °°Àº ŸÀÔÆäÀ̽º¸¦ °¡Áö´Â ÆùÆ®ÀÇ ÁýÇÕÀ» ´Ù·ç´Âµ¥ ½±°Ô ¸»ÇØ Æ¯Á¤ À̸§À» °¡Áö´Â ÆùÆ® Çϳª¸¦ Ç¥ÇöÇÑ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. »ý¼ºÀڷΠŸÀÔÆäÀ̽º À̸§À» ÁÖ¸é FontFamily °´Ã¼°¡ »ý¼ºµÇ¸ç ÀÌ °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ FontÀÇ »ý¼ºÀÚ·Î Àü´ÞÇÏ¸é ¿øÇÏ´Â ±Û²ÃÀÌ ¸¸µé¾îÁø´Ù. ¾Õ ÄÚµåÀÇ ÆùÆ® »ý¼º¹®À» ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇصµ °á°ú´Â µ¿ÀÏÇÏ´Ù.
FontFamily FM(L"±Ã¼");
Font F(&FM,20,FontStyleBoldItalic,UnitMillimeter);
....
±×·¸´Ù¸é FontÀÇ »ý¼ºÀÚ·Î ÆùÆ® Æйи®¸¦ Á÷Á¢ ÁöÁ¤ÇÏ´Â °Í°ú FontFamily °´Ã¼¸¦ ¸ÕÀú ¸¸µç ÈÄ ÀÌ °´Ã¼¸¦ »ç¿ëÇÏ¿© ÆùÆ®¸¦ »ý¼ºÇÏ´Â °Í°ú´Â ¾î¶² Â÷ÀÌÁ¡ÀÌ ÀÖÀ»±î? °á°úÀûÀ¸·Î´Â º° Â÷ÀÌ°¡ ¾øÁö¸¸ »ý¼º °úÁ¤ÀÌ 2´Ü°è·Î ºÐ¸®µÊÀ¸·Î½á Áß°£¿¡ ¿¡·¯ 󸮸¦ ÇѴٰųª °°Àº Æйи®¸¦ ¿©·¯ ¹ø »ç¿ëÇÒ ¶§ Á¶±Ý ´õ Æí¸®ÇÏ´Ù´Â ÀÌÁ¡ÀÌ ÀÖ´Ù.
FontFamily Ŭ·¡½º¿¡´Â IsAvailable, IsStyleAvailable µîÀÇ ¸â¹ö ÇÔ¼ö°¡ ÁغñµÇ¾î ÀÖ¾î¼ ÀÌ ÆùÆ®°¡ »ç¿ë °¡´ÉÇÑÁö ¾Æ´ÑÁö µîÀ» ¹Ì¸® Á¶»çÇØ º¼ ¼ö ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â ÁöÁ¤ÇÑ Å¸ÀÔÆäÀ̽º°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§ ¿¡·¯ ó¸®ÇÑ´Ù. ±Û²ÃÀº ¾ðÁ¦µçÁö ¼³Ä¡, Á¦°ÅµÉ ¼ö ÀÖ´Â ´ë»óÀ̹ǷΠÇØ´ç ±Û²ÃÀÌ ÇöÀç ½Ã½ºÅÛ¿¡ ¼³Ä¡µÇ¾î ÀÖ´ÂÁö¸¦ È®ÀÎÇÑ ÈÄ »ý¼ºÇÏ´Â °ÍÀÌ ¿øÄ¢ÀûÀÌ°í ¾ÈÀüÇÏ´Ù.
FontFamily FM(L"º´¾Æ¸® ´«¹°Ã¼");
if (!FM.IsAvailable()) {
// ¿¡·¯ ó¸®;
}
FontCollection Ŭ·¡½º´Â ÆùÆ®ÀÇ ÁýÇÕÀ» ´Ù·ç´Â Ãß»ó Ŭ·¡½ºÀ̸ç ÀÌ Å¬·¡½º·ÎºÎÅÍ µÎ °³ÀÇ ÆÄ»ý Ŭ·¡½º°¡ »ó¼ÓµÈ´Ù. FontFamily °´Ã¼¸¦ »ý¼ºÇÒ ¶§ ¶Ç´Â Font °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÒ ¶§ FontCollection ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇϸé ÀÌ ¸ñ·Ï¿¡ ÀÖ´Â ÆùÆ® Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
InstalledFontCollectionÀº ¼³Ä¡µÈ ÆùÆ®ÀÇ ¸ñ·ÏÀ» °¡Áö´Âµ¥ ÀÌ °´Ã¼·ÎºÎÅÍ ÆùÆ®ÀÇ °³¼ö¿Í °¢ ÆùÆ®ÀÇ ¸ðµç ¼Ó¼ºÀ» Á¶»çÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¼³Ä¡µÈ ¸ðµç ÆùÆ®¸¦ ¿°ÅÇ쵂 ÇØ´ç ÆùÆ®¸¦ Á÷Á¢ ¸¸µé¾î¼ ŸÀÔÆäÀ̽º À̸§À» Ãâ·ÂÇÑ´Ù.
void OnPaint(HDC hdc)
{
Graphics G(hdc);
InstalledFontCollection IFC;
FontFamily *arFM;
Font *F;
WCHAR name[LF_FACESIZE];
int i,n,nf;
SolidBrush S(Color(0,0,0));
PointF P(0,0);
n=IFC.GetFamilyCount();
arFM=new FontFamily[n];
IFC.GetFamilies(n,arFM,&nf);
for (i=0;i<n;i++) {
arFM[i].GetFamilyName(name);
F=new Font(&arFM[i],25,FontStyleRegular,UnitPixel);
G.DrawString(name,-1,F,P,&S);
if (P.Y < 700) {
P.Y+=25;
} else {
P.Y=0;
P.X+=300;
}
delete F;
}
delete [] arFM;
}
GDI¿¡µµ ÀÌ¿Í ¶È°°Àº µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Â ÆùÆ® ¿°Å¶ó´Â ±â´ÉÀÌ Àִµ¥ ±â´ÉÀûÀ¸·Î ´Ù¸¥ Á¡Àº °ÅÀÇ ¾ø´Ù. ´Ù¸¸ GDI´Â Äݹé ÇÔ¼ö¸¦ »ç¿ëÇÏÁö¸¸ GDI+ÀÇ ÆùÆ® ÄÝ·º¼ÇÀº ¹è¿¿¡ ÇѲ¨¹ø¿¡ ¸ðµç ±Û²ÃÀÇ Á¤º¸¸¦ Á¶»çÇÑ´Ù´Â °Í¸¸ ´Ù¸£´Ù. ¾Õ¿¡¼µµ ¼³¸íÇÑ ¹Ù ÀÖÁö¸¸ GDI+´Â ¸Þ¸ð¸®¸¦ ¸¹ÀÌ ¾²°í ¼Óµµ¸¦ ³ôÀÌ´Â ¹æ½ÄÀ» ÁÖ·Î »ç¿ëÇÑ´Ù.
PrivateFontCollectionÀº ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á÷Á¢ Á¤ÀÇÇÏ´Â ÆùÆ®ÀÇ ÁýÇÕÀÌ´Ù. ÃÖÃÊ ºñ¾îÀÖ´Â »óÅ·Π»ý¼ºµÇ´Âµ¥ AddFontFile ÇÔ¼ö·Î ¿øÇÏ´Â ÆùÆ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖÀ¸¸ç ¼³Ä¡µÇÁö ¾ÊÀº ÆùÆ®µµ ¸ñ·Ï¿¡ Æ÷ÇÔ½Ãų ¼ö ÀÖ´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Æ¯Á¤ ÆùÆ® ±×·ì¿¡ ¼ÓÇÑ ±Û²Ã¸¸ »ç¿ëÇÏ°í ½Í´Ù°Å³ª ƯÁ¤ ¹®¼¿¡ »ç¿ëµÈ ±Û²Ã¸¸ °ü¸®ÇÏ°í ½ÍÀ» ¶§ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÑ´Ù.
GDI+ÀÇ ÅؽºÆ® Ãâ·Â ±â´ÉÀÌ GDI¿¡ ºñÇØ ¿ì¿ùÇÑ Á¡À̶ó¸é ¾ÈƼ ¾Ë¸®¾Æ½Ì(Anti Aliasing)À» µé ¼ö ÀÖ´Ù. ÅؽºÆ®°¡ Ãâ·ÂµÇ´Â ¹è°æ»ö°ú ÅؽºÆ®ÀÇ »ö»óÀÌ Çö°ÝÇÏ°Ô Â÷ÀÌ°¡ ³¯ °æ¿ì ÅؽºÆ®ÀÇ È¹¿¡ °è´Ü Çö»óÀÌ ³ªÅ¸³´Ù. Çػ󵵰¡ ¾ÆÁÖ ³·Àº ¸ð´ÏÅÍ¿¡¼ Èò ¹ÙÅÁ¿¡ °ËÁ¤»ö ¹®ÀÚ¿À» Ãâ·ÂÇØ º¸¸é ÀÌ·± °è´Ü Çö»óÀº ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù.
¾ÈƼ ¾Ë¸®¾Æ½ÌÀº ÀÌó·³ °æ°è ºÎ±ÙÀÇ »ö»óÂ÷°¡ ½ÉÇÒ ¶§ °æ°è¿¡ Áß°£»öÀ» »ðÀÔÇÔÀ¸·Î½á ÅؽºÆ®ÀÇ Ãâ·Â Ç°ÁúÀ» ³ôÀÌ´Â ±â¼úÀÌ´Ù. ¿¹¸¦ µé¾î Èò»ö°ú °ËÁ¤»ö »çÀÌ¿¡ ȸ»öÀ» Àû´çÈ÷ »ðÀÔÇÏ¸é ¸¶Ä¡ º×À¸·Î ¾´ ±Ûó·³ ¹®ÀÚ¿ÀÌ ÈξÀ ´õ ºÎµå·´°Ô º¸ÀδÙ. ¹®ÀÚ¿ Ãâ·Â ¼Ó¼ºÀº Graphics °´Ã¼ÀÇ ¼Ó¼ºÀÌ¸ç ´ÙÀ½ ¸â¹ö ÇÔ¼ö·Î ¼³Á¤ÇÑ´Ù.
Status SetTextRenderingHint(TextRenderingHint newMode);
¹°·Ð Ãâ·Â ¼Ó¼ºÀÇ ¼³Á¤ »óŸ¦ Á¶»çÇÏ´Â Get ÇÔ¼öµµ ÀÖ´Ù. 5°¡Áö Ãâ·Â Ç°ÁúÀ» ÁöÁ¤ÇÏ´Â ¿°ÅÇü Áß Çϳª¸¦ ÁöÁ¤ÇÑ´Ù.
typedef enum {
TextRenderingHintSystemDefault = 0,
TextRenderingHintSingleBitPerPixelGridFit = 1,
TextRenderingHintSingleBitPerPixel = 2,
TextRenderingHintAntiAliasGridFit = 3,
TextRenderingHintAntiAlias = 4,
TextRenderingHintClearTypeGridFit = 5
} TextRenderingHint;
°ªÀÌ ÀÛÀ»¼ö·Ï Ç°ÁúÀº ¶³¾îÁöÁö¸¸ Ãâ·Â ¼Óµµ´Â ºü¸£¸ç °ªÀÌ ³ô¾ÆÁú¼ö·Ï Ç°ÁúÀº ÁÁ¾ÆÁöÁö¸¸ ¼Óµµ´Â ±×¸¸Å ´À·ÁÁú °ÍÀÌ´Ù. °¡Àå Ãâ·Â Ç°ÁúÀÌ ÁÁÀº ClearTypeÀº XP¿Í 2003 ÀÌÈÄ¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ³ª¸ÓÁö ¿î¿µÃ¼Á¦¿¡¼´Â ¹«½ÃµÈ´Ù. ´ÙÀ½ Å×½ºÆ® ÄÚµå´Â Ãâ·Â Ç°ÁúÀ» ¹Ù²ã °¡¸ç ¶È°°Àº ¹®ÀÚ¿À» ¿©¼¸ ¹ø Ãâ·ÂÇÑ´Ù.
Font F(L"±Ã¼",30,FontStyleRegular,UnitPixel);
PointF P(10.0f,0.0f);
SolidBrush B(Color(0,0,0));
int i;
for (i=0;i<=5;i++) {
G.SetTextRenderingHint((TextRenderingHint)i);
G.DrawString(L"Anti Aliasing Test ±ÛÀÚ¸¦ ºÎµå·´°Ô Ãâ·ÂÇÑ´Ù.",-1,&F,P,&B);
P.Y+=33;
}
Ãâ·Â °á°ú¸¦ ÀÚ¼¼È÷ °üÂûÇØ º¸¸é ȹ°ú °æ°è°¡ ¸¸³ª´Â ºÎºÐÀÇ Ã³¸®°¡ Á¶±Ý¾¿ ´Ù¸£´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. CRT´Â ¿ø·¡ ºûÀÌ ÆìÁö´Â È¿°ú°¡ ÀÖÀ¸¹Ç·Î ¾ÈƼ ¾Ë¸®¾Æ½ÌÀ» ÇÏÁö ¾Ê¾Æµµ º° ¹®Á¦°¡ ¾ø¾úÁö¸¸ ÇöÀç´Â LCD°°Àº °íÇØ»óµµÀÇ ¼±¸íÇÑ Ãâ·Â ÀåÄ¡µéÀÌ °³¹ßµÊÀ¸·Î½á °ú°Å¿¡ ºñÇØ ¹®ÀÚ¿À» ±ò²ûÇÏ°Ô Ãâ·ÂÇÏ´Â °ÍÀÌ ¾ÆÁÖ Áß¿äÇÑ ¹®Á¦°¡ µÇ¾ú´Ù.
ƯÁ¤ ¹®ÀÚ¿À» Àåºñ¿¡ Ãâ·ÂÇßÀ» ¶§ÀÇ ½ÇÁ¦ Å©±â´Â ´ë´ÜÈ÷ ¸¹Àº ¿ä¼Ò·ÎºÎÅÍ °áÁ¤µÈ´Ù. ÀÏ´Ü ¾î¶² ÆùÆ®¸¦ »ç¿ëÇߴ°¡°¡ °¡Àå Áß¿äÇϸç ÀÌ¿Ü¿¡µµ Á¤·Ä ¹æ½ÄÀ̳ª Ãâ·Â¿¡ »ç¿ëÇÑ Ç÷¡±×µéµµ Ãâ·ÂÆø¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. ¹®ÀÚ¿À» ±¸¼ºÇÏ´Â °³º° ¹®ÀÚÀÇ ±¸¼ºµµ ¹°·Ð Àüü Æø¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. ¶ÇÇÑ ±Û²ÃÀÇ Å©±â°¡ ³í¸®ÀûÀÎ ´ÜÀ§ÀÏ ¶§ Ãâ·Â ÀåºñÀÇ Çػ󵵿¡ µû¶ó ½ÇÁ¦ Å©±â°¡ °è»êµÈ´Ù.
»Ó¸¸ ¾Æ´Ï´Ù. ±×¸®±â ¿£ÁøÀÇ ÈùÆà Àû¿ë ¹æ½Ä, ¾ÈƼ ¾Ë¸®¾Æ½Ì¿¡ ÀÇÇØ È®ÀåµÇ´Â ¿µ¿ª, ÆùÆ®ÀÇ ½ºÅ¸ÀÏ¿¡ µû¶ó ´ýÀ¸·Î ´õÇØÁö´Â Å©±â(¿¹¸¦ µé¾î ÀÌÅŸ¯À» Àû¿ëÇÏ¸é ¿·À¸·Î »ì¦ ±â¿î´Ù) µîµî ¿ì¸®°¡ ¾ËÁö ¸øÇÏ´Â ³»ºÎÀûÀÎ ¿ä¼Òµéµµ ¸¹´Ù. ±×·¡¼ ¹®ÀÚ¿ÀÇ ½ÇÁ¦ Å©±â¸¦ ¿ì¸®°¡ Á÷Á¢ ±¸Çϱâ´Â »ó´çÈ÷ ¾î·Á¿ì¸ç GraphicsÀÇ ´ÙÀ½ ¸â¹ö ÇÔ¼ö¸¦ ÅëÇØ Á¶»çÇØ¾ß ÇÑ´Ù.
Status MeasureString(const WCHAR *string, INT length, const Font *font, const PointF &origin, [const StringFormat *stringFormat,] RectF *boundingBox) const;
Status MeasureString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, [const StringFormat *stringFormat,] RectF *boundingBox, [INT *codepointsFitted, INT *linesFilled]) const;
¹®ÀÚ¿ÀÇ ÆøÀ» ±¸Çϱâ À§ÇØ ÇÊ¿äÇÑ ¸ðµç °ªµéÀ» Àü´Þ¹Þ¾Æ¾ß ÇϹǷΠÀμö°¡ Á» ¸¹´Ù. ÀÌÁß [ ] °ýÈ£·Î Ç¥±âµÈ Àμö´Â ÇÊ¿ä¾øÀ» °æ¿ì »ý·« °¡´ÉÇÏ´Ù. Ãâ·Â ¹®ÀÚ¿, ±æÀÌ, ÆùÆ®, Ãâ·Â ÁÂÇ¥ µîÀ» Àμö·Î Àü´ÞÇϸç Ãâ·Â¿¡ Àû¿ëÇÒ Ç÷¡±×µµ Àü´ÞÇÒ ¼ö ÀÖ´Ù. Ãâ·Â ¿µ¿ªÀº ÁÂÇ¥·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ°í ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼öµµ Àִµ¥ ¿µ¿ªÀ» ÁöÁ¤ÇÒ °æ¿ì ÀÚµ¿ °³Çà, Á¤·Ä, ÅÇ ¹®ÀÚ±îÁö °è»êÇÏ¿© Ãâ·ÂµÉ ¹®ÀÚ¿ÀÇ Å©±â¸¦ Á¶»çÇÑ´Ù. °è»êµÈ Æø°ú ³ôÀÌ´Â boundingBox·Î ¸®ÅϵȴÙ.
ÀÌ ÇÔ¼ö¿¡ ´ëÀÀµÇ´Â GDIÀÇ ÇÔ¼ö´Â GetTextExtentPoint32 ÇÔ¼öÀÌ¸ç µÑ ´Ù »ç¿ëÇÏ´Â ¸ñÀûÀº µ¿ÀÏÇÏ´Ù. ¹®ÀÚ¿ÀÇ ÆøÀ» ¾Ë¾Æ¾ß ¹®ÀÚ¿ ´ÙÀ½¿¡ Ãâ·ÂÇÒ ÁÂÇ¥¸¦ °è»êÇÒ ¼ö ÀÖÀ¸¹Ç·Î µÎ ÇÔ¼ö´Â ¼½Ä ÀÖ´Â ¹®ÀÚ¿À» Ãâ·ÂÇÒ ¶§ ²À ÇÊ¿äÇÏ´Ù. ±×·¯³ª ½Ç¸Á½º·´°Ôµµ MeasureString ÇÔ¼öÀÇ µ¿ÀÛÀº »ó´çÈ÷ Á÷°üÀûÀÌÁö ¸øÇÏ¸ç ¹ö±×·Î ÀǽɵǴ ¹®Á¦Á¡±îÁö °¡Áö°í ÀÖ´Ù. ¾î¶² ¹®Á¦Á¡ÀÌ ÀÖ´ÂÁö ¿¹Á¦¸¦ ¸¸µé¾î º¸°í ÇØ°áÃ¥À» ¿¬±¸ÇØ º¸ÀÚ.
¿¹ Á¦ : MeasureString |
void OnPaint(HDC hdc)
{
Graphics G(hdc);
if (Mode == TEXT('1')) {
//´Ù¸¥ ÆùÆ® ¿¬°áÇؼ Ãâ·ÂÇϱâ
REAL x=0;
const REAL FontSize=32;
TCHAR *San[]={L"¹éµÎ»ê",L"ÇѶó»ê",L"±Ý°»ê"};
RectF bound;
Font F1(L"±¼¸²",FontSize,FontStyleRegular,UnitPoint);
G.DrawString(San[0],-1,&F1,PointF(x,0),&SolidBrush(Color(0,0,255)));
G.MeasureString(San[0],-1,&F1,PointF(x,0),&bound);
x += (int)bound.Width;
Font F2(L"±Ã¼",FontSize,FontStyleRegular,UnitPoint);
G.DrawString(San[1],-1,&F2,PointF(x,0),&SolidBrush(Color(255,0,0)));
G.MeasureString(San[1],-1,&F2,PointF(x,0),&bound);
x += (int)bound.Width;
Font F3(L"¹ÙÅÁ",FontSize,FontStyleRegular,UnitPoint);
G.DrawString(San[2],-1,&F3,PointF(x,0),&SolidBrush(Color(0,255,0)));
G.MeasureString(San[2],-1,&F3,PointF(x,0),&bound);
x += (int)bound.Width;
}
....
»ê À̸§ ¼¼ °³¸¦ ¿¬À̾î Ãâ·ÂÇØ ³õ¾Ò´Âµ¥ °¢°¢ ÆùÆ®¿Í »ö»óÀÌ ´Ù¸£´Ù. ¼½ÄÀÌ ´Ù¸¥ ¹®ÀÚ¿À» Ãâ·ÂÇÒ ¶§´Â Çѹø¿¡ Ãâ·ÂÇÒ ¼ö ¾øÀ¸¹Ç·Î ¼½Äº°·Î ³ª´©¾î Ãâ·ÂÇØ¾ß ÇÑ´Ù. ¸ÕÀú ±¼¸² ÆùÆ®·Î ¹éµÎ»êÀ» Ãâ·ÂÇß´Ù. ±×¸®°í ¹Ù·Î ÀÌ¾î¼ ±Ã¼ ÆùÆ®·Î ÇѶó»êÀ» Ãâ·ÂÇߴµ¥ ¹éµÎ»ê ¹Ù·Î ´ÙÀ½¿¡ ÇѶó»êÀ» Ãâ·ÂÇÏ·Á¸é ¾Õ¼ Ãâ·ÂµÈ ¹éµÎ»êÀÇ ÆøÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ±×·¡¼ ¹éµÎ»ê ¹®ÀÚ¿ÀÇ ÆøÀ» MeasureStringÀ¸·Î Á¶»çÇßÀ¸¸ç ±× Æø¸¸Å xÁÂÇ¥¸¦ ¶ç¿î ÈÄ ÇѶó»êÀ» Ãâ·ÂÇß´Ù.
ÀÌ ÄÚµå´ë·Î¶ó¸é ¹éµÎ»ê°ú ÇѶó»êÀº ¹Ù·Î ÀÎÁ¢ÇÏ°Ô Ãâ·ÂµÇ¾î¾ß Çϳª °á°ú¿¡¼ º¸´Ù½ÃÇÇ µÎ ¹®ÀÚ¿ »çÀÌ¿¡ ºÒÇÊ¿äÇÑ ¿©¹éÀÌ »ðÀԵǾî ÀÖ´Ù. ¸¶Âù°¡Áö·Î ÇѶó»ê°ú ±Ý°»ê »çÀ̵µ ¹ú¾îÁ® Àִµ¥ Á¤È®ÇÏ°Ô °è»êÀ» ÇßÀ½¿¡µµ ºÒ±¸ÇÏ°í ¿ÀÂ÷°¡ ¹ß»ýÇÑ °ÍÀÌ´Ù. GDI+ÀÇ MeasureStringÀÌ Å©±â¸¦ À߸ø °è»êÇÏ´ÂÁö GDIÀÇ °æ¿ì¿Í ºñ±³ÇØ º¸ÀÚ.
// ¹®ÀÚ¿ÀÇ Æø Á¡°Ë
TCHAR *Hangul=L"ÇÑ±Û ¹®ÀÚ¿";
TCHAR szWidth[128];
RectF bound;
// GDI+
Font F(L"±¼¸²",20,FontStyleRegular,UnitPixel);
SolidBrush B(Color(0,0,0));
G.DrawString(Hangul,-1,&F,PointF(0,00),&B);
G.MeasureString(Hangul,-1,&F,PointF(0,0),&bound);
wsprintf(szWidth,TEXT("Æø:%d, ³ôÀÌ:%d"),(int)bound.Width,(int)bound.Height);
G.DrawString(szWidth,-1,&F,PointF(200,0),&B);
// GDI
HFONT hFont,hOldFont;
hFont=CreateFont(20,0,0,0,0,0,0,0,HANGUL_CHARSET,3,2,1,
VARIABLE_PITCH | FF_MODERN,TEXT("±¼¸²"));
hOldFont=(HFONT)SelectObject(hdc,hFont);
TextOut(hdc,0,50,Hangul,lstrlen(Hangul));
SIZE sz;
GetTextExtentPoint32(hdc,Hangul,lstrlen(Hangul),&sz);
wsprintf(szWidth,TEXT("Æø:%d, ³ôÀÌ:%d"),sz.cx,sz.cy);
TextOut(hdc,200,50,szWidth,lstrlen(szWidth));
DeleteObject(SelectObject(hdc,hOldFont));
20 Çȼ¿ Å©±âÀÇ ±¼¸² ÆùÆ®·Î "ÇÑ±Û ¹®ÀÚ¿"À̶ó´Â ¶È°°Àº ¹®ÀÚ¿À» Ãâ·ÂÇ쵂 À§ÂÊÀº GDI+·Î Ãâ·ÂÇÑ °ÍÀÌ°í ¾Æ·¡ÂÊÀº GDI·Î Ãâ·ÂÇÑ °ÍÀÌ´Ù.
GDI+ÀÇ °æ¿ì´Â ÆøÀÌ 116À¸·Î Á¶»çµÇ´Âµ¥ ºñÇØ GDI´Â 107·Î Á¶»çµÇ¾î °á°ú°¡ ¼·Î ´Ù¸£´Ù. ½ÇÁ¦ Ãâ·ÂµÈ ¸ð¾çÀ» ºÁµµ GDI+´Â ù ¹®ÀÚ¸¦ ÁöÁ¤ÇÑ ÁÂÇ¥¿¡ ³õÁö ¾Ê°í ¾à°£ ¿©¹éÀ» Áشٴ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ¸¸ç ¸¶Âù°¡Áö·Î µÚÂÊÀ¸·Îµµ ¿©¹éÀÌ »ðÀԵǾî ÀüüÀûÀ¸·Î ÆøÀÌ °úÀåµÇ°Ô °è»êµÈ´Ù. GDIÀÇ Æø Á¶»ç ÇÔ¼ö´Â Á¤È®ÇÏ°Ô Á¶»çµÇ´Âµ¥ ºñÇØ GDI+ÀÇ Æø Á¶»ç ÇÔ¼ö´Â Ʋ¸° °á°ú¸¦ º¸°íÇÑ´Ù.
¿Ö ÀÌ·¸°Ô µÇ¾î Àִ°¡¿¡ ´ëÇؼ´Â °ø½Ä ¹®¼¿¡ ¸íÄèÇÑ ¼³¸íÀÌ ¾ø´Âµ¥ ±×·¸´Ù°í ¹ö±×¶ó°í È®½ÅÇϱâ´Â ¾Ö¸ÅÇÏ´Ù. GDI+ÀÇ ¹®ÀÚ¿ Ãâ·Â ¿£ÁøÀº ´Ü¼øÈ÷ ¹®ÀÚ ¸ð¾çÀ» ȸ鿡 Ãâ·Â¸¸ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÈùÆÃ, ¾ÈƼ ¾Ë¸®¾Æ½Ì µîÀÇ Ãß°¡ ó¸®¿Í º¹ÀâÇÑ Á¤·Ä±îÁö ¼öÇàÇϹǷΠÀÌ·± °ÍµéÀÌ °í·ÁµÇ¾î °úÀåµÇ°Ô Æò°¡µÇ´Â °ÍÀÌ ¾Æ´Ñ°¡ ÃßÃøµÈ´Ù. ÀÎÅͳݿ¡¼µµ ÀÌ ¹®Á¦¿¡ ´ëÇØ ¸»ÀÌ ¸¹À¸¸ç ¸î °¡Áö ÇØ°á ¹æ¾ÈÀÌ ÀÖ±â´Â ÇÏÁö¸¸ ¸ðµÎ ²Ç¼öµéÀÏ »ÓÀÌ´Ù.
GDI+ÀÇ °ø½ÄÀûÀÎ ¹®ÀÚ¿ Å©±â Á¶»ç ÇÔ¼ö´Â ´ÙÀ½ ÇÔ¼öÀÌ´Ù. ¿ö³« ´Ù¾çÇÑ »óȲÀ» °í·ÁÇØ¾ß ÇϹǷΠÃëÇÏ´Â ÀμöµéÀÌ ¾ÆÁÖ ¸¹°í ÀÌ°Í Àú°Í ÁغñÇØ¾ß ÇÒ °ÍÀÌ ¸¹¾Æ ÇÁ·Î±×·¡¹ÖÇÏ´Â ÀýÂ÷µµ ¹«Ã´À̳ª ±î´Ù·Ó´Ù. ÀÏ´Ü ¿øÇüºÎÅÍ º¸ÀÚ.
Status MeasureCharacterRanges(const WCHAR *string, INT length, const Font *font, const Rectf &layoutRect, const StringFormat *stringFormat, INT regionCount, Region *regions) const;
¾ÕÂÊ ¼¼ Àμö´Â ¼³¸í ¾ÈÇصµ ¾Ë °ÍÀÌ°í layoutRect´Â ÀÌ ¹®ÀÚ¿ÀÌ Ãâ·ÂµÉ »ç°¢ ¿µ¿ªÀÌ´Ù. ´Ü¼øÈ÷ Å©±â¸¸ Á¶»çÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó »ç°¢ ¿µ¿ª³»ÀÇ ÀÚµ¿ °³Çà±îÁö °í·ÁÇÏ¿© Á¤È®ÇÑ À§Ä¡±îÁö °°ÀÌ °è»êÇÑ´Ù. stringFormat Àμö´Â ¹®ÀÚ¿ Ãâ·Â ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â Ç÷¡±×µéÀÌµÇ ÀÌ ¿Ü¿¡µµ ÀÌ °´Ã¼¿¡´Â Á¶»ç ´ë»ó ¹®ÀÚ ¹üÀ§°¡ Æ÷ÇԵǾî ÀÖ´Ù. Áï, ¹®ÀÚ¿³»ÀÇ ¾î´À ¹üÀ§¿¡ ´ëÇÑ Å©±â¸¦ Á¶»çÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ Áö½Ã »çÇ×ÀÌ stringFormat °´Ã¼·Î Àü´ÞµÈ´Ù. Á¶»ç ¹üÀ§´Â ´ÙÀ½ Ŭ·¡½º·Î Ç¥ÇöÇÑ´Ù.
CharacterRange::CharacterRange(INT first, INT length);
Á¶»ç ¹üÀ§ÀÇ Ã¹ ¹®ÀÚ À妽º¿Í ±æÀ̸¦ »ý¼ºÀÚ·Î Àü´ÞÇÑ´Ù. ÀÌ·± °´Ã¼ÀÇ ¹è¿À» ¸¸µç ÈÄ StringFormatÀÇ ´ÙÀ½ ÇÔ¼ö·Î Á¶»ç ¹üÀ§¸¦ ÁöÁ¤ÇÑ´Ù. ¸î °³ÀÇ ¹üÀ§¸¦ Á¶»çÇÒ °ÍÀÎÁö °³¼ö¿Í ¹®ÀÚ ¹üÀ§ÀÇ ¹è¿À» Àü´ÞÇÏ¸é µÈ´Ù.
Status SetMeasurableCharacterRanges(INT rangeCount, const CharacterRange *ranges);
ÀÌ ÇÔ¼ö·Î ÁöÁ¤µÈ ¹®ÀÚ ¹üÀ§¿¡ ´ëÇÑ Å©±â°¡ ¸®ÀüÀ¸·Î ¸®ÅϵǴµ¥ MeasureCharacterRanges ÇÔ¼öÀÇ ¸¶Áö¸· µÎ Àμö´Â ¸®ÅÏ°ªÀ» µ¹·Á¹Þ±â À§ÇÑ ¸®ÀüÀÇ ¹è¿°ú ±× °³¼öÀÌ´Ù. Åë»ó ÀÌ °³¼ö´Â ¹®ÀÚ ¹üÀ§ ¹è¿ÀÇ °³¼ö¿Í ÀÏÄ¡ÇÑ´Ù. ÇѲ¨¹ø¿¡ ¿©·¯ ¹üÀ§¸¦ Á¶»çÇÒ ¼ö ÀÖ¾î ÁغñÇØ¾ß ÇÒ °ÍÀÌ ¸¹´Ù. ¹«Ã´ È¥¶õ½º·¯¿îµ¥ Äڵ带 º¸¸é Á¤¸®°¡ µÉ °ÍÀÌ´Ù.
// ¹®ÀÚÀÇ Á¤È®ÇÑ À§Ä¡ ±¸Çϱâ
TCHAR *korea=L"¾Æ¸§´Ù¿î ±Ý¼ö°»ê ¿ì¸®³ª¶ó ´ëÇѹα¹";
RectF layout(0,0,200,200);
CharacterRange arRange[2]={ CharacterRange(2,4), CharacterRange(12,5) };
StringFormat sf;
sf.SetMeasurableCharacterRanges(2,arRange);
Region *arRgn = new Region[2];
Font Gulim(L"±¼¸²",20,FontStyleRegular,UnitPoint);
G.MeasureCharacterRanges(korea,-1,&Gulim,layout,&sf,2,arRgn);
G.FillRegion(&SolidBrush(Color(0,0,255)),&arRgn[0]);
G.FillRegion(&SolidBrush(Color(0,0,255)),&arRgn[1]);
G.DrawRectangle(&Pen(Color(0,0,0)),layout);
G.DrawString(korea,-1,&Gulim,layout,&sf,&SolidBrush(Color(0,0,0)));
delete [] arRgn;
Àû´çÈ÷ ±ä ¹®ÀÚ¿À» 200*200 Å©±â°¡ »ç°¢ ¿µ¿ª¿¡ Ãâ·ÂÇß´Ù. ÀÌ ¹®ÀÚ¿¿¡¼ ÀÏÁ¤ÇÑ ¹üÀ§ÀÇ ºÎºÐ ¹®ÀÚ¿¿¡ ´ëÇØ À§Ä¡¿Í Å©±â¸¦ Á¶»çÇÏ¿© ÆĶõ»ö ¹è°æÀ» Ãâ·ÂÇß´Ù. ½ÇÇà °á°ú¸¦ º¸°í ¾î¶² ½ÄÀ¸·Î °è»êµÈ °ÍÀÎÁö »ìÆì º¸ÀÚ.
µÎ ¹üÀ§ÀÇ ºÎºÐ ¹®ÀÚ¿¿¡ ´ëÇØ Å©±â¸¦ Á¶»çÇߴµ¥ ù¹ø°´Â 2¹ø°ºÎÅÍ 4±ÛÀÚºÐÀÌ´Ù. 2¹ø° ±ÛÀÚ´Â '´Ù'ÀÚÀÌ°í ¿©±â¼ºÎÅÍ 4±ÛÀÚºÐÀ̹ǷΠ'´Ù¿î ±Ý'±îÁö°¡ µÈ´Ù. °ø¹éµµ ÇϳªÀÇ ¹®ÀÚÀÓÀ» À¯ÀÇÇÏÀÚ. µÎ¹ø° ¹üÀ§´Â 12¹ø°ºÎÅÍ 5¹®ÀÚºÐÀ̹ǷΠ'³ª¶ó ´ëÇÑ'ÀÌ µÈ´Ù. ÀÌ µÎ ¹üÀ§ÀÇ ¹®ÀÚ°¡ ¾î´À À§Ä¡¿¡ ¾î¶°ÇÑ Å©±â·Î Ãâ·ÂµÇ¾î ÀÖ´ÂÁö Á¶»çÇÏ¿© ±× ¿µ¿ª¿¡ ÆĶõ»öÀ¸·Î Ä¥À» ÇÑ °ÍÀÌ´Ù.
¿äûÇÒ ¹®ÀÚ ¹üÀ§ °´Ã¼ 2°³¸¦ ¹è¿·Î ±¸¼ºÇÏ¿© SetMeasurableCharacterRanges·Î ¹Ì¸® µî·ÏÇØ ³õ´Â´Ù. ±×¸®°í ¸®ÅÏ°ªÀ» ¹Þ±â À§ÇØ ¸®ÀüÀÇ ¹è¿À» ÇÒ´çÇÏ°í Ãâ·Â¿¡ »ç¿ëÇÒ ÆùÆ®µµ »ý¼ºÇØ ³õ´Â´Ù. ¿©±â±îÁö ÁغñÇØ ³õ°í MeasureCharacterRanges ÇÔ¼ö¸¦ È£ÃâÇϸé ÁöÁ¤ÇÑ ¿µ¿ª¿¡ ÁöÁ¤ÇÑ ÆùÆ®·Î ¹®ÀÚ¿À» Ãâ·ÂÇÒ ¶§ ¿äûµÈ ¹üÀ§ÀÇ ¹®ÀÚµéÀÌ ¾î´À À§Ä¡¿¡ ÀÖ´ÂÁö ¸®ÀüÀ¸·Î Á¶»çµÇ¾î ¸®Àü ¹è¿¿¡ ´ëÀԵȴÙ. Äڵ忡¼´Â ÀÌ ¸®ÀüÀ» ÆĶõ»öÀ¸·Î ä¿ö Á¶»çµÈ ¿µ¿ªÀ» ½Ã°¢ÀûÀ¸·Î Ç¥½ÃÇß´Ù.
¹®ÀÚ¿ÀÇ À§Ä¡¿Í Å©±â¸¦ Á¶»çÇϴµ¥ ¿Ö »ç°¢¿µ¿ªÀÌ ¾Æ´Ï¶ó ¸®ÀüÀÌ ¸®ÅϵǴ°¡ Çϸé À§ ¿¹¿¡¼ º¸´Ù½ÃÇÇ ¿äûÇÑ ¹®ÀÚ ¹üÀ§°¡ ¹Ýµå½Ã ÇÑÁÙ¿¡ Æ÷ÇԵȴٴ º¸ÀåÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. "³ª¶ó ´ëÇÑ"À̶ó´Â ¹®ÀÚ ¹üÀ§´Â ÀÚµ¿ °³Çà¿¡ ÀÇÇØ µÎ ÁÙ·Î ³ª´©¾î Ãâ·ÂµÇ¾úÀ¸¸ç µû¶ó¼ Rect°°Àº »ç°¢¿µ¿ªÀ¸·Î´Â ÀÌ ¹®ÀÚ ¹üÀ§ÀÇ À§Ä¡¸¦ Á¤È®ÇÏ°Ô Ç¥ÇöÇÒ ¼ö ¾ø´Ù. ºÐ¸®µÈ µÎ ¿µ¿ªÀ» Ç¥ÇöÇϱâ À§Çؼ´Â ¸®ÀüÀÌ ÇÊ¿äÇÏ´Ù.
¿©±â±îÁö ¿¬±¸µÇ¾úÀ¸¸é ÀÌÁ¦ ¼½ÄÀÖ´Â ¹®ÀÚ¿À» Ãâ·ÂÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ÄÚµå´Â MeasureStringÀ¸·Î ÇØ°áÇÏÁö ¸øÇÑ »êÀ̸§ ÀÌ¾î¼ Ãâ·ÂÇϱ⸦ Á¤È®ÇÑ °è»ê¿¡ ÀÇÇØ ´Ù½Ã ÀÛ¼ºÇÑ °ÍÀÌ´Ù. MeasureCharacterRanges ÇÔ¼ö¸¦ ¸Å¹ø »ç¿ëÇÏ´Â °ÍÀº ³Ê¹« ¹ø°Å·Ó±â ¶§¹®¿¡ ±â´ÉÀ» °£¼ÒÈÇÑ Àü¿ª MeasureString À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ ÀÛ¼ºÇß´Ù.
RectF MeasureString(Graphics &G,Font &F,LPCTSTR String,int Count)
{
RectF layout(0,0,65536,65536);
CharacterRange cr(0,Count == -1 ? lstrlen(String):Count);
StringFormat sf;
sf.SetMeasurableCharacterRanges(1,&cr);
Region rgn;
G.MeasureCharacterRanges(String,Count,&F,layout,&sf,1,&rgn);
RectF rt;
rgn.GetBounds(&rt,&G);
return rt;
}
// ´Ù¸¥ ÆùÆ® ¿¬°áÇؼ Ãâ·ÂÇϱâ
REAL x=0;
const REAL FontSize=32;
TCHAR *San[]={L"¹éµÎ»ê",L"ÇѶó»ê",L"±Ý°»ê"};
RectF bound;
Font F1(L"±¼¸²",FontSize,FontStyleRegular,UnitPoint);
G.DrawString(San[0],-1,&F1,PointF(x,0),&SolidBrush(Color(0,0,255)));
bound=MeasureString(G,F1,San[0],-1);
x += (int)bound.Width;
Font F2(L"±Ã¼",FontSize,FontStyleRegular,UnitPoint);
G.DrawString(San[1],-1,&F2,PointF(x,0),&SolidBrush(Color(255,0,0)));
bound=MeasureString(G,F1,San[1],-1);
x += (int)bound.Width;
Font F3(L"¹ÙÅÁ",FontSize,FontStyleRegular,UnitPoint);
G.DrawString(San[2],-1,&F3,PointF(x,0),&SolidBrush(Color(0,255,0)));
bound=MeasureString(G,F1,San[2],-1);
x += (int)bound.Width;
Àü¿ª MeasureString ÇÔ¼ö´Â ÀÚµ¿ °³ÇàÀº °í·ÁÄ¡ ¾ÊÀ¸¸ç ¹®ÀÚ¿ÀÇ ÀÓÀÇ ºÎºÐÀÌ ¾Æ´Ï¶ó ÁöÁ¤ÇÑ ±æÀ̱îÁö¸¸ Á¶»çÇϵµ·Ï °£¼ÒÈÇß´Ù. ·¹À̾ƿô ¿µ¿ªÀº 65535À¸·Î ÁÖ¾ú´Âµ¥ ÀÌ´Â ÀÚµ¿ °³ÇàÀÌ ÀϾÁö ¾ÊÀ» Á¤µµ·Î ÃæºÐÈ÷ Å« °ªÀ¸·Î ¼±ÅÃµÈ °ÍÀÌ´Ù. ¿©·¯ ¹üÀ§¸¦ Á¶»çÇÒ ÇÊ¿ä°¡ ¾øÀ¸¹Ç·Î ¹®ÀÚ ¹üÀ§³ª ¸®ÀüÀº ¹è¿·Î ÇÒ´çÇÏÁö ¾Ê°í ´Ü¼ø º¯¼ö¸¦ »ç¿ëÇß´Ù. ÀÚµ¿ °³ÇàÀ» °í·ÁÄ¡ ¾ÊÀ¸¹Ç·Î ¸®ÀüÀº GetBounds ÇÔ¼ö·Î »ç°¢¿µ¿ªÀ¸·Î º¯È¯ °¡´ÉÇÏ¸ç º¯È¯µÈ »ç°¢¿µ¿ªÀÌ ¸®ÅϵȴÙ.
OnKey4 ÇÔ¼ö´Â ¾Õ¼ ÀÛ¼ºÇÑ OnKey1 ÇÔ¼ö¿Í °ÅÀÇ µ¿ÀÏÇ쵂 ¹®ÀÚ¿ÀÇ ÆøÀ» ±¸ÇÒ ¶§ GÀÇ ¸â¹ö ÇÔ¼ö MeasureString ´ë½Å Àü¿ª MeasureString ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù´Â °Í¸¸ ´Ù¸£´Ù. ½ÇÇàÇØ º¸¸é »êÀ̸§ÀÌ ÀÚ½ÅÀÇ Á¤È®ÇÑ Æø¸¸Å¸¸ Â÷ÁöÇÒ °ÍÀÌ´Ù. ÇØ°á ¹æ¹ýÀÌ ¾ÆÁÖ º¹ÀâÇÑ ÆíÀÌÁö¸¸ ¾î¶°Å³ª ¼½ÄÀÖ´Â ¹®ÀÚ¿À» Ãâ·ÂÇϴµ¥´Â ¼º°øÇß´Ù.
GDI+ÀÇ ÅؽºÆ® Ãâ·Â ¿£ÁøÀº ÀÌ ¿Ü¿¡µµ ´Ù¸¥ ¹®Á¦°¡ ÀÖ´Ù. ´ÙÀ½ Äڵ带 ½ÇÇàÇØ º¸ÀÚ. Ãâ·ÂµÈ °á°ú°¡ Áß¿äÇÑ °ÍÀÌ ¾Æ´Ï¶ó Ãâ·ÂµÇ´Â °úÁ¤À» »ìÆì ºÁ¾ß ÇϹǷΠÁö¸éÀ¸·Î ½ÇÇà °á°ú¸¦ º¸ÀÏ ¼ö´Â ¾øÀ¸¸ç Á÷Á¢ ½ÇÇàÇØ ºÁ¾ß ÇÑ´Ù.
// ÀÏ°üµÇÁö ¸øÇÑ ¹®ÀÚ°£°Ý Å×½ºÆ®
TCHAR AeKuk[]=
TEXT("µ¿Çع°°ú ¹éµÎ»êÀÌ ¸¶¸£°í ´âµµ·Ï ÇÏ´À´ÔÀÌ º¸¿ìÇÏ»ç ¿ì¸®³ª¶ó ¸¸¼¼.")
TEXT("¹«±ÃÈ »ïõ¸® È·Á °»ê ´ëÇÑ»ç¶÷ ´ëÇÑÀ¸·Î ±æÀÌ º¸ÀüÇϼ¼");
int i;
Font F(L"±¼¸²",10,FontStyleRegular,UnitPoint);
SolidBrush B(Color(0,0,0));
for (i=0;i<=lstrlen(AeKuk);i++) {
G.FillRectangle(&SolidBrush(Color(255,255,255)),0,0,1024,50);
G.DrawString(AeKuk,i,&F,PointF(0,0),&B);
GdiFlush();
Sleep(50);
}
Äڵ带 ÀÐ¾î º¸¸é ½±°Ô µ¿ÀÛÀ» À¯ÃßÇÒ ¼ö Àִµ¥ ±ä ¹®ÀÚ¿À» Á¤ÀÇÇÏ°í 0.05ÃÊ ´ÜÀ§·Î ÇÑ ¹®ÀÚ¾¿ ²¨³» ¼ø¼´ë·Î Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù. óÀ½¿¡´Â "µ¿"ÀÚ¸¸ ³ª¿À°í ´ÙÀ½¿¡ "µ¿ÇØ", "µ¿Çع°", "µ¿Çع°°ú" ½ÄÀ¸·Î ÇѱÛÀÚ¾¿ µÚ¿¡ µ¡ºÙÀδÙ. ½ÇÇàÇØ º¸¸é ¸Å ±ÛÀÚ°¡ Ãß°¡µÉ ¶§¸¶´Ù ¾ÕÂÊ ±ÛÀÚµéÀÇ °£°ÝÀÌ Æ²·ÁÁö´Â ½É°¢ÇÑ ¹®Á¦°¡ ÀÖ´Ù. ÀÌ ¹®Á¦µµ ¹º°¡ ÀÌÀ¯°¡ ÀÖÀ» °Í °°±â´Â Çѵ¥ ¿Ö ÀÌ·¸°Ô µÇ¾î ÀÖ´ÂÁö Á¤È®È÷ ¾Ë ±æÀÌ ¾ø´Ù.
È®½ÇÇÑ °ÍÀº À̵ý ½ÄÀ¸·Î µ¿ÀÛÇؼ´Â ÀÏ°üµÈ Ãâ·ÂÀ» ÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. µÚ¿¡ ¾î¶² ¹®ÀÚµéÀÌ ¿À´Â°¡¿¡ µû¶ó ¾ÕÂÊ ¹®ÀÚ¿ÀÇ ÀÚ°£ÀÌ ´Þ¶óÁø´Ù´Ï Á¤¸» Ȳ´çÇÏ´Ù. ¿öµå ¿£ÁøÀº Á¤·Ä ¼Óµµ¸¦ ³ôÀ̱â À§ÇØ ¸Å¹ø ¹®ÀÚµéÀÇ ÆøÀ» ±¸ÇÏÁö ¾Ê°í ¹Ì¸® °³º° ¹®ÀÚÀÇ ÆøÀ» ±¸Çسõ°í ij½ÃµÈ ÆøÀ» ´õÇØ Àüü ¹®ÀÚ¿ÀÇ ÆøÀ» °è»êÇÏ´Â ±â¹ýÀ» ¾´´Ù. ÀÌ ±â¹ýÀº µÚÂÊ¿¡ ¾î¶² ¹®ÀÚ°¡ ¿À´õ¶óµµ ƯÁ¤ ¹®ÀÚÀÇ ÆøÀº ÀÏÁ¤ÇÏ´Ù´Â °¡Á¤À» ÇÏ´Â °ÍÀε¥ GDI+¿¡´Â ÀÌ °¡Á¤ÀÌ Æ²·ÁÁ® ¹ö¸®´Â °ÍÀÌ´Ù.
GDI+´Â Ãâ·Â Ç°ÁúÀ» Áß¿ä½ÃÇϸç ÁÂÇ¥ °è»ê¿¡ Á¤¹Ðµµ°¡ ³ôÀº ½Ç¼ö¸¦ ¾²´Ù º¸´Ï ¿ÀÂ÷°¡ ¹ß»ýÇÒ ¼ö´Â ÀÖ´Ù. ¶Ç ³»°¡ ¸ð¸£´Â ¾î¶² ÇÕ¸®ÀûÀÎ ÀÌÀ¯°¡ ÀÖÀ»Áöµµ ¸ð¸£°Ú´Ù. ±×·¯³ª ¾Æ¹«¸® ³í¸®ÀûÀÎ ÀÌÀ¯¸¦ ´í´Ù ÇÏ´õ¶óµµ ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ßÀÚ ÀÔÀå¿¡¼´Â ÀÌ·± Ư¼ºÀÌ ºÒÆíÇÑ °ÍÀÌ »ç½ÇÀÌ´Ù.
¿©±â¼´Â ¹®Á¦°¡ ÀÖ´Ù´Â °Í¸¸ È®ÀÎÇÏ°í ÇØ°áÃ¥Àº µû·Î Á¦½ÃÇÏÁö ¾Ê´Â´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¾²±â¿¡ ÀûÇÕÇÏÁö ¾ÊÀº ±â´ÉÀº ¿ìȸ ¹æ¹ýÀ» ã°Å³ª ´ëü ±â¼úÀ» »ç¿ëÇÏ´Â ¼ö¹Û¿¡ ¾ø´Âµ¥ ±× ±â¹ýµéÀÌ ³Ê¹« Ư¼öÇؼ ÀϹÝÀûÀÎ °Á¿¡¼ ´Ù·ê¸¸ÇÑ ³»¿ëÀº ¾Æ´Ï±â ¶§¹®ÀÌ´Ù.