³ª.½ºÆ®·¹Äª ¸ðµå

ºñÆ®¸Ê »ðÀÔ ±â´ÉÀÌ Àß µ¿ÀÛÇÏ´ÂÁö ¿©·¯ Á¾·ùÀÇ ºñÆ®¸ÊÀ» »ðÀÔÇØ º¸ÀÚ. DIB¿¡´Â ÀåÄ¡¿¡ »ó°ü¾øÀÌ Ãâ·ÂÇÒ ¼ö ÀÖ´Â Á¤º¸°¡ ¸ðµÎ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î ¾Æ¹« ºñÆ®¸ÊÀ̳ª ¼±ÅÃÇصµ Àß »ðÀ﵃ °ÍÀ̸ç Æ®·¡Ä¿·Î Å©±â¸¦ º¯°æÇØ º¸¸é Å©±âµµ Àß ¹Ù²ï´Ù. ±×·±µ¥ Ä÷¯ ºñÆ®¸ÊÀ» »ðÀÔÇÑ ÈÄ ´õ ÀÛ°Ô Ãà¼ÒÇÏ¸é ±×¸²¿¡ ÀÜ»óÀÌ ¸¹ÀÌ »ý±â°í Àü¹ÝÀûÀ¸·Î ¾îµÎ¿öÁö´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â µðÆúÆ® ½ºÆ®·¹Äª ¸ðµå°¡ BLACKONWHITE·Î µÇ¾î ÀÖ¾î °¡±ÞÀû °ËÁ¤»öÀ» À¯ÁöÇϵµ·Ï µÇ¾î Àֱ⠶§¹®ÀÌ´Ù. OnPaint¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇØ º¸ÀÚ.

 

LRESULT OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   ....

   SetStretchBltMode(hMemDC,COLORONCOLOR);

   for (idx=0;idx<arNum;idx++) {

   ....

 

µµÇüÀ» ±×¸®´Â ·çÇÁ·Î ÁøÀÔÇϱâ Àü¿¡ ½ºÆ®·¹Äª ¸ðµå¸¦ COLORONCOLOR·Î ¹Ù²Ù¸é Ãà¼Ò½Ã ÈξÀ ´õ ±ò²ûÇÑ ¸ð¾çÀÇ À̹ÌÁö°¡ Ãâ·ÂµÈ´Ù. COLORONCOLOR´Â º°´Ù¸¥ ³í¸® ¿¬»ê¾øÀÌ ÁÙ ´ÜÀ§·Î »èÁ¦Çϱ⠶§¹®¿¡ Ä÷¯ À̹ÌÁö¸¦ Ãà¼ÒÇÒ ¶§´Â ÈξÀ ´õ Ç°ÁúÀÌ ÁÁ´Ù. ´ÙÀ½Àº HALFTONEÀ¸·Î ½ºÆ®·¹Äª ¸ðµå¸¦ ¹Ù²ã º¸°í µÎ ¸ðµåÀÇ °á°ú¸¦ ºñ±³ÇØ º¸ÀÚ. HALFTONEÀº ÁÖº¯ Çȼ¿ÀÇ Á¤º¸±îÁö °í·ÁÇÏ¿© À̹ÌÁö¸¦ È®´ë, Ãà¼ÒÇϹǷΠ½Ã°£ÀÌ Á¶±Ý ¿À·¡ °É¸®±â´Â ÇÏÁö¸¸ ÈξÀ ´õ ÁÁÀº À̹ÌÁö¸¦ ¸¸µç´Ù.

¹°·Ð ÀÌ µÎ ¸ðµå´Â Ä÷¯ À̹ÌÁöÀÏ °æ¿ì¿¡¸¸ ÁÁÀº °á°ú¸¦ º¸¿© ÁÖ¸ç Èæ¹é À̹ÌÁöÀÎ °æ¿ì´Â ÀÌ ¸ðµåº¸´Ù BLACKONWHITE, WHITEONBLACKÀÌ ´õ ÁÁÀº ¼±ÅÃÀÌ µÉ °ÍÀÌ´Ù. ÇÏÁö¸¸ ¿äÁò Èæ¹é À̹ÌÁö´Â º¸±â µå¹°¹Ç·Î °¡±ÞÀû Ä÷¯ À̹ÌÁö¸¦ º¸±â ÁÁ°Ô Ãâ·ÂÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù. µÎ °¡Áö ¸ðµå Áß HALFTONEÀÇ Ç°ÁúÀÌ ´õ ÁÁÀ¸¹Ç·Î ¾à°£ÀÇ ¼Óµµ °¨¼Ò¸¦ °í·ÁÇÏ´õ¶óµµ HALFTONEÀ» ¼±ÅÃÇÏ´Â °ÍÀÌ Çö¸íÇÏ´Ù.

±×·¯³ª ¹®Á¦°¡ Àִµ¥ HALFTONEÀº 98¿¡¼­´Â Áö¿øµÇÁö ¾ÊÀ¸¸ç NT À̻󿡼­¸¸ Áö¿øµÈ´Ù´Â Á¡ÀÌ´Ù. ±×·¡¼­ 98¿¡¼­´Â COLORONCOLOR¸¦, NT À̻󿡼­´Â HALFTONE ¸ðµå¸¦ ¾²´Â °ÍÀÌ °¡Àå ÇÕ¸®ÀûÀÌ´Ù. Àü¿ª º¯¼ö StretchMode º¯¼ö¸¦ Ãß°¡ÇÏ°í ¸ÞÀÎ À©µµ¿ì°¡ »ý¼ºµÉ ¶§ ¿î¿µÃ¼Á¦ÀÇ ¹öÀü¿¡ µû¶ó ½ºÆ®·¹Äª ¸ðµå¸¦ ¹Ì¸® ¼±ÅÃÇÑ ÈÄ OnPaint¿¡¼­ ÀÌ ¸ðµå¸¦ »ç¿ëÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.

 

int StretchMode;

....

LRESULT Main_OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   OSVERSIONINFO osv;

  

   osv.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);

   GetVersionEx(&osv);

   if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT) {

      StretchMode=HALFTONE;

   } else {

      StretchMode=COLORONCOLOR;

   }

   ....

 

LRESULT OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   ....

   SetStretchBltMode(hMemDC,StretchMode);

   for (idx=0;idx<arNum;idx++) {

   ....

 

ÀÌ·¸°Ô Çϸé NT/2000¿¡¼­´Â °¡Àå Ç°ÁúÀÌ ÁÁÀº HALFTONE ½ºÆ®·¹Äª ¸ðµå¸¦ »ç¿ëÇÒ °ÍÀÌ°í ÀÌ ¸ðµå¸¦ Áö¿øÇÏÁö ¾Ê´Â 95/98¿¡¼­´Â COLORONCOLOR ½ºÆ®·¹Äª ¸ðµå°¡ ´ë½Å »ç¿ëµÇ¾î ¿î¿µÃ¼Á¦ÀÇ Áö¿øÀ» ÃÖ´ëÇÑÀ¸·Î ¹ÞÀ» ¼ö ÀÖ´Ù. OnPaint¿¡¼­ ½ºÆ®·¹Äª ¸ðµå¸¦ Á÷Á¢ ¼±ÅÃÇÏÁö ¾Ê°í º°µµÀÇ Àü¿ª º¯¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â °¡±ÞÀûÀÌ¸é ±×¸®´Â ½Ã°£À» ´ÜÃàÇϱâ À§Çؼ­ÀÌ´Ù. ½ÇÇàÁß¿¡ ¿î¿µÃ¼Á¦°¡ ¹Ù²ð ¸®´Â Àý´ë·Î ¾øÀ¸´Ï ±×¸± ¶§¸¶´Ù ¿î¿µÃ¼Á¦ÀÇ ¹öÀüÀ» ¸Å¹ø Á¶»çÇÒ ÇÊ¿ä´Â ¾ø´Â °ÍÀÌ´Ù. OnPaint´Â ¾ÆÁÖ ÀÚÁÖ È£ÃâµÇ´Â ÇÔ¼öÀ̹ǷΠ°¡±ÞÀûÀÌ¸é »¡¸® ó¸®ÇØ¾ß ÇÑ´Ù.

½ºÆ®·¹Äª ¸ðµå¿¡ µû¶ó Ãâ·Â Ç°Áú¿¡ ¾î¶² Â÷ÀÌÁ¡ÀÌ ÀÖ´ÂÁö ºñ±³ÇØ º¸°í ½Í´Ù¸é ¸ðµå¸¦ ¹Ù²ã °¡¸ç ºñÆ®¸ÊÀ» ¿©·¯ ¹ø Ãâ·ÂÇØ º¸¸é µÈ´Ù. ±×·¯³ª ¼Ò½º¸¦ ÀÏÀÏÀÌ °íÃÄ °¡¸é¼­ ÀÌÀü Ãâ·Â°ú »õ·Î¿î Ãâ·ÂÀ» ºñ±³ÇÑ´Ù´Â °ÍÀº ±²ÀåÈ÷ ¹ø°Å·Ó°í ¶Ç ÇÑ´«¿¡ Â÷ÀÌÁ¡À» ºñ±³Çϱ⵵ ¹«Ã´ ¾î·Æ´Ù. ÀÌ·² ¶§´Â ½ºÆ®·¹Äª ¸ðµå¸¦ ¹Ù²ã °¡¸ç Ãâ·ÂÇÏ´Â °£´ÜÇÑ Å×½ºÆ® Äڵ带 ÀÛ¼ºÇÏ°í ½Ç½Ã°£À¸·Î °á°ú¸¦ ºñ±³ÇÏ´Â ¹æ¹ýÀ» ¾µ ¼ö ÀÖ´Ù. OnKeyDownÀÇ ¼±µÎ¿¡ ´ÙÀ½ Àӽà Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.

 

LRESULT OnKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   char str[128];

   switch (wParam) {

   case VK_F1:StretchMode=BLACKONWHITE;lstrcpy(str,"BLACKONWHITE");break;

   case VK_F2:StretchMode=WHITEONBLACK;lstrcpy(str,"WHITEONBLACK");break;

   case VK_F3:StretchMode=COLORONCOLOR;lstrcpy(str,"COLORONCOLOR");break;

   case VK_F4:StretchMode=HALFTONE;lstrcpy(str,"HALFTONE");break;

   }

   SetWindowText(GetParent(hWnd),str);

   InvalidateRect(hWnd,NULL,FALSE);

   return 0;

   ....

 

´­·¯Áø Æã¼ÇÅ°¿¡ µû¶ó ½ºÆ®·¹Äª ¸ðµå¸¦ ¹Ù²Ù°í ´Ù½Ã ±×¸®µµ·Ï ÇßÀ¸¹Ç·Î ºñÆ®¸ÊÀ» Ãà¼ÒÇØ ³õÀº »óÅ·ΠÆã¼ÇÅ°¸¦ ´­·¯ º¸¸é Â÷ÀÌÁ¡À» °üÂûÇغ¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. API ÇÔ¼öÀÇ ´Ù¾çÇÑ Ç÷¡±×µéÀº ÀÌ·± ½ÄÀ¸·Î ½º½º·Î ºñ±³ÇØ º¸¸é¼­ °æÇèÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. ¿¾³¯ ¼Ó´ãÀÇ ¹éµ¶ÀÌ ºÒ¿©ÀÏŸ°¡ ÀÌ·± °æ¿ì¸¦ µÎ°í ÇÏ´Â ¸»ÀÌ´Ù. ÀÌ ÄÚµå´Â ¾îµð±îÁö³ª Å×½ºÆ®¸¦ À§ÇÑ ÀÓ½ÃÄÚµåÀ̹ǷΠºñ±³°¡ ³¡³­ ÈÄ´Â »èÁ¦Çϵµ·Ï ÇÏÀÚ.