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