±×·¯µ¥À̼ǰú ÆÈ·¹Æ®

Win32ÀÇ GDI API·Î ±×·¯µ¥À̼ÇÀ» ¾î¶»°Ô ±×¸®¸é µÉ±î¿ä? ƯÈ÷ 1990³â´ë Áß¹ÝÀÇ À©µµ¿ì 3.x ½ÃÀý¿¡´Â ¼³Ä¡ ÇÁ·Î±×·¥ÀÌ ÆĶû-°ËÁ¤ÀÇ ±×·¯µ¥ÀÌ¼Ç È­¸éÀ¸·Î ³ªÅ¸³ª´Â °Ô À¯ÇàÀ» Ÿ´ø ½ÃÀýµµ ÀÖ¾úÁÒ.

±×·±µ¥ ÀÌ°ÍÀÌ ±âº» API ÇÔ¼ö¸¸À¸·Î´Â ½±Áö ¾Ê½À´Ï´Ù. ¿ø·¡ À©µµ¿ì GDI´Â ¸Å¿ì Á¤ÀûÀÌ°í Ãß»óÀûÀ¸·Î ¼³°èµÇ¾ú½À´Ï´Ù. ¼± Çϳª, »ö±ò Çϳªµµ PEN, BRUSH °°Àº °èÃþÀ» °ÅÃļ­ Ç¥ÇöµÇÁÒ. ´öºÐ¿¡ GDI´Â À©µµ¿ì ÃÊâ±â ½ÃÀýºÎÅÍ Áö±Ý±îÁö °ÅÀÇ º¯ÇÑ °Ô ¾ø´Â ÀÏ°üµÈ API¸¦ Á¦°øÇÔ°ú µ¿½Ã¿¡ öÀúÇÑ ÀåÄ¡ µ¶¸³¼ºÀ» ½ÇÇöÇßÁö¸¸, ±× ´ë½Å ºñµð¿À È­¸éÀ̶ó´Â ¸Åü¿¡ ƯȭµÇ¾î ÀÖ´Â ¿¡´Ï¸ÞÀ̼ÇÀ̶óµç°¡ »ö±òÀÌ Çö¶õÇÏ°Ô ¹Ù²î´Â ±×·¯µ¥À̼ÇÀ» Ç¥ÇöÇÏ´Â µ¥¿¡´Â »ó´ëÀûÀ¸·Î ÇѰ踦 µå·¯³À´Ï´Ù.

±×·¯µ¥À̼ÇÀÇ °æ¿ì, Áß°£»ö¿¡ ´ëÇؼ­ ÀÏÀÏÀÌ GDI ¿ÀºêÁ§Æ®¸¦ ¸¸µé¾ú´Ù°¡ ¼Ò¸êÀ» ÇØ¾ß Çϱ⠶§¹®¿¡ ºñÈ¿À²ÀûÀÔ´Ï´Ù. µð´õ¸µÀÌ ÇÊ¿äÇÑ ºñµð¿À Ä«µå³ª ÇÁ¸°ÅÍ µî¿¡¼­´Â ÀÌ·± Ãß»óÈ­ °èÃþÀÌ ¾µ¸ð°¡ ÀÖÁö¸¸ ¿äÁòó·³ °í¼º´É ±×·¡ÇÈ È¯°æ¿¡¼­´Â ÀÌ°ÍÀÌ °ÅÃßÀ彺·´°Ô¸¸ ÇÏ°ÚÁÒ. ¶ÇÇÑ ¿äÁò ±»ÀÌ °ÔÀÓÀÌ ¾Æ´Ï´õ¶óµµ °ÅÀÇ Çʼö¶ó ÇÒ ¼ö ÀÖ´Â ºñÆ®¸ÊÀ» ´Ù·ç´Â ±âº» API ÀÚüµµ 32ºñÆ® À©µµ¿ì·Î ¿Í¼­¾ß ¿î¿µÃ¼Á¦ APIÀÇ ÀϺηΠÁ¤½Ä ÆíÀÔµÈ °ÍÀÔ´Ï´Ù.

ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ¹«·Á ´Ù¼¸ °¡Áö ¹æ¹ýÀ¸·Î ±×·¯µ¥À̼ÇÀ» ±×·Á º¸¾Ò½À´Ï´Ù. ¹°·Ð ÀÌ·± ¿ëµµ·Î´Â GDI+¶ó´Â »õ·Î¿î API°¡ µµÀÔµÈ °Íµµ ÀÖÁö¸¸, ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ÀÏ´Ü Àç·¡½Ä GDI¸¸ »ý°¢Çϱâ·Î Çß½À´Ï´Ù.

  1. ¸Å ÁÙ¸¶´Ù Áß°£»ö¿¡ ÇØ´çÇÏ´Â PENÀ» »õ·Î »ý¼ºÇؼ­ MoveToEx()¿Í LineTo()·Î »ö±òÀ» ¹Ù²ã °¡¸ç ¼±À» ±×·È½À´Ï´Ù. ¼±À̱⠶§¹®¿¡ ÀÓÀÇÀÇ ¹æÇâÀÇ Á÷¼±À̳ª °î¼±À¸·Îµµ ±×·¯µ¥À̼ÇÀ» Ç¥ÇöÇÒ ¼ö ÀÖÁÒ.
  2. ExtTextOut()¸¦ ÀÌ¿ëÇÏ¿© ÅؽºÆ® ¹è°æ»öÀ¸·Î ä¿öÁø »ç°¢ÇüÀ» ±×¸®´Â ±â¹ýÀ» ½è½À´Ï´Ù. ÀÏÁ¾ÀÇ Æí¹ýÀÔ´Ï´Ù. MFCÀÇ CDC::FillSolidRect()°¡ ÀÌ·± ¹æ½ÄÀ¸·Î ±¸ÇöµÅ ÀÖÁö¿ä. GDI ¿ÀºêÁ§Æ®ÀÇ »ý¼º°ú ¼Ò¸êÀÌ ¾ø±â ¶§¹®¿¡ ¼Óµµ°¡ ºü¸¨´Ï´Ù. ÇÏÁö¸¸ ¼öÆò/¼öÁ÷ ±×·¯µ¥À̼Ǹ¸ ±×¸± ¼ö ÀÖ´Ù´Â ÇÑ°è°¡ ÀÖ½À´Ï´Ù.
  3. ¸Å ÁÙ¸¶´Ù Áß°£»ö¿¡ ÇØ´çÇÏ´Â PEN ´ë½Å BRUSH¸¦ »ý¼ºÇؼ­ FillRect()·Î ¼±À» ±×·È½À´Ï´Ù. PEN°ú´Â ´Þ¸® SelectObject()ÀÇ È£ÃâÀÌ ÇÊ¿ä ¾ø´Ù´Â Á¡Àº ±×³ª¸¶ ´ÙÇàÀÔ´Ï´Ù. ÀÌ°ÍÀÌ °¡Àå Á¤¼®ÀûÀÎ ¹æ¹ýÀÔ´Ï´Ù.
  4. 3°ú ºñ½ÁÇÑ ¹æ½ÄÀÌÁö¸¸ À©µµ¿ì 2000¿¡¼­ »õ·Î Ãß°¡µÈ DC BRUSH¸¦ ÀÌ¿ëÇß½À´Ï´Ù. ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â stock brush¸¦ ÇÑ ¹ø ÁöÁ¤¸¸ ÇÑ µÚ, ÀÌ BRUSHÀÇ »ö±òÀº SetDCBrushColor()·Î ÁöÁ¤¸¸ Çϸé GDI ¿ÀºêÁ§Æ® ÀÚü¸¦ °Çµå¸± ÇÊ¿ä ¾øÀÌ Áï½Ã ¹Ù²î°Ô µË´Ï´Ù. »öÀ» ºó¹øÇÏ°Ô ¹Ù²ã °¡¸ç ±×·¡ÇÈÀ» Ãâ·ÂÇÒ ¶§ ¸Å¿ì Æí¸®ÇÕ´Ï´Ù. BRUSH»Ó¸¸ ¾Æ´Ï¶ó PEN¿¡ ´ëÇؼ­µµ °°Àº ±â´ÉÀÌ Ãß°¡µÆÁö¿ä.
  5. ¾ÕÀÇ ³× °¡Áö¿Í´Â ¼º°ÝÀÌ »ç¹µ ´Ù¸¥ API¸¦ ÀÌ¿ëÇß½À´Ï´Ù. À©µµ¿ì 98ºÎÅÍ´Â ÇÁ·Î±×·¥ÀÇ Á¦¸ñ Ç¥½ÃÁÙ¿¡ ÆĶû-û·Ï ±×·¯µ¥À̼ÇÀÌ Ãß°¡µÊ°ú µ¿½Ã¿¡, ¾Õ¼­ ¸»¾¸µå¸° ´ë·Î ±âÁ¸ GDI API¸¸À¸·Î´Â ±×¸®±â°¡ °ï¶õÇÑ ±×·¯µ¥À̼ÇÀ» Çѹø¿¡ ±×·Á ÁÖ´Â GradientFill()ÀÌ Ãß°¡µÇ¾ú´Âµ¥, À̸¦ ÀÌ¿ëÇÑ °ÍÀÔ´Ï´Ù. ÀÌ ÇÔ¼ö´Â gdi32.dll¿¡ ÀÖÁö ¾Ê°í msimg32.dll¿¡ ÀÖ½À´Ï´Ù.

ÄÄÇ»ÅÍ°¡ ÇÏÀÌÄ÷¯ ÀÌ»óÀ» Ç¥ÇöÇÒ ¼ö Àִ ȯ°æÀ̶ó¸é À§ÀÇ ´Ù¼¸ ¹æ½Ä Áß ¾î´À °ÍÀ» »ç¿ëÇÏ´õ¶óµµ ¾Æ·¡ ±×¸²¿¡¼­ A¿Í µ¿ÀÏÇÑ °á°ú°¡ ³ª¿É´Ï´Ù. ÇÏÁö¸¸ 256»ö ÀÌÇÏÀÇ È¯°æ¿¡¼­´Â 1°ú 2¹ø ¹æ½ÄÀº Có·³ ÈäÇÏ°Ô Ãâ·ÂµÇ°í, 3~5¹ø ¹æ½ÄÀº ±×³ª¸¶ Bó·³ µð´õ¸µÀÌ¶óµµ µÇ¾î¼­ ³ª¿É´Ï´Ù. ¿À·ÎÁö solid color(¼ø»ö)¸¸ Áö¿øÇÏ´Â Æ溸´Ù´Â, ºê·¯½Ã°¡ ±×·¡µµ »ö±ò ó¸® ¸é¿¡¼­ ´õ ¿Ï¼ºµµ°¡ ³ôÀº ¹æ½ÄÀÓÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

÷ºÎÇÏ´Â ÇÁ·Î±×·¥À» ½ÇÇàÇؼ­ A~E Å°¸¦ ´©¸£¸é ±×·¯µ¥ÀÌ¼Ç ±×¸®´Â ¹æ½ÄÀ» ¹Ù²ã °¡¸ç È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ¼ýÀÚ 1~3À» ´©¸£¸é »ö±òÀ» ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù.

¼Ò½º ÄÚµå, ½ÇÇà ÆÄÀÏ ¹Þ±â (src19_color.zip, 23K)


ÆÈ·¹Æ®

16Ä÷¯¿¡¼­¾ß »ö±ò ¼ö°¡ ¿ö³« ºÎÁ·ÇÏ´Ï À§ÀÇ ±×¸²¿¡¼­ B ¾Æ´Ï¸é C¹Û¿¡ ´õ ´äÀÌ ¾øÁö¸¸, 256Ä÷¯ ȯ°æ¿¡¼­´Â ÆÈ·¹Æ®¸¦ ¹Ù²ã¼­ ±×·¯µ¥À̼ÇÀÌ ¾Æ½¬¿î ´ë·Î Aó·³ ³ª¿À°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆÈ·¹Æ®´Â ¿À·ÎÁö 256Ä÷¯¶ó´Â °úµµ±â ºñµð¿À ȯ°æ¿¡¼­¸¸ Á¸ÀçÇÑ ¸Å¿ì À¯º°³ª°í ƯÀÌÇÑ °³³äÀÔ´Ï´Ù. ½Ã½ºÅÛ Àüü°¡ °øÀ¯ÇÏ´Â ÆÈ·¹Æ®¶ó´Â ÀÚ¿ø¿¡¼­ ÀÀ¿ë ÇÁ·Î±×·¥º°·Î ¸¶À½´ë·Î »ç¿ë °¡´ÉÇÑ »ö±òÀ» Á¦¾îÇÏ´Â ¸ÞÄ¿´ÏÁòÀÎ ¼ÀÀÌÁÒ. ÆÈ·¹Æ®¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ´ÙÀ½À» ¿°µÎ¿¡ µÎ¸é µË´Ï´Ù.

  1. ³»°¡ ¾²°í ½ÍÀº »ö»óÀ» ¸ð¾Æ¼­ ÆÈ·¹Æ® ¿ÀºêÁ§Æ®¸¦ WM_CREATE °°Àº °÷¿¡¼­ ¹Ì¸® ¸¸µé¾î µÓ´Ï´Ù. (CreatePalette()) ÀÌ ¿ÀºêÁ§Æ®´Â ¹°·Ð ¿ì¸®°¡ ¾Ë¾Æ¼­ ¼Ò¸êµµ ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. (WM_DESTROY)
  2. WM_PAINT¿¡¼­´Â ±×·¡ÇÈÀ» Ãâ·ÂÇϱâ Àü¿¡ SelectPalette¿Í RealizePalette¸¦ È£ÃâÇÕ´Ï´Ù.
  3. ÆÈ·¹Æ®°¡ Àû¿ëµÈ »ö»óÀ» ½ÇÁ¦·Î »ç¿ëÇÏ·Á¸é COLORREF¸¦ ÀÎÀÚ·Î ¹Þ´Â °¢Á¾ GDI ÇÔ¼ö¿¡, RGB ¸ÅÅ©·Î ´ë½Å PALETTERGB ¸ÅÅ©·Î¸¦ »ç¿ëÇϵµ·Ï ÇÕ´Ï´Ù. RGB ¸ÅÅ©·Î·Î »ý¼ºµÈ 24ºñÆ® Á¤¼ö¿¡´Ù°¡ 0x02000000¶ó´Â ¸¶½ºÅ©°¡ ORµÈ °á°úÀÔ´Ï´Ù.
  4. WM_QUERYNEWPALETTE¿Í WM_PALETTECHANGED ¸Þ½ÃÁö¸¦ ó¸®ÇÕ´Ï´Ù. ÀüÀÚ´Â ³» ÇÁ·Î±×·¥ÀÌ È°¼ºÈ­µÇ¾î ÆÈ·¹Æ®¸¦ 1¼øÀ§·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾úÀ» ¶§ ¿À´Â ¸Þ½ÃÁöÀÌ°í ÈÄÀÚ´Â ÀÚ½ÅÀ̳ª ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÆÈ·¹Æ®°¡ º¯°æµÇ¾úÀ» ¶§ ¿À´Â ¸Þ½ÃÁöÀÔ´Ï´Ù.

ÇÁ·Î±×·¥¿¡¼­ »çÀ̶簳¸¦ ´©¸£¸é ÆÈ·¹Æ®ÀÇ »ç¿ë ¿©ºÎ¸¦ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. ÆÈ·¹Æ®¸¦ »ç¿ëÇÏ°Ô µÇ¸é, GradientFill() ¹æ½ÄÀ» Á¦¿ÜÇÑ ´Ù¸¥ ¸ðµç ¹æ½Ä¿¡¼­ ±×·¯µ¥À̼ÇÀÌ  "A. ¿ø»ö"À¸·Î ¿¹»Ú°Ô Ãâ·ÂµË´Ï´Ù. ÀÌ ÇÁ·Î±×·¥À» ¿©·¯ °³ ½ÇÇàÇؼ­ Á¦°¢±â ´Ù¸¥ »ö»óÀ¸·Î ÆÈ·¹Æ®¸¦ »ç¿ëÇÏ°Ô ÇØ º¸¸é Àç¹ÌÀÖ´Â ±¤°æÀÌ ÆîÃÄÁú °ÍÀÔ´Ï´Ù. ³»°¡ È°¼ºÈ­ÇØ ÀÖÀ» ¶§´Â A ¸ðµåÀÌÁö¸¸, ÆÈ·¹Æ®¸¦ ³ª¸¸Å­ »ç¿ëÇÏ´Â ´Ù¸¥ ÀνºÅϽº·Î Æ÷Ä¿½º¸¦ »©¾Ñ±â°í ³ª¸é ±×·¯µ¥À̼ÇÀÇ »ö±òÀÌ µµ·Î C ¸ðµå·Î µ¹¾Æ°¡°Ô µË´Ï´Ù. Â÷¶ó¸® ÆÈ·¹Æ®¸¦ »ç¿ëÇÏÁö ¾Ê°í ¾ÖÃÊ¿¡ ½Ã½ºÅÛ Ç¥ÁØ Ä÷¯¸¸À¸·Î µð´õ¸µÀ» ÇÏ´Â B ¸ðµå¸¸ÀÌ ¾Æ¹« ¿µÇâµµ ¹ÞÁö ¾Ê½À´Ï´Ù.

¾Æ·¡ ±×¸²¿¡¼­ Æ÷Ä¿½º¸¦ ÆĶõ»ö ÀνºÅϽº·Î ¿Å±â°í ³ª¸é, »¡°£»öÀÌ Áö±ÝÀÇ ÆĶõ»öó·³ ¿ïÅüºÒÅüÇÏ°Ô ¹Ù²î°ÚÁÒ. ÃÊ·Ï»öÀº Æ÷Ä¿½º¸¦ ¾òµç ÀÒµç ´Þ¶óÁö´Â °Ô ¾ø½À´Ï´Ù. ¿ì¸®°¡ ÁöÁ¤ÇØ ÁØ ÆÈ·¹Æ® Ä÷¯¸¸ ÀÌ¿ëÇؼ­ ¶È¶ÈÇÏ°Ô A¿Í B »çÀ̸¸À» ¿À°í°¡°Ô µð´õ¸µÀ» ½ÃÅ°´Â ±â´ÉÀº ¾ø½À´Ï´Ù. ³» ÇÁ·Î±×·¥ÀÌ È°¼ºÈ­ÀÏ ¶§¿Í ºñÈ°¼ºÀÏ ¶§ÀÇ È­¸é Ãâ·Â ·ÎÁ÷À» ¿ÏÀüÈ÷ µû·Î ºÐ¸®ÇÏÁö ¾Ê´Â ÀÌ»ó, A¿Í C »çÀÌ, ¾Æ´Ï¸é B ÀÌ·¸°Ô µü °¥¶óÁö´Â ±¸µµÀÎ °Í °°½À´Ï´Ù.

GradientFill()Àº ÆÈ·¹Æ®ÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù´Â °Íµµ Èï¹Ì·Î¿î Á¡ÀÔ´Ï´Ù. ¿î¿µÃ¼Á¦¿Í ÇÔ²² Á¦°øÇÏ´Â APIÀ̱â´Â ÇÏÁö¸¸ GDI ÀÚü¿Í´Â Ãâ½ÅÀÌ ´Ù¸£±â ¶§¹®¿¡ ±×·± °ÍÀÌ°ÚÁÒ?

¿äÁòÀº ÃÖÈÄÀÇ º¸·ç¶ó ¿©°ÜÁö´ø °ÔÀÓÁ¶Â÷µµ 256Ä÷¯¸¦ »ç¿ëÇÏÁö ¾Ê°í, µð½ºÇ÷¹ÀÌ ¼³Á¤¿¡µµ ÇÏÀÌÄ÷¯ ÀÌÇÏ´Â ¶ßÁöµµ ¾Ê´Â ¼¼»óÀÌ µÆ½À´Ï´Ù. Áö±ÝÀº ±×·¯µ¥ÀÌ¼Ç Á¤µµ´Â Àϵµ ¾Æ´Ñ °£´ÜÇÑ °úÁ¤ÀÌ µÆÁö¸¸, À̸¦ À©µµ¿ì ¿î¿µÃ¼Á¦¿¡¼­ ¸·»ó ±¸ÇöÇÏ´Ù º¸¸é, ¾î´À Á¤µµ±îÁö ȣȯ¼ºÀÌ º¸ÀåµÇ´Â API¸¦ ½á¼­ ¾î´À Á¤µµÀÇ ¿Ï¼ºµµ(256»ö ȯ°æ¿¡¼­ µð´õ¸µÀ̳ª ÆÈ·¹Æ®±îÁö ´Ù °í·ÁÇÒÁö °°Àº)·Î ¸¸µéÁö°¡ °í¹Î°Å¸®·Î ³²´Â´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

¿î¿µÃ¼Á¦µµ, ºñµð¿À Ä«µåµµ ÇÏ·ç¾Æħ¿¡ Áö±Ý°ú °°Àº ´«ºÎ½Å ¼º´ÉÀ¸·Î ¹ßÀüÇÑ °ÍÀÌ ¾Æ´ÏÁö¿ä. ´Ù °úµµ±â¸¦ °ÅÃÆ°í °ú°Å ¾øÀÌ´Â ÇöÀç°¡ ÀÖÀ» ¼ö ¾ø±â¿¡ ÆÈ·¹Æ® °°Àº ¡®°ú°Å À¯¹°¡¯µµ ³²¾Æ ÀÖ´Â °ÍÀÔ´Ï´Ù.