ScrollWindow

¿øÇü

BOOL ScrollWindow(HWND hWnd, int XAmount, int YAmount, CONST RECT *lpRect, CONST RECT *lpClipRect);

MFC ¿øÇü

void CWnd::ScrollWindow( int xAmount, int yAmount, LPCRECT lpRect = NULL, LPCRECT lpClipRect = NULL );

Àμö

¢ºhWnd : ½ºÅ©·Ñ ´ë»óÀÌ µÇ´Â À©µµ¿ì

¢ºXAmount, YAmount : ¼öÆò, ¼öÁ÷À¸·Î ½ºÅ©·Ñ ÇÒ °ªÀ̸ç ÀåÄ¡ ´ÜÀ§·Î Ç¥ÇöµÈ´Ù. ´Ü, hWnd°¡ CS_OWNDC, CS_CLASSDC ½ºÅ¸ÀÏÀ» °¡Áö°í ÀÖÀ¸¸é ÀÌ °ªÀº ³í¸® ´ÜÀ§ÀÌ´Ù. ¿ÞÂÊÀ̳ª À§·Î ½ºÅ©·Ñ ÇÒ ¶§´Â À½¼ö°ªÀÌ µÉ ¼öµµ ÀÖ´Ù.

¢ºlpRect : ½ºÅ©·Ñ µÉ ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥. NULLÀ̸é Àüü ÀÛ¾÷ ¿µ¿ªÀÌ ½ºÅ©·Ñ µÈ´Ù. ÀÛ¾÷ ¿µ¿ªÁß ÀϺκи¸ ½ºÅ©·Ñ½ÃÇÒ ¶§´Â ÀÌ Àμö¿¡ ½ºÅ©·Ñ ´ë»ó ¿µ¿ªÀ» ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù. ÀÌ °ªÀÌ NULLÀÏ ¶§ ScrollWindow ÇÔ¼ö´Â ÈξÀ ´õ ºü¸£°Ô µ¿ÀÛÇÑ´Ù.

¢ºlpClipRect : Ŭ¸®ÇÎ ¿µ¿ª »ç°¢Çü. ÀÌ ¿µ¿ª ³»ºÎ¸¸ ½ºÅ©·Ñ¿¡ ÀÇÇØ ´Ù½Ã ±×·ÁÁö¸ç ¹Ù±ùÂÊÀº Àý´ë·Î °Çµå¸®Áö ¾ÊÀ¸¹Ç·Î½á È­¸éÀÌ ±úÁö´Â °ÍÀ» ¹æÁöÇÑ´Ù. lpRect°¡ ÀÛ¾÷ ¿µ¿ªÀÇ ÀϺκÐÀÏ ¶§ ½ºÅ©·Ñ ¼Óµµ°¡ ºü¸£¸é lpRect ¹Ù±ùÀ¸·Î ½ºÅ©·ÑÀÌ ¹ß»ýÇÒ ¼öµµ Àִµ¥ Ŭ¸®ÇÎ ¿µ¿ªÀ» ¼³Á¤Çϸé ÀÌ·± Çö»óÀ» ¹æÁöÇÒ ¼ö ÀÖ´Ù.

¸®ÅÏ

¼º°øÇϸé 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÏ¸ç ½ÇÆÐÇϸé 0À» ¸®ÅÏÇÑ´Ù.

¼³¸í

À©µµ¿ì¸¦ ½ºÅ©·Ñ½ÃŲ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ ÇÔ¼ö´Â WM_HSCROLL, WM_SCROLL µîÀÇ ½ºÅ©·Ñ °ü·Ã ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ È£ÃâµÇ¸ç ½ºÅ©·Ñ ¹Ù·Î ½ºÅ©·Ñ µÈ ¾ç¸¸Å­ ÀÛ¾÷ ¿µ¿ªÀ» À̵¿½ÃÅ°´Â ¿ªÇÒÀ» ÇÑ´Ù. ½ºÅ©·ÑµÈ ¾ç¸¸Å­ ÀÛ¾÷ ¿µ¿ªÀ» BitBlt ÇÔ¼ö·Î °í¼Ó º¹»çÇÏ¸ç »õ·Î µå·¯³ª´Â ºÎºÐÀº ¹«È¿È­½ÃÄÑ WM_PAINT¿¡¼­ ´Ù½Ã ±×¸®µµ·Ï ÇØ ÁØ´Ù.

¸¸¾à ½ºÅ©·Ñ ¿µ¿ª¿¡ ij·µÀÌ ÀÖ´Ù¸é ½ºÅ©·ÑÇϱâ Àü¿¡ ij·µÀ» ¼û±â¸ç ½ºÅ©·ÑÀÌ ³¡³­ ÈÄ Ä³·µÀ» º¹±¸½ÃÄÑÁØ´Ù. ij·µÀÇ À§Ä¡´Â ÀÚµ¿À¸·Î Á¶Á¤µÈ´Ù. ÀÛ¾÷ ¿µ¿ªÀÇ ÀϺκθ¸À» ½ºÅ©·Ñ½ÃÅ°°íÀÚ ÇÒ ¶§´Â lpRect¿¡ ½ºÅ©·Ñ ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç À̶§ È­¸éÀÇ ±úÁüÀ» ¹æÁöÇϱâ À§ÇØ Å¬¸®ÇÎ ¿µ¿ªÀ» ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÌ ÁÁ´Ù.

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â 1000*1000Å©±âÀÇ À©µµ¿ì¿¡ µ¿½É¿øÀ» ±×¸®°í ½ºÅ©·Ñ ¹Ù·Î ÀÌ µ¿½É¿øÀ» ½ºÅ©·ÑÇϵµ·Ï ÇÑ´Ù.

int yPos,xPos;
int yMax,xMax;
COLORREF col[5]={RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),RGB(255,0,255),RGB(255,255,0)};
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	int i,j;
	HDC hdc;
	PAINTSTRUCT ps;
	int xInc, yInc;
	SCROLLINFO si;
	HBRUSH hBrush,OldBrush;

	switch(iMessage) {
	case WM_CREATE:
		xPos=0;
		yPos=0;
		xMax=1000;
		yMax=1000;
		return 0;
	case WM_SIZE:
		si.cbSize=sizeof(SCROLLINFO);
		si.fMask=SIF_ALL | SIF_DISABLENOSCROLL;
		si.nMin=0;
		si.nMax=1000;
		si.nPage=HIWORD(lParam);
		si.nPos=yPos;
		SetScrollInfo(hWnd, SB_VERT, &si, TRUE);

		si.nPage=LOWORD(lParam);
		si.nPos=xPos;
		SetScrollInfo(hWnd, SB_HORZ, &si, TRUE);
		return 0;
	case WM_HSCROLL:
		xInc=0;
		switch (LOWORD(wParam)) {
		case SB_LINEUP:
			xInc=-1;
			break;
		case SB_LINEDOWN:
			xInc=1;
			break;
		case SB_PAGEUP:
			xInc=-20;
			break;
		case SB_PAGEDOWN:
			xInc=20;
			break;
		case SB_THUMBTRACK:
			xInc=HIWORD(wParam)-xPos;
			break;
		default:
			break;
		}
		// »õ·Î¿î À§Ä¡´Â ÃÖ¼ÒÇÑ 0 ÀÌ»ó
		if (xPos+xInc < 0)
			xInc=-xPos;
		// »õ·Î¿î À§Ä¡´Â ÃÖ´ëÇÑ xMax ÀÌÇÏ
		if (xPos+xInc > xMax)
			xInc=xMax-xPos;
		// »õ·Î¿î À§Ä¡ °è»ê
		xPos=xPos+xInc;
		// ½ºÅ©·Ñ½ÃÅ°°í ½æ À§Ä¡¸¦ ´Ù½Ã °è»êÇÑ´Ù.
		ScrollWindow(hWnd, -xInc, 0, NULL, NULL);
		SetScrollPos(hWnd, SB_HORZ, xPos, TRUE);
		return 0;
	case WM_VSCROLL:
		yInc=0;
		switch (LOWORD(wParam)) {
		case SB_LINEUP:
			yInc=-1;
			break;
		case SB_LINEDOWN:
			yInc=1;
			break;
		case SB_PAGEUP:
			yInc=-20;
			break;
		case SB_PAGEDOWN:
			yInc=20;
			break;
		case SB_THUMBTRACK:
			yInc=HIWORD(wParam)-yPos;
			break;
		default:
			break;
		}
		// »õ·Î¿î À§Ä¡´Â ÃÖ¼ÒÇÑ 0 ÀÌ»ó
		if (yPos+yInc < 0)
			yInc=-yPos;
		// »õ·Î¿î À§Ä¡´Â ÃÖ´ëÇÑ yMax ÀÌÇÏ
		if (yPos+yInc > yMax)
			yInc=yMax-yPos;
		// yInc=max(-yPos, min(yInc, yMax-yPos));
		// »õ·Î¿î À§Ä¡ °è»ê
		yPos=yPos+yInc;
		// ½ºÅ©·Ñ½ÃÅ°°í ½æ À§Ä¡¸¦ ´Ù½Ã °è»êÇÑ´Ù.
		ScrollWindow(hWnd, 0, -yInc, NULL, NULL);
		SetScrollPos(hWnd, SB_VERT, yPos, TRUE);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		for (i=500,j=0;i>=100;i-=100,j++) {
			hBrush=CreateSolidBrush(col[j]);
			OldBrush=(HBRUSH)SelectObject(hdc,hBrush);
			Ellipse(hdc,500-i-xPos,500-i-yPos,500+i-xPos,500+i-yPos);
			DeleteObject(SelectObject(hdc,OldBrush));
		}
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

WM_H(V)SCROLL ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ½ºÅ©·Ñ ¹ÙÀÇ ½ºÅ©·Ñ µÈ ¾ç¸¸Å­ ÇØ´ç À©µµ¿ì¸¦ ¼öÆò, ¼öÁ÷À¸·Î °¢°¢ ½ºÅ©·Ñ½ÃÄ×´Ù. ÀÛ¾÷ ¿µ¿ª Àüü¸¦ ½ºÅ©·Ñ½ÃÅ°¹Ç·Î lpRect´Â NULLÀ̸ç Ŭ¸®ÇÎ ¿µ¿ªµµ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

Âü°íÇÔ¼ö

SetScrollInfo, ScrollWindowEx

Ç÷§Æû

95ÀÌ»ó

ÂüÁ¶

 


written by http://www.winapi.co.kr