티스토리 뷰

프로그래밍/API

API 스크롤바

에어버스 2016. 4. 30. 17:52

스크롤바

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, 28042020020, hWnd, (HMENU)ID_SCROLL, hInst, NULL);
        SetScrollRange(hScroll, SB_CTL, 0255, 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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