SetScrollRange

원형

BOOL SetScrollRange(HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw);

MFC 원형

void CWnd::SetScrollRange( int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = TRUE );
void CScrollBar::SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE );

인수

▶hWnd : 스크롤 바 컨트롤의 핸들. 이 값의 의미는 두번째 인수 nBar에 따라 달라진다.

▶nBar : 위치를 설정할 스크롤 바를 지정한다. 다음 세가지 값중의 하나를 가진다.

설명
SB_CTL 별도의 스크롤 바 컨트롤이며 hWnd는 스크롤 바 컨트롤의 핸들을 나타낸다.
SB_HORZ 표준 수평 스크롤 바이며 hWnd는 스크롤 바를 가진 윈도우의 핸들이다.
SB_VERT 표준 수직 스크롤 바이며 hWnd는 스크롤 바를 가진 윈도우의 핸들이다.

▶nPos : 스크롤 바위 새로운 위치를 지정한다. 이 위치는 반드시 스크롤 바위 범위내에 있어야 하므로 값을 변경할 때 범위 내부인지를 점검한 후 값을 변경해야 한다.

▶nMinPos, nMaxPos : 스크롤 바의 최소값및 최대값

▶bRedraw : 스크롤바의 범위를 변경한 후 다시 그릴 것인가 아닌가를 지정한다. TRUE이면 다시 그리고 FALSE이면 다시 그리지 않는다. 프로그램 실행중에 범위를 변경할 때는 이 인수를 TRUE로 지정하여 썸의 위치를 재계산하도록 해 주어야 하며 프로그램 초기화시에는 굳이 다시 그려줄 필요가 없다. 또한 이 함수 호출 후 곧바로 SetScrollPos 함수로 썸의 위치를 변경한다면 이 인수를 FALSE로 주는 것이 좋다.

리턴

성공하면 0이 아닌 값을 리턴하며 실패시 0을 리턴한다.

설명

표준 스크롤 바 또는 스크롤 바 컨트롤의 범위를 설정한다. 표준 스크롤 바의 디폴트 범위는 0~100까지이며 스크롤 바 컨트롤의 디폴트 범위는 둘 다 0으로 비어 있다. 일반적으로 스크롤 바 생성 직후에 이 함수로 적절한 스크롤 범위를 설정해 주어야 한다. nMaxPos와 nMinPos의 차인 범위는 MAXLONG보다 커서는 안된다.

최소, 최대값이 같을 경우는 스크롤 바가 숨겨지는 효과가 있는데 이런 목적으로 이 함수를 호출하는 것은 바람직하지 않으며 ShowScrollBar 함수를 사용하는 것이 좋다.

예제 1

다음 예제는 스크롤 바 컨트롤을 생성하고 0~255까지의 범위를 준 후 초기값을 192로 설정한다. 스크롤 바를 드래그하여 위치를 변경하면 이 값으로 브러시를 생성하여 작업 영역을 칠한다.

HWND hScroll;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HBRUSH MyBrush, OldBrush;
	RECT rt;
	int Pos;

	switch(iMessage) {
	case WM_CREATE:
		hScroll=CreateWindow("scrollbar",NULL,WS_CHILD | WS_VISIBLE | SBS_HORZ,
			10,10,266,20,hWnd,(HMENU)0,g_hInst,NULL);
		SetScrollRange(hScroll,SB_CTL,0,255,FALSE);
		SetScrollPos(hScroll,SB_CTL,192,FALSE);
		return 0;
	case WM_HSCROLL:
		Pos=GetScrollPos((HWND)lParam,SB_CTL);
		switch (LOWORD(wParam)) {
		case SB_LINELEFT:
			Pos=max(0,Pos-1);
			break;
		case SB_LINERIGHT:
			Pos=min(255,Pos+1);
			break;
		case SB_PAGELEFT:
			Pos=max(0,Pos-10);
			break;
		case SB_PAGERIGHT:
			Pos=min(255,Pos+10);
			break;
		case SB_THUMBTRACK:
			Pos=HIWORD(wParam);
			break;
		}
		SetScrollPos((HWND)lParam,SB_CTL,Pos,TRUE);
		InvalidateRect(hWnd,NULL,FALSE);
		return 0;
	case WM_PAINT:
		Pos=GetScrollPos(hScroll,SB_CTL);
		hdc=BeginPaint(hWnd,&ps);
		MyBrush=CreateSolidBrush(RGB(Pos,Pos,Pos));
		OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
		GetClientRect(hWnd,&rt);
		FillRect(hdc,&rt,MyBrush);
		SelectObject(hdc,OldBrush);
		DeleteObject(MyBrush);
		EndPaint(hWnd,&ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

참고함수

GetScrollRange, SetScrollPos

플랫폼

95이상

참조

 


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