³ª. ´õºí ¹öÆÛ¸µ

¸î °¡Áö ÃÖÀûÈ­¿¡ ÀÇÇØ ½ÇÇà¼Óµµ´Â ´ëÆøÀûÀ¸·Î Çâ»óÀÌ µÇ¾úÁö¸¸ ¾ÆÁ÷ ÀÌ ÇÁ·Î±×·¥Àº Å« ¹®Á¦Á¡À» Çϳª °¡Áö°í ÀÖ´Ù. ±ÛÀÚ¸¦ »ðÀÔ, »èÁ¦ÇÒ ¶§¸¶´Ù È­¸é Àüü¸¦ ´Ù½Ã ±×¸®±â ¶§¹®¿¡ È­¸é ±ô¹ÚÀÓÀÌ ¹«Ã´ ½ÉÇÏ´Ù´Â Á¡ÀÌ´Ù. ÄÄÇ»ÅÍ°¡ À¢¸¸Å­ ºü¸£¸é ÀÌ ±ô¹ÚÀÓÀÌ ´«¿¡ Àß ¾È º¸ÀÏ ¼öµµ Àִµ¥ ÃÖ´ëÈ­ ½ÃŲ »óÅ¿¡¼­ ÇÑ ÆäÀÌÁö °¡µæ ±ÛÀÚ¸¦ ä¿öº¸°í ¹®ÀåÀ» ÀÔ·ÂÇغ¸¸é ±ô¹ÚÀÓÀ» ´À³¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¸¸¾à ±×·¡µµ ±ô¹ÚÀÓÀ» ´À³¢±â ¾î·Æ´Ù¸é ¸¶¿ì½º¸¦ µå·¡±×ÇÏ¿© ¼±ÅÃÀ» Çغ¸¾Æ¶ó. ¼±Åà »óÅ°¡ ¹Ù²ð ¶§µµ È­¸éÀ» ´Ù½Ã ±×¸®´Âµ¥ À̶§´Â ÄÄÇ»ÅÍ°¡ ¾Æ¹«¸® »¡¶óµµ ¼±Åÿµ¿ªÀÌ ±ô¹Ú°Å¸®´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ´À¸° ÄÄÇ»ÅÍ¿¡¼­´Â °ÅÀÇ ¸ø ºÁÁÙ Á¤µµÀÇ ¼öÁØÀ̸ç ÀÌ·± ±ô¹Ú°Å¸²Àº ´«À» ÇÇ°ïÇÏ°Ô ¸¸µé°í ÇÁ·Î±×·¥ÀÇ ÁúÀ» Çö°ÝÇÏ°Ô ¶³¾î¶ß¸°´Ù.

±×·¸´Ù¸é ±ô¹ÚÀÓÀÌ ¹ß»ýÇÏ´Â ÀÌÀ¯´Â ¹»±î? ¹®¼­ ³»¿ëÀÌ ¹Ù²î¸é º¯°æµÈ ºÎºÐÀ» Áö¿ì°í ´Ù½Ã ±×·Á¾ß Çϴµ¥ À̶§ º¯°æµÈ ºÎºÐÀ» Áö¿üÀ» ¶§ÀÇ Èò ¹ÙÅÁÀÌ ´Ù½Ã ±×·ÁÁú ¶§±îÁö ´«¿¡ º¸À̱⠶§¹®¿¡ È­¸éÀÌ ±ô¹Ú°Å¸®´Â °ÍÀÌ´Ù. ±×·¸´Ù¸é ¹®¼­°¡ º¯°æµÇ¾îµµ Áö¿ìÁö ¸»°í ±×³É ±×¸®±â¸¸ ÇÏ¸é ¾î¶»°Ô µÉ±î? ÀÌ·¸°Ô Çϱâ À§ÇØ ¹è°æ ºê·¯½Ã¸¦ ¾ø¾Ö º¸ÀÚ.

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

       ,LPSTR lpszCmdParam,int nCmdShow)

{

     ....

    WndClass.hbrBackground=NULL;

 

À©µµ¿ì Ŭ·¡½ºÀÇ ¹è°æ ºê·¯½Ã¸¦ NULL·Î ¹Ù²Ù¸é ÀÛ¾÷¿µ¿ªÀ» Áö¿ï ºê·¯½Ã°¡ ¾ø±â ¶§¹®¿¡ WM_ERASEBKGND ¸Þ½ÃÁö°¡ 󸮵ÇÁö ¾Ê´Â´Ù. Áï, ¹è°æ ºê·¯½Ã¸¦ ÁöÁ¤ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀº ¡®ÀÛ¾÷¿µ¿ªÀ» ³»°¡ ¾Ë¾Æ¼­ Áö¿ï Å×´Ï ³Ê´Â °¡¸¸È÷ À־¶ó´Â ¸í·ÉÀÌ´Ù. ±×·¡¼­ ÀÛ¾÷¿µ¿ªÀ» ¹«È¿È­Çصµ È­¸éÀ» Áö¿ìÁö ¾Ê´Â´Ù. ÀÌ·¸°Ô ÇÑ ÈÄ ½ÇÇàÇغ¸ÀÚ.

°á°ú´Â Á¤¸» ²ûÁ÷ÇÏ´Ù. ¹®ÀÚ´Â Á¦´ë·Î Ãâ·ÂµÇÁö¸¸ ¹è°æÀ» Áö¿ìÁö ¾ÊÀ¸¹Ç·Î ¹®ÀÚ°¡ ¾ø´Â ÁÙ°£ »çÀÌ´Â µÚÂÊ ¹è°æÀÌ ±×´ë·Î º¸ÀδÙ. ÀÌ »óÅ¿¡¼­ »õ·Î¿î ¹®ÀÚ¸¦ ÀÔ·ÂÇÏ¸é ¹è°æÀ» Áö¿ìÁö ¸øÇÏ´õ¶óµµ ÀÔ·ÂµÈ ¹®ÀÚ¸¦ º¼ ¼ö´Â ÀÖ´Ù. ÇÏÁö¸¸ »èÁ¦ÇÒ ¶§´Â »ç¶óÁ®¾ß ÇÒ ¹®ÀÚ°¡ ±× ÀÚ¸®¿¡ ±×´ë·Î ³²¾Æ ÀÖ°Ô µÈ´Ù. ÀÌ ½ÇÇè¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ »õ·Î Ãâ·ÂµÇ´Â ³»¿ëÀÌ ±âÁ¸ È­¸éÀ» ¿ÏÀüÈ÷ µ¤¾î¹ö¸®Áö ¾Ê´Â ÇÑ ±âÁ¸ÀÇ È­¸éÀ» Áö¿ìÁö ¾Ê°í »õ È­¸éÀ» Ãâ·ÂÇÒ ¼ö´Â ¾ø´Ù.

ÇÏÁö¸¸ È­¸é ±ô¹ÚÀÓÀ» ÃÖ¼ÒÈ­ÇÒ ¼ö ÀÖ´Â ¿©·¯ °¡Áö ¹æ¹ýµéÀÌ ÀÖ´Ù. ¿ì¼± Á¦ÀÏ °£´ÜÇÑ ¹æ¹ýÀº ¹«È¿¿µ¿ªÀ» °¡±ÞÀû Á¼°Ô ¼³Á¤ÇÔÀ¸·Î½á ÃÖ´ëÇÑ »¡¸® ±×¸®µµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ±ô¹ÚÀ̱â´Â ÇÏÁö¸¸ ¿ö³« »¡¸® ±×¸®±â ¶§¹®¿¡ ´«¿¡ °ÅÀÇ ¾È º¸ÀÌ°Ô ¸¸µå´Â °ÍÀ̸ç Çö½ÇÀûÀ¸·Î ÃæºÐÈ÷ °¡´ÉÇÑ ¹æ¹ýÀÌ´Ù. ±×·¯³ª ÀÌ ¹æ¹ýÀº ±ô¹ÚÀÓÀ» ÃÖ¼ÒÈ­ÇÏ´Â °ÍÀÌÁö ±Ùº»ÀûÀ¸·Î ¾ø¾Ö´Â ¹æ¹ýÀº ¾Æ´Ï´Ù. ¹®¼­ Àüü°¡ ÇѲ¨¹ø¿¡ ¹Ù²î°Ô µÇ¸é ¾î¿ ¼ö ¾øÀÌ ÀÛ¾÷¿µ¿ª Àüü°¡ ¹«È¿È­µÇ°í µû¶ó¼­ ±ô¹ÚÀÓÀÌ ¹ß»ýÇÑ´Ù.

±ô¹ÚÀÓÀ» ÇØ°áÇÒ ¼ö ÀÖ´Â °¡Àå ¿Ïº®ÇÑ ¹æ¹ýÀº ¸Þ¸ð¸® ºñÆ®¸ÊÀ» »ç¿ëÇÏ´Â ´õºí ¹öÆÛ¸µÀÌ´Ù. ¸Þ¸ð¸®»ó¿¡¼­ Ãâ·ÂÇÒ ³»¿ëÀ» ¹Ì¸® ±×·Á ³õ°í BitBltÀ¸·Î °í¼Ó Àü¼ÛÇÔÀ¸·Î½á ¼ø½Ä°£¿¡ È­¸éÀ» °»½ÅÇÏ´Â ¹æ¹ýÀÌ´Ù. CD-DOMÀÇ Doc µð·ºÅ丮¿¡ ´õºí ¹öÆÛ¸µ¿¡ ´ëÇÑ ¹®¼­¿Í ¿¹Á¦°¡ ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÂüÁ¶Çϱ⠹ٶõ´Ù. È­¸é ±ô¹ÚÀÓ¾øÀÌ °øÀ̳ª ¹®ÀÚ¸¦ ºÎµå·´°Ô À̵¿½ÃÅ°´Â ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇÏ°í ÀÖ´Ù.

 

¸Þ¸ð¸®ÀÇ ºñÆ®¸Ê¿¡ Ãâ·ÂÇÏ´Â °úÁ¤¿¡¼­µµ ¹ÙÅÁ»öÀ¸·Î Áö¿ì°í ±× À§¿¡ ±ÛÀÚ¸¦ Ãâ·ÂÇÏ´Â ÀýÂ÷°¡ ÇÊ¿äÇÏÁö¸¸ ÀÌ Ã³¸®´Â È­¸é»óÀ¸·Î º¸ÀÌÁö ¾Ê±â ¶§¹®¿¡ ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. BitBltÀ¸·Î Ãâ·ÂÇÒ ¶§µµ ±âÁ¸ Ãâ·Â ³»¿ëÀ» Áö¿ìÁö ¾Ê°í ±× À§¿¡ ¹Ù·Î µ¤¾î¾²±â ¶§¹®¿¡ ÀüÇô ±ô¹Ú°Å¸®Áö ¾Ê´Â´Ù. ´õºí ¹öÆÛ¸µ¿¡ »ç¿ëÇÒ ºñÆ®¸ÊÀ» Àü¿ªº¯¼ö·Î ¼±¾ðÇÏ°í OnCreate¿¡¼­ ÀÌ º¯¼ö¸¦ NULL·Î ÃʱâÈ­ÇÑ´Ù.

 

HBITMAP hBit;

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     ....

     hBit=NULL;

 

OnPaint¿¡¼­´Â È­¸éÀ¸·Î ¹Ù·Î Ãâ·ÂÇÏÁö ¾Ê°í ÀÌ ºñÆ®¸Ê¿¡ ÀÛ¾÷¿µ¿ªÀ» ¸ÕÀú ±×¸° ÈÄ ºñÆ®¸ÊÀ» È­¸éÀ¸·Î Àü¼ÛÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ Äڵ带 ¼öÁ¤Çغ¸ÀÚ.

 

void OnPaint(HWND hWnd)

{

    HDC hdc, hMemDC;

     PAINTSTRUCT ps;

     int l;

     RECT crt;

     int s,e;

    HBRUSH hBrush;

    HBITMAP OldBitmap;

 

     hdc=BeginPaint(hWnd,&ps);

 

     GetClientRect(hWnd,&crt);

     s=yPos/LineHeight;

     e=s+crt.bottom/LineHeight;

 

    hMemDC=CreateCompatibleDC(hdc);

    if (hBit == NULL) {

        hBit=CreateCompatibleBitmap(hdc,crt.right,crt.bottom);

    }

    OldBitmap=(HBITMAP)SelectObject(hMemDC,hBit);

 

    hBrush=CreateSolidBrush(GetSysColor(COLOR_WINDOW));

    FillRect(hMemDC,&crt,hBrush);

 

     for (l=s;l<=e;l++) {

        if (DrawLine(hMemDC,l) == 0)

               break;

     }

    BitBlt(hdc,0,0,crt.right,crt.bottom,hMemDC,0,0,SRCCOPY);

 

    DeleteObject(hBrush);

    SelectObject(hMemDC,OldBitmap);

    DeleteDC(hMemDC);

     EndPaint(hWnd,&ps);

}

 

ÀÛ¾÷¿µ¿ªÀÇ Å©±â¿Í µ¿ÀÏÇÑ Å©±âÀÇ ºñÆ®¸ÊÀ» ¸¸µé°í ¹è°æ»öÀ¸·Î ä¿î ÈÄ ÀÌ ºñÆ®¸Ê¿¡ ¹®¼­ ³»¿ëÀ» ¸ÕÀú Ãâ·ÂÇÏ¿´´Ù. Ãâ·ÂÄÚµå´Â È­¸é DC ´ë½Å ¸Þ¸ð¸® DC¸¦ »ç¿ëÇÑ´Ù´Â °Í¸¸ »©°í ¹Ù²ï °ÍÀÌ ¾ø´Ù. ºñÆ®¸Ê¿¡ ¹®¼­ ³»¿ëÀ» ´Ù Ãâ·ÂÇÑ ÈÄ È­¸éÀ¸·Î °í¼Ó Àü¼ÛÇϸé È­¸éÀÌ ÀüÇô ±ô¹Ú°Å¸®Áö ¾ÊÀ¸¸ç °¨ÂÊ°°ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù.

Ãâ·ÂÀ» ¸¶Ä£ ÈÄ ¸Þ¸ð¸® DC¸¸ ÇØÁ¦ÇÏ°í ºñÆ®¸ÊÀº ±×´ë·Î µÐ´Ù. ¸Å¹ø ±×¸®±â¸¦ ÇÒ ¶§¸¶´Ù ºñÆ®¸ÊÀ» »ý¼ºÇÒ ÇÊ¿ä´Â ¾ø±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ OnPaint¸¦ ó¸®ÇÒ ¶§ ¾îÂ÷ÇÇ ºñÆ®¸Ê Àü ¿µ¿ªÀ» ¹è°æ»öÀ¸·Î ä¿î ÈÄ ¹®¼­¸¦ Ãâ·ÂÇϹǷΠºñÆ®¸ÊÀº °è¼Ó »ç¿ëÇصµ »ó°ü¾ø´Ù. ºñÆ®¸ÊÀ» ´Ù½Ã »ý¼ºÇØ¾ß ÇÒ ½ÃÁ¡Àº ÀÛ¾÷¿µ¿ªÀÇ Å©±â°¡ ¹Ù²ð ¶§Àε¥ ºñÆ®¸Ê Å©±â´Â ÀÛ¾÷¿µ¿ªÀÇ Å©±â¿Í °°¾Æ¾ß Çϱ⠶§¹®ÀÌ´Ù. OnSize¿¡¼­ ÀÌ Ã³¸®¸¦ À§ÇØ ºñÆ®¸ÊÀ» Á¦°ÅÇÑ´Ù.

 

void OnSize(HWND hWnd, UINT state, int cx, int cy)

{

     if (state != SIZE_MINIMIZED) {

          if (nWrap) {

               UpdateLineInfo();

          }

          UpdateScrollInfo();

          if (GetFocus()==hWnd) {

               SetCaret();

          }

        if (hBit) {

            DeleteObject(hBit);

            hBit=NULL;

        }

     }

}

 

OnSize¿¡¼­ º¯°æµÈ ÀÛ¾÷¿µ¿ª Å©±â¿¡ ¸Â°Ô ºñÆ®¸ÊÀ» ´Ù½Ã »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´Ü¼øÈ÷ ºñÆ®¸ÊÀ» Æı«Çϱ⸸ Çϸç hBit¸¦ NULL·Î ¸¸µç´Ù. ÀÌ·¸°Ô ÇسõÀ¸¸é OnPaint¿¡¼­ ÀÛ¾÷¿µ¿ª Å©±â¿¡ ¸Â°Ô ºñÆ®¸ÊÀ» ´Ù½Ã »ý¼ºÇÒ °ÍÀÌ´Ù. OnSize´Â ºñÆ®¸ÊÀ» ´Ù½Ã ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¶ó ¹«È¿È­½ÃÅ´À¸·Î½á OnPaint°¡ ºñÆ®¸ÊÀ» Àç»ý¼ºÇϵµ·Ï Çϱ⸸ ÇÑ´Ù. ÀÌ·¸°Ô »ç¿ëÇÑ ºñÆ®¸ÊÀº ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§ Æı«ÇØ¾ß ÇϹǷΠOnDestroy¿¡µµ µ¿ÀÏÇÑ Äڵ尡 ÇÊ¿äÇÏ´Ù.

 

void OnDestroy(HWND hWnd)

{

     PostQuitMessage(0);

     free(buf);

     free(arHanWidth);

     free(pLine);

    if (hBit) {

        DeleteObject(hBit);

        hBit=NULL;

    }

}

 

ÀÌÁ¦ ½ÇÇàÇغ¸¸é ¾î¶² µ¿ÀÛÀ» ÇÏ´õ¶óµµ È­¸éÀÌ ±ô¹Ú°Å¸®Áö ¾Ê´Â´Ù. ¸Þ¸ð¸®»óÀÇ ºñÆ®¸Ê¿¡ ¹Ì¸® ±×¸° ÈÄ ÀÏ°ý Àü¼ÛÇϱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀº È­¸é Àüü¸¦ ºñÆ®¸ÊÀ¸·Î ÀÛ¼ºÇϱ⠶§¹®¿¡ È­¸éÀÌ Ä¿Áö¸é ´À·ÁÁö´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. 1600*1200 °°Àº °íÇØ»óµµ ¸ð´ÏÅÍ¿¡¼­ È­¸éÀ» ÃÖ´ëÈ­Çسõ°í ÆíÁýÇغ¸¸é È®½ÇÈ÷ ´À¸®´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¸Þ¸ð¸® ºñÆ®¸ÊÀÇ Å©±â°¡ Ä¿Áö¸é ¼Óµµ°¡ ´À·ÁÁö±âµµ ÇÏÁö¸¸ ´Ü ÇÑ ÁÙÀÌ ¹Ù²î¾îµµ Àüü È­¸éÀ» ´Ù ±×·Á¾ß ÇϹǷΠÃÖÀûÈ­¿¡ ´Ù¼Ò ºÒ¸®ÇÏ´Ù. ±×·¡¼­ Á» ´Ù¸¥ ¹æ¹ýÀ» ã¾Æ º¸¾Æ¾ß ÇÑ´Ù.