4.Ææ

°¡.ÆæÀÇ »ý¼º

ÆæÀº GDI¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¼±À» ±×À» ¶§ »ç¿ëÇÏ´Â ±×·¡ÇÈ ¿ÀºêÁ§Æ®À̸ç GDI+¿¡¼­´Â Pen °´Ã¼·Î Ç¥ÇöÇÑ´Ù. ¿Ü°û¼±À» ±×¸®´Â Draw* ÇÔ¼öÀÇ Ã¹ ¹ø° Àμö·Î Àü´ÞµÇ¹Ç·Î ¼±À» ±×¸®±â Àü¿¡ Ç×»ó ÆæÀ» ¸ÕÀú ¸¸µé¾î¾ß ÇÑ´Ù. PenÀÇ »ý¼ºÀÚ´Â ´ÙÀ½ µÎ °¡Áö°¡ ÀÖ´Ù.

 

Pen(const Color &color, REAL width);

Pen(const Brush *brush, REAL width);

 

ù ¹ø° »ý¼ºÀÚ´Â ÆæÀÇ »ö»ó°ú µÎ²²¸¦ ÁöÁ¤Çϴµ¥ µÎ²²¸¦ »ý·«Çϸé 1ÀÌ Àû¿ëµÈ´Ù.  °¡Àå ÀϹÝÀûÀÎ ÆæÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.

 

¿¹ Á¦ : GdiPlusPen

GdiPlusPen ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í Ææ ¿ÀºêÁ§Æ®ÀÇ ¿©·¯°¡Áö ¼Ó¼ºÀ» Å×½ºÆ®ÇØ º¸ÀÚ. ´ÙÀ½ ÄÚµå´Â ±½±â 3ÀÇ »¡°£»ö ÆæÀ» ¸¸µé¾î ¼öÆò¼±À» ±×¸°´Ù.

 

Pen P(Color(255,0,0),3);

 

G.DrawLine(&P,10,10,200,10);

µÎ ¹ø° »ý¼ºÀÚ´Â ºê·¯½Ã·ÎºÎÅÍ ÆæÀ» »ý¼ºÇÑ´Ù. ÆæÀÇ µÎ²²°¡ ±½¾îÁö¸é ¼±¿¡µµ ¸éÀÌ »ý±â´Âµ¥ ÀÌ ¸éÀ» ä¿öÁÙ ºê·¯½Ã¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ ÄÚµå´Â ÇØÄ¡ ºê·¯½Ã·ÎºÎÅÍ ±½Àº ÆæÀ» ¸¸µé¾î Ÿ¿øÀ» ±×¸°´Ù.

 

HatchBrush H(HatchStyleWeave,Color(255,0,0),Color(0,255,0));

Pen P(&H,20);

 

G.DrawEllipse(&P,20,20,300,200);

Àμö·Î Àü´ÞµÇ´Â ºê·¯½Ã¸¸ ¹Ù²Ù¸é Ææ¿¡ ÀÇÇØ ±×·ÁÁö´Â µÎ²¨¿î ¼±ÀÇ Ã¤»ö ¸ð¾çÀ» ´Ù¾çÇÏ°Ô ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. Pen Ŭ·¡½ºÀÇ »ý¼ºÀÚ´Â »ö»ó°ú ±½±â¸¸À» ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸ ÀÌ ¿Ü¿¡µµ ÆæÀº ¾ÆÁÖ ´Ù¾çÇÑ ¼Ó¼ºÀ» °¡Áú ¼ö ÀÖÀ¸¸ç Pen Ŭ·¡½º¿¡´Â ¼Ó¼ºÀ» Á¶»çÇϰųª º¯°æÇÏ´Â ¸â¹ö ÇÔ¼öµéÀÌ Á¤ÀǵǾî ÀÖ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ½ÇÇàÁß¿¡ ÆæÀÇ »ö»ó°ú ºê·¯½Ã, ÆæÀÇ µÎ²² µîÀ» º¯°æÇÑ´Ù.

 

Status SetColor(const Color &color);

Status SetBrush(const Brush *brush);

Status SetWidth(REAL width);

 

¹°·Ð ¹Ý´ë ÇÔ¼öÀÎ Get~µµ Á¤ÀǵǾî À־ ÆæÀÇ ¼Ó¼ºÀ» Á¶»çÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â °ËÁ¤»öÀ¸·ÎºÎÅÍ Ãâ¹ßÇÏ¿© Á¡Á¡ ÆĶõ»öÀ¸·Î ÆæÀÇ »ö»óÀ» º¯°æÇØ °¡¸é¼­ ¼öÆò¼±À» ¿¬¼ÓÀûÀ¸·Î Ãâ·ÂÇÑ´Ù.

 

int i;

Pen P(Color(0,0,0));

 

for (i=0;i<256;i++) {

     P.SetColor(Color(0,0,255-i));

     G.DrawLine(&P,0,i,300,i);

}

¼³Ä¡ È­¸é µî¿¡¼­ ÈçÈ÷ º¼ ¼ö ÀÖ´Â ±×¶óµ¥ÀÌ¼Ç ¸ð¾çÀÌ´Ù. GDI+¿¡´Â ÀÌ·± ¸ð¾çÀÇ ºê·¯½Ã¸¦ ¸¸µé ¼öµµ ÀÖÀ¸¹Ç·Î ÀÏÀÏÀÌ ÆæÀ» ¹Ù²ã °¡¸ç ±×¶óµ¥À̼ÇÀ» ±×¸± ÇÊ¿ä´Â ¾ø´Ù.

³ª.¼±ÀÇ ¸ð¾ç

ÆæÀº óÀ½ »ý¼ºµÉ ¶§ ½Ç¼±À¸·Î »ý¼ºµÇÁö¸¸ ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¼±ÀÇ ¸ð¾çÀ» Á¡¼±À̳ª ÀÏÁ¡ ¼â¼± µîÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.

 

Status SetDashStyle(DashStyle dashStyle);

 

ÁöÁ¤ °¡´ÉÇÑ ¼±ÀÇ ¸ð¾çÀº ´ÙÀ½°ú °°Àº ¿­°ÅÇüÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù.

 

typedef enum {

    DashStyleSolid = 0,

    DashStyleDash = 1,

    DashStyleDot = 2,

    DashStyleDashDot = 3,

    DashStyleDashDotDot = 4,

    DashStyleCustom = 5

} DashStyle;

 

¼±À» ±¸¼ºÇÏ´Â ²÷¾îÁø ÀÛÀº ¼±ºÐµéÀ» ´ë½¬¶ó°í Çϴµ¥ ´ë½¬°£ÀÇ °£°ÝÀº ¼±ÀÇ µÎ²²¿Í °°´Ù. ¾ãÀº Ææ¿¡¼­´Â ´ë½¬µµ ÃÎÃÎÇÏÁö¸¸ ÆæÀÌ ±½À¸¸é ´ë½¬°£ÀÇ °£°Ýµµ ±×¸¸Å­ ³Ð¾îÁø´Ù. ´ÙÀ½ ÄÚµå´Â GDI+°¡ ±âº»ÀûÀ¸·Î Áö¿øÇÏ´Â Ææ ½ºÅ¸ÀÏÀ» ¸ðµÎ Ãâ·ÂÇØ º» °ÍÀÌ´Ù.

 

Pen P(Color(0,0,0),5);

int i;

 

for (i=0;i<5;i++) {

     P.SetDashStyle((DashStyle)i);

     G.DrawLine(&P,10,i*20+20,300,i*20+20);

}

 

¿ÞÂÊÀº ¼±ÀÇ µÎ²²°¡ 5ÀÏ ¶§ÀÇ Ãâ·Â °á°úÀÌ°í ¿À¸¥ÂÊÀº ¼±ÀÇ µÎ²²¸¦ 2·Î Á¶Á¤ÇßÀ» ¶§ÀÇ °á°úÀÌ´Ù.

 

´ë½¬ÀÇ °£°ÝÀÌ ¼±ÀÇ µÎ²²¿¡ ¿µÇâÀ» ¹Þ´Â´Ù´Â °ÍÀ» ¾Ë ¼ö Àִµ¥ ÀÌ´Â ¹«Ã´ ÇÕ¸®ÀûÀÌ´Ù. GDIµµ ÆæÀÇ ¸ð¾çÀ» º¯°æÇÒ ¼ö´Â ÀÖÁö¸¸ µÎ²²°¡ 1ÀÏ ¶§¸¸ ¼±ÀÇ ¸ð¾çÀÌ À¯ÁöµÇ´Âµ¥ ºñÇØ GDI+´Â ÆæÀÌ ±½¾îµµ ½ºÅ¸ÀÏÀÌ Àû¿ëµÈ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. GDI+°¡ ¹Ì¸® Á¤ÀÇÇØ ³õÀº ´ë½¬ ¸ð¾çÀº ´Ù¼¸ °³¿¡ ºÒ°úÇÏÁö¸¸ ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é »ç¿ëÀÚ°¡ ¿øÇÏ´Â ¾î¶² ½ºÅ¸ÀÏÀÇ Ææµµ ¸¸µé ¼ö ÀÖ´Ù.

 

Status SetDashPattern(const REAL *dashArray, INT count);

 

½Ç¼öÇü ¹è¿­¿¡ Á¡¼± ±æÀÌ¿Í °ø¹é ±æÀ̸¦ ÀÛ¼ºÇÏ¿© ±× Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ°í count¿¡ ¹è¿­ Å©±â¸¦ ¾Ë·Á ÁÖ¸é ¹è¿­¿¡ ÀúÀåµÈ ±æÀÌ´ë·Î ´ë½¬¸¦ ¸¸µç´Ù. ´ÙÀ½ ÄÚµå´Â ¾ÆÁÖ ºÒ±ÔÄ¢ÇÑ ¸ð¾çÀÇ ´ë½¬¸¦ »ý¼ºÇÑ´Ù.

 

Pen P(Color(0,0,0),5);

REAL arDash[]={3.0f,1.0f,8.0f,2.0f,5.0f,1.0f};

 

P.SetDashStyle(DashStyleCustom);

P.SetDashPattern(arDash,sizeof(arDash)/sizeof(arDash[0]));

G.DrawLine(&P,10,50,300,50);

 

óÀ½ 3´ÜÀ§¸¸Å­ ´ë½¬¸¦ ¸¸µé°í ´ÙÀ½ 1´ÜÀ§´Â °ø¹é, ´ÙÀ½ 8´ÜÀ§´Â ´ë½¬, ´ÙÀ½ 2´ÜÀ§´Â °ø¹é µîÀ¸·Î ´ë½¬ ¸ð¾çÀ» ÁöÁ¤Çß´Ù. ¹è¿­ÀÇ Â¦¼ö¹ø° ¼ö´Â ´ë½¬ÀÇ ±æÀÌÀÌ°í Ȧ¼ö¹ø° ¼ö´Â °ø¹éÀÇ ±æÀÌÀÌ´Ù. À̶§ °¢ ´ÜÀ§´Â Ææ ±½±âÀÇ ¹è¼öÀÌ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

´ë½¬¿Í °ø¹éÀÇ ±æÀ̸¦ ¸¶À½´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¾î¶² ½ºÅ¸ÀÏÀÇ ÆæÀ̵çÁö ¸¸µé ¼ö ÀÖ´Â ¼ÀÀÌ´Ù. µ¥½¬´Â ¼±ÀÇ ½ÃÀÛ ÁÂÇ¥¿¡¼­ºÎÅÍ ¹«´Ì°¡ ³ªÅ¸³ª¸ç ´ë½¬ ±æÀ̺¸´Ù ´õ ±ä ¼±À» ±×À¸¸é ¹«´Ì°¡ ¹Ýº¹µÈ´Ù. ´ë½¬ÀÇ ½ÃÀÛÀÌ ¼±ÀÇ ½ÃÀÛºÎÅÍÀε¥ ´ÙÀ½ ÇÔ¼ö·Î ¿ÀÇÁ¼ÂÀ» º¯°æÇÏ¸é ´ë½¬ÀÇ ½ÃÀÛ À§Ä¡¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù.

 

Status SetDashOffset(REAL dashOffset);

 

ÁöÁ¤ÇÑ ¿ÀÇÁ¼Â¸¸Å­ °Ç³Ê¶Ú ÀÚ¸®¿¡¼­ ´ë½¬°¡ ½ÃÀ۵ȴÙ. ´ë°³ÀÇ °æ¿ì´Â ´ë½¬°¡ ¾îµð¼­ºÎÅÍ ½ÃÀ۵Ǵ°¡°¡ Áß¿äÇÏÁö ¾ÊÁö¸¸ ¼±ÀÇ ¸ð¾çÀÌ ¾ÆÁÖ µ¶Æ¯ÇÏ´Ù¸é ÁÖº¯ÀÇ Ãâ·Â ¸ð¾ç°ú Á¶È­¸¦ ÀÌ·ç±â À§ÇØ ´ë½¬ÀÇ ½ÃÀÛ À§Ä¡°¡ Áß¿äÇÒ ¼öµµ ÀÖ´Ù. ÀÏÁ¡ ¼â¼±ÀÇ °æ¿ì ±äÁÙ, ªÀºÁÙÀÌ ¹Ýº¹µÇ´Âµ¥ ¿ÀÇÁ¼ÂÀ» º¯°æÇϸé ªÀºÁÙºÎÅÍ ½ÃÀÛÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ´ë½¬ÀÇ ¿ÀÇÁ¼ÂÀ» ÁÖ±âÀûÀ¸·Î º¯È­½ÃÅ´À¸·Î½á ¼±Åà ¿µ¿ªÀ» ¾Ö´Ï¸ÞÀ̼ÇÇÏ´Â È¿°ú¸¦ ³½´Ù.

 

¿¹ Á¦ : DashAnimation

REAL Offset = 0;

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     Pen P(Color(0,0,0),2);

     P.SetDashStyle(DashStyleDash);

     P.SetDashOffset(Offset);

     G.DrawRectangle(&P,10,10,200,150);

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HDC hdc;

     PAINTSTRUCT ps;

 

     switch(iMessage) {

     case WM_CREATE:

          hWndMain=hWnd;

          SetTimer(hWnd,1,200,NULL);

          return 0;

     case WM_TIMER:

          Offset--;

          if (Offset < 0) Offset = 3;

          InvalidateRect(hWnd,NULL,TRUE);

          return 0;

     case WM_PAINT:

          hdc=BeginPaint(hWnd, &ps);

          OnPaint(hdc);

          EndPaint(hWnd, &ps);

          return 0;

     case WM_DESTROY:

          PostQuitMessage(0);

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

OnPaint¿¡¼­ Á¡¼±À¸·Î »ç°¢ÇüÀ» ±×¸®µÇ ´ë½¬ÀÇ ½ÃÀÛ À§Ä¡¸¦ Àü¿ª º¯¼ö OffsetÀ¸·Î ÁöÁ¤Çß´Ù. WndProc¿¡¼­ 0.2ÃÊ °£°ÝÀÇ Å¸À̸Ӹ¦ ¼³Ä¡ÇÏ°í OffsetÀ» 0~3 »çÀÌ·Î ÁÖ±âÀûÀ¸·Î º¯È­½ÃÅ´À¸·Î½á ¶È°°Àº »ç°¢ÇüÀÌ¶óµµ ¸ð¾çÀÌ ´Þ¶óÁø´Ù. ÃÊ´ç ´Ù¼¸ ¹ø¾¿ ´ë½¬°¡ ½Ã°è ¹æÇâÀ¸·Î ȸÀüÇÏ´Â °Íó·³ º¸ÀδÙ. Æ÷Åä¼¥°°Àº ±×·¡ÇÈ ÇÁ·Î±×·¥¿¡¼­ ÀÌ·± ²Ù¹°´ë´Â µµÇüÀ¸·Î ¼±Åà ¿µ¿ªÀ» Ç¥½ÃÇÑ´Ù.

´ë½¬ÀÇ ¿ÀÇÁ¼ÂÀ» º¯°æÇÏ´Â ±â´ÉÀÌ ¾ø´Ù¸é °¢ ¼±ºÐÀ» ÀÏÀÏÀÌ ±×·Á¾ß ÇϹǷΠÀÌ¿Í °°Àº È¿°ú¸¦ ±¸ÇöÇϱⰡ »ó´çÈ÷ ¾î·Æ´Ù. ÀÌ ¿¹Á¦´Â ´Ü¼øÇÑ »ç°¢ÇüÀ» ±×·Á º°·Î ¸ÚÀÌ ¾øÁö¸¸ Æнº¸¦ »ç¿ëÇÏ¸é ±ÛÀÚ³ª ÀÓÀÇÀÇ °î¼± ¿µ¿ª¿¡ ´ëÇؼ­µµ ¾Ö´Ï¸ÞÀ̼ÇÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù.

´Ù.¼±ÀÇ ³¡¸ð¾ç

¼±ÀÇ ³¡¸ð¾çÀº º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ¸¸é ¹Ô¹ÔÇÑ »ç°¢ÇüÀÌ´Ù. ±×·¯³ª ´ÙÀ½ ÇÔ¼öµéÀ» »ç¿ëÇÏ¸é ³¡ ¸ð¾ç¿¡ ¾à°£ÀÇ Àå½ÄÀ» ´Þ ¼ö ÀÖ´Ù.

 

Status SetStartCap(LineCap startCap);

Status SetEndCap(LineCap endCap);

Status SetDashCap(DashCap dashCap);

Status SetLineCap(LineCap startCap, LineCap endCap, DashCap dashCap);

 

¼±ÀÇ ³¡ ¸ð¾çÀº ´ÙÀ½ ¿­°ÅÇü Áß Çϳª·Î ÁöÁ¤ÇÑ´Ù.

 

typedef enum {

    LineCapFlat = 0,

    LineCapSquare = 1,

    LineCapRound = 2,

    LineCapTriangle = 3,

    LineCapNoAnchor = 0x10,

    LineCapSquareAnchor = 0x11,

    LineCapRoundAnchor = 0x12,

    LineCapDiamondAnchor = 0x13,

    LineCapArrowAnchor = 0x14,

    LineCapCustom = 0xff

} LineCap;

 

SetStartCap, SetEndCap ÇÔ¼ö´Â ¼±ÀÇ ¾çÂÊ ³¡ Àå½ÄÀ» ÁöÁ¤Çϴµ¥ LineCap ¿­°ÅÇü Áß Çϳª¸¦ ÁöÁ¤ÇÑ´Ù. °£´ÜÇÑ Å×½ºÆ® Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.

 

Pen P(Color(0,0,0),10);

 

P.SetStartCap(LineCapArrowAnchor);

P.SetEndCap(LineCapDiamondAnchor);

G.DrawLine(&P,30,30,300,30);

P.SetStartCap(LineCapRound);

P.SetEndCap(LineCapTriangle);

G.DrawLine(&P,30,60,300,60);

P.SetStartCap(LineCapSquareAnchor );

P.SetEndCap(LineCapRoundAnchor );

G.DrawLine(&P,30,90,300,90);

 

¼¼ °³ÀÇ ¼öÆò¼±À» ±×¸®µÇ °¢ ¼±ÀÇ ³¡ ¸ð¾çÀ» ¸ðµÎ ´Ù¸£°Ô ÁöÁ¤ÇØ º¸¾Ò´Ù.

¼± ³¡¿¡ È­»ìÇ¥¸¦ ´Þ°Å³ª µÕ±Ù Àå½Ä, ³×¸ð Àå½Ä µîÀ» ºÙÀÏ ¼ö ÀÖ´Ù. °¢ Àå½ÄÀÇ Å©±âµµ ¼±ÀÇ ±½±â¿¡ ºñ·ÊÇؼ­ Ä¿Áø´Ù. SetDashCap ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ´ë½¬ÀÇ ¸ð¾çµµ ´ÙÀ½ Áß Çϳª·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

 

typedef enum {

    DashCapFlat = 0,

    DashCapRound = 2,

    DashCapTriangle = 3

} DashCap;

 

½Ç¼±ÀÌ ¾Æ´Ò °æ¿ì ²÷¾îÁø °¢°¢ÀÇ ´ë½¬ ¾çÂÊÀº ÀÌ ¿­°ÅÇüÀÌ ÁöÁ¤ÇÏ´Â ¸ð¾çÀ¸·Î ¹Ù²ï´Ù. °£´ÜÇÑ Å×½ºÆ® Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.

 

Pen P(Color(0,0,0),10);

 

P.SetDashStyle(DashStyleDashDot);

 

P.SetDashCap(DashCapFlat);

G.DrawLine(&P,10,20,300,20);

 

P.SetDashCap(DashCapRound);

G.DrawLine(&P,10,40,300,40);

 

P.SetDashCap(DashCapTriangle);

G.DrawLine(&P,10,60,300,60);

´ë½¬ÀÇ ³¡ ºÎºÐÀÌ µÕ±Û°Ô ¶Ç´Â »ï°¢Çü ¸ð¾çÀ¸·Î ³ªÅ¸³­´Ù. ´ë½¬ ½ºÅ¸ÀÏÀº ¼± ±½±â°¡ 1ÀÏ ¶§´Â ¾Æ¹« È¿°úµµ ¾øÀ» °ÍÀÌ´Ù. SetLineCap ÇÔ¼ö´Â ½ÃÀÛ, ³¡, ´ë½¬ÀÇ ¸ð¾çÀ» ÇѲ¨¹ø¿¡ ÁöÁ¤ÇÑ´Ù. È­¸é¿¡¼­´Â ´ë½¬ ¸ð¾çÀÌ ¹«Ã´ °ÅÄ¥°Ô Ç¥ÇöµÇÁö¸¸ ÇÁ¸°ÅÍ°°Àº °íÇØ»óµµ Àåºñ¿¡¼­´Â ÈξÀ ´õ ¼¶¼¼ÇÑ ¸ð¾çÀ¸·Î ±×·ÁÁú °ÍÀÌ´Ù.

¶ó.Á¶ÀÎ ¸ð¾ç

Á¶ÀÎ ¸ð¾çÀº µÎ ¼±ºÐÀÌ ¸¸³ª ²©¾îÁö´Â ºÎºÐÀÇ ¸ð¾çÀ» ÁöÁ¤ÇÑ´Ù. º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ¸¸é µÎ ¼±ºÐÀÌ Á÷±³ÇÏ´Â ¸ð¾çÀ» ±×¸®Áö¸¸ ´ÙÀ½ ÇÔ¼ö·Î Á¶ÀÎ ¸ð¾çÀ» ¹Ù²Ù¸é ´Ù¸¥ ¸ð¾çÀ¸·Î ±×¸± ¼öµµ ÀÖ´Ù.

 

Status SetLineJoin(LineJoin lineJoin);

 

Å×½ºÆ® Äڵ带 ÀÛ¼ºÇÏ¿© °á°ú¸¦ º¸µµ·Ï ÇÏÀÚ. ¸»·Î ½ºÅ¸ÀÏÀ» ¼³¸íÇÏ´Â °Íº¸´Ù´Â ½ºÅ¸ÀÏ¿¡ µû¶ó ±×·ÁÁö´Â ¸ð¾çÀ» Á÷Á¢ ´«À¸·Î º¸´Â °ÍÀÌ ´õ ½±´Ù.

 

Pen P(Color(0,0,0),15);

 

P.SetLineJoin(LineJoinMiter);

G.DrawRectangle(&P,10,10,60,60);

 

P.SetLineJoin(LineJoinBevel);

G.DrawRectangle(&P,110,10,60,60);

 

P.SetLineJoin(LineJoinRound);

G.DrawRectangle(&P,10,110,60,60);

 

P.SetLineJoin(LineJoinMiterClipped);

G.DrawRectangle(&P,110,110,60,60);

Á÷»ç°¢Çüó·³ µÎ ¼±ºÐÀÌ ¸¸³ª´Â ¸ð³­ ºÎºÐÀÇ Àå½ÄÀÌ µÕ±×½º·³ÇØÁö±âµµ ÇÏ°í ±ïÀÎ ¸ð¾çÀÌ µÇ±âµµ ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ¼±ÀÇ Á¤·Ä ¹æ½ÄÀ» º¯°æÇÑ´Ù.

 

Status SetAlignment(PenAlignment penAlignment);

 

Á¤·Ä ¹æ½ÄÀ̶õ ÁöÁ¤ÇÑ ÁÂÇ¥¿¡ ´ëÇØ ÆæÀÇ µÎ²²°¡ ¾î´ÀÂÊÀ¸·Î È®ÀåµÉ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù. Áß¾Ó°ú ¾ÈÂÊÀ¸·Î Á¤·ÄÇÒ ¼ö Àִµ¥ µðÆúÆ®´Â Áß¾ÓÀÌ´Ù. ±×·¡¼­ ÆæÀÌ ±½À» °æ¿ì ÁöÁ¤ÇÑ ÁÂÇ¥º¸´Ù ´õ ¹Ù±ù¿¡ ¼±ÀÌ ±×·ÁÁú ¼öµµ ÀÖ´Ù. Á¤·Ä ¹æ½ÄÀ» ¾ÈÂÊÀ¸·Î º¯°æÇÏ¸é µµÇüÀÇ ¾ÈÂÊÀ¸·Î¸¸ ¼±ÀÇ µÎ²²°¡ È®ÀåµÇ¾î °æ°è¹ÛÀ» ¹þ¾î³ªÁö ¾Ê´Â´Ù.

 

Pen P(Color(192,192,192),15);

Pen P2(Color(0,0,0),1);

 

// Á߽ɿ¡ Á¤·Ä

P.SetAlignment(PenAlignmentCenter);

G.DrawRectangle(&P,10,10,100,100);

G.DrawLine(&P,10,150,300,150);

 

// ¾ÈÂÊÀ¸·Î Á¤·Ä

P.SetAlignment(PenAlignmentInset);

G.DrawRectangle(&P,200,10,100,100);

G.DrawLine(&P,10,200,300,200);

 

// È®ÀÎÀ» À§ÇÑ ¾È³»¼±

G.DrawRectangle(&P2,10,10,100,100);

G.DrawRectangle(&P2,200,10,100,100);

G.DrawLine(&P2,10,150,300,150);

G.DrawLine(&P2,10,200,300,200);

ÆæÀÌ ¾ÆÁÖ ±½À» °æ¿ì´Â ÀÌ Á¤·Ä ¹æ½Ä¿¡ µû¶ó ±×·ÁÁö´Â µµÇüÀÇ ¸ð¾çÀÌ »ó´çÈ÷ ´Þ¶óÁø´Ù. Á¤·Ä ¹æ½ÄÀº ´ÝÈù µµÇüÀ» ±×¸± ¶§¸¸ Àû¿ëµÇ¸ç Á÷¼±À̳ª ¿øȣó·³ ³»ºÎ/¿ÜºÎÀÇ ±¸ºÐÀÌ ¾ø´Â µµÇü¿¡ ´ëÇؼ­´Â Ç×»ó Áß¾ÓÀ¸·Î Á¤·ÄµÈ´Ù. ¾ÈÂÊ Á¤·Ä ¹æ½ÄÀº GDIÀÇ PS_INSIDEFRAME°ú °³³äÀûÀ¸·Î µ¿ÀÏÇÏ´Ù.