티스토리 뷰
스크롤바
BOOL SetScrollRange(HWND hWnd,
int n스크롤바 설정값, // 보통 SB_CTL 값 사용
int n스크롤바 최소값,
int n스크롤바 최대값,
BOOL b다시그리기 // TRUE면 스크롤바를 다시 그린다
};
int SetScrollPos(HWND hWnd,
int n스크롤바 설정값, // 보통 SB_CTL 값 사용
int n위치값, // 스크롤 바 (Thumb)의 새 위치값
BOOL b다시그리기 // TRUE면 스크롤바를 다시 그린다
};
- 메시지
WM_HSCROLL, WM_VSCROLL
메시지 보낼때 아래 부가 정보를 같이 보낸다.
lParam 스크롤바의 윈도우 핸들
LOWORD(wParam) 스크롤바 클릭 영역 (아래 참고)
HIWORD(wParam) 현재 위치
LOWORD(wParam) 값
SB_LINELEFT 스크롤바의 왼쪽 화살표를 누를때, 왼쪽으로 한 단위 스크롤 된다
SB_LINERIGHT
SB_PAGELEFT 스크롤바의 왼쪽을 누눌때, 왼쪽으로 한페이지 스크롤된다
SB_PAGERIGHT
SB_THUMBPOSITION 스크롤바를 드래그한 후 마우스 버튼을 놓을때
SB_THUMBTRACK 스크롤바를 드래그 한 중일때 (마우스 버튼을 놓을때까지 계속 발생)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#define ID_SCROLL 801
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hScroll;
static int nScrollMove = 0;
switch (message)
{
case WM_HSCROLL:
if ((HWND)lParam == hScroll)
{
switch (LOWORD(wParam))
{
nScrollMove = HIWORD(wParam);
case SB_LINELEFT:
nScrollMove = max(0, nScrollMove - 1);
break;
case SB_LINERIGHT:
nScrollMove = min(255, nScrollMove + 1);
break;
case SB_PAGERIGHT:
nScrollMove = min(255, nScrollMove + 10);
break;
case SB_PAGELEFT:
nScrollMove = max(0, nScrollMove - 10);
break;
case SB_THUMBTRACK:
nScrollMove = HIWORD(wParam);
break;
}
}
SetScrollPos(hScroll, SB_CTL, nScrollMove, TRUE);
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_CREATE:
hScroll = CreateWindow(TEXT("scrollbar"), NULL, WS_CHILD | WS_VISIBLE | SBS_HORZ, 280, 420, 200, 20, hWnd, (HMENU)ID_SCROLL, hInst, NULL);
SetScrollRange(hScroll, SB_CTL, 0, 255, TRUE); // 스크롤바 범위 지정
SetScrollPos(hScroll, SB_CTL, 0, TRUE); // 스크롤바 Thumb 위치 지정
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다.
if (nScrollMove != 0)
{
myBrush = CreateSolidBrush(RGB(nScrollMove, nScrollMove, nScrollMove));
oldBrush = (HBRUSH)SelectObject(hdc, myBrush);
}
|
cs |