ºñÆ®¸Ê »ðÀÔ ±â´ÉÀÌ Àß µ¿ÀÛÇÏ´ÂÁö ¿©·¯ Á¾·ùÀÇ ºñÆ®¸ÊÀ» »ðÀÔÇØ º¸ÀÚ. 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 ÇÔ¼öÀÇ ´Ù¾çÇÑ Ç÷¡±×µéÀº ÀÌ·± ½ÄÀ¸·Î ½º½º·Î ºñ±³ÇØ º¸¸é¼ °æÇèÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. ¿¾³¯ ¼Ó´ãÀÇ ¹éµ¶ÀÌ ºÒ¿©ÀÏŸ°¡ ÀÌ·± °æ¿ì¸¦ µÎ°í ÇÏ´Â ¸»ÀÌ´Ù. ÀÌ ÄÚµå´Â ¾îµð±îÁö³ª Å×½ºÆ®¸¦ À§ÇÑ ÀÓ½ÃÄÚµåÀ̹ǷΠºñ±³°¡ ³¡³ ÈÄ´Â »èÁ¦Çϵµ·Ï ÇÏÀÚ.