´Ù. ÁÙ´ÜÀ§ ´õºí ¹öÆÛ¸µ

´õºí ¹öÆÛ¸µÀÇ ´ÜÀ§¸¦ È­¸éÀ¸·Î ÇÏÁö ¸»°í ÁÙ´ÜÀ§·Î ¹Ù²Ù¾î º¸ÀÚ. ÇÑ ÁÙ¾¿ ºñÆ®¸Ê¿¡ Ãâ·ÂÇÑ ÈÄ ÀÌ ºñÆ®¸ÊÀ» È­¸éÀ¸·Î Àü¼ÛÇÏ´Â ¹æ½ÄÀÌ´Ù.

 

void OnPaint(HWND hWnd)

{

     HDC hdc, hMemDC;

     PAINTSTRUCT ps;

     int l;

     RECT crt;

     int s,e;

     HBRUSH hBrush;

     HBITMAP OldBitmap;

    RECT lrt;

 

     hdc=BeginPaint(hWnd,&ps);

     GetClientRect(hWnd,&crt);

 

     s=yPos/LineHeight;

     e=s+crt.bottom/LineHeight;

    e=min(e,TotalLine-1);

 

     hMemDC=CreateCompatibleDC(hdc);

     if (hBit == NULL) {

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

     }

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

 

     hBrush=GetSysColorBrush(COLOR_WINDOW);

     SetRect(&lrt,0,0,crt.right,LineHeight);

 

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

        FillRect(hMemDC,&lrt,hBrush);

        DrawLine(hMemDC,l);

        BitBlt(hdc,0,(l-s)*LineHeight,crt.right,(l-s)*LineHeight+LineHeight,

            hMemDC,0,0,SRCCOPY);

     }

 

    SetRect(&lrt,0,(l-s)*LineHeight,crt.right,crt.bottom);

    FillRect(hdc,&lrt,hBrush);

 

     DeleteObject(hBrush);

     SelectObject(hMemDC,OldBitmap);

     DeleteDC(hMemDC);

     EndPaint(hWnd,&ps);

}

 

Ãâ·Â ½ÃÀÛÁÙÀº È­¸é»óÀÇ Ã¹ ÁÙÀÌ°í ³¡ÁÙÀº È­¸éÀÇ Á¦ÀÏ ¾Æ·¡ÁÙÀÌµÇ ´Ü ¹®¼­ÀÇ Á¦ÀÏ ³¡ÁÙº¸´Ù Ä¿ÁöÁö ¾Êµµ·Ï Á¶Á¤ÇÏ¿´´Ù. ºñÆ®¸ÊÀÇ ÆøÀº ¿©ÀüÈ÷ ÀÛ¾÷¿µ¿ªÀÇ Æø°ú °°Áö¸¸ ³ôÀÌ´Â ÀÛ¾÷¿µ¿ªÀÇ ³ôÀÌ°¡ ¾Æ´Ï¶ó ÁÙ°£À» »ç¿ëÇÑ´Ù. °¢ ÁÙ¸¶´Ù ºñÆ®¸ÊÀ» ¹è°æ»öÀ¸·Î ä¿ì°í DrawLineÀ¸·Î Ãâ·ÂÇÑ ÈÄ ±× ÁÙÀÇ y ÁÂÇ¥¿¡ ºñÆ®¸ÊÀ» Àü¼ÛÇÏ¿´´Ù. À̶§ ¸¶Áö¸· ÁÙÀÎ e´Â ¹®¼­ÀÇ ¸¶Áö¸· ÁÙº¸´Ù Å©Áö ¾ÊÀ¸¹Ç·Î DrawLineÀÇ ¸®ÅÏ°ªÀº ´õ ÀÌ»ó Á¡°ËÇÒ ÇÊ¿ä°¡ ¾ø¾îÁ³´Ù.

Á¤È®ÇÏ°Ô ¹®¼­ÀÇ ³¡±îÁö¸¸ Ãâ·ÂÇϵµ·Ï ·çÇÁÀÇ ¹üÀ§¸¦ ¼³Á¤Ç߱⠶§¹®¿¡ ¹®¼­ ÀÌÈÄÀÇ ¿©¹é ºÎºÐÀÌ »èÁ¦µÇÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ´Ù. ±×·¡¼­ ·çÇÁ°¡ ³¡³­ ÈÄ¿¡ Ȥ½Ã¶óµµ ³²¾Æ ÀÖÀ»Áö ¸ð¸£´Â ¹®¼­ µÞºÎºÐÀ» »èÁ¦ÇÏ´Â Äڵ尡 ÀÖ¾î¾ß ÇÑ´Ù. for ·çÇÁ¸¦ Å»ÃâÇÑ ÈÄ ÃÖÈÄ Ãâ·ÂÇÑ ÁÙÀÇ ´ÙÀ½ ÁÙ¿¡¼­ºÎÅÍ È­¸éÀÇ ³¡±îÁö´Â ¹è°æ»öÀ¸·Î ä¿ö¼­ Áö¿ö ÁÖ¾ú´Ù. ÀÌ Ã³¸®¸¦ »ý·«ÇÏ¸é ¾Æ·¡·Î ½ºÅ©·ÑÇÒ ¶§(¹®¼­°¡ À§·Î ¿Ã¶ó°¥ ¶§) È­¸é ¾Æ·¡ÂÊ¿¡ ÀÖ´ø ¹®¼­ ³¡ ºÎºÐÀÌ ±×´ë·Î ³²¾Æ ÀÖ°Ô µÈ´Ù.

´õºí ¹öÆÛ¸µÀÇ ´ÜÀ§°¡ È­¸éÀÌ ¾Æ´Ï¶ó ÁÙ·Î ¹Ù²î¾ú´Ù°í Çؼ­ OnSize³ª OnDestroyÀÇ Äڵ带 ¼öÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÀÌ ÇÔ¼öµéÀº ¾îÂ÷ÇÇ ºñÆ®¸ÊÀ» ¹«È¿È­½ÃÅ°±â¸¸ ÇÒ »ÓÀÌÁö ºñÆ®¸ÊÀÇ Å©±â µûÀ§¿¡´Â °ü½ÉÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. ´ë½Å ºñÆ®¸Ê¿¡ ¹®ÀÚ¿­À» Ãâ·ÂÇÏ´Â DrawLine ÇÔ¼ö°¡ Á¶±Ý ¹Ù²î¾î¾ß ÇÑ´Ù.

 

int DrawLine(HDC hdc, int Line)

{

          ....

          DrawSegment(hdc,x,0,nowoff,len,

               (nowoff+len==pLine[Line].End),fore,back);

 

ÀÌÀü¿¡´Â DrawSegment¸¦ È£ÃâÇÒ ¶§ ÁÙÀÇ y ÁÂÇ¥¸¦ Àü´ÞÇßÁö¸¸ ÀÌÁ¦ ÇÑ ÁÙ¿¡ ´ëÇÑ Ãâ·ÂÀÌ Á÷Á¢ È­¸éÀ¸·Î ³ª°¡´Â °ÍÀÌ ¾Æ´Ï¶ó ÁÙ´ÜÀ§ÀÇ ºñÆ®¸ÊÀ¸·Î ³ª°¡°Ô µÇ¹Ç·Î y ÁÂÇ¥´Â ¹«Á¶°Ç 0ÀÌ´Ù. ÀÌ ºñÆ®¸ÊÀ» ÁÙÀÇ y ÁÂÇ¥¿¡ Ãâ·ÂÇϴ åÀÓÀº OnPaint°¡ ¸Ã°Ô µÇ¾úÀ¸¸ç y ÁÂÇ¥ °è»ê½ÄÀº BliBlt¹®À¸·Î ¿Å°ÜÁ³´Ù.

ÀÌÁ¦ È­¸é»óÀÇ ±ô¹ÚÀÓÀº ÀüÇô ¾ø´Ù. ÇÏÁö¸¸ Ãâ·Â °úÁ¤¿¡¼­ ¸Þ¸ð¸® ºñÆ®¸ÊÀ» °æÀ¯Çؼ­ È­¸éÀ¸·Î ³ª°¡±â ¶§¹®¿¡ ¼Óµµ´Â Á¶±Ý ´À·ÁÁø´Ù. Á¤¹ÐÇÏ°Ô ÃøÁ¤Çغ¸¸é È®½ÇÇÏ°Ô ´õºí ¹öÆÛ¸µÀ¸·Î ÀÎÇÑ ¼Óµµ °¨¼Ò¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ´ÙÇàÈ÷ »ç¿ëÀÚ´Â ±ô¹Ú°Å¸®Áö ¾ÊÀ½À¸·Î ÀÎÇØ ´õ »¡¶óÁø °ÍÀ¸·Î ´À³¢°Ô µÈ´Ù.