Windows滚动条类

前面的窗口滚动条只能出现在父窗口的固定地方,而滚动条控件能出现在父窗口的任何地方。

创建窗口滚动条控件:使用预定义的滚动条类(scrollbar),和两种滚动条样式SBS_VERT和SBS_HORZ。
例如:

case WM_CREATE:

        hWndScroll = CreateWindow(L"scrollbar", L"", WS_CHILD | WS_VISIBLE | SBS_VERT, 100, 100, 50, 200, hwnd, nullptr, hInst, 0);
        return 0;

这个滚动条的大小由50 200控制,出现的位置由100 100控制.
滚动条控件的尺寸不是固定的,而是可以任意的
如图:

滚动条控件不发送WM_COMMAND消息,而直接发送WM_VSCROLL和WM_HSCROLL消息,而区分窗口滚动条和滚动条控件 的参数是lParam,如果lParam==0就是窗口滚动条,如果等于滚动条窗口句柄就是滚动条控件
例如:

case WM_VSCROLL:

        if (lParam == 0)
            MessageBox(nullptr,L"滑动了窗口滚动条",L"",0);
        else               
            MessageBox(nullptr, L"滑动了滚动条控件", L"", 0);
        break;

如图:

若想创建和窗口滚动条一样的尺寸,可以用如下两个函数获取滚动条大小

 //获取水平滚动条的高度
   GetSystemMetrics(SM_CYHSCROLL);
   //获取垂直滚动条的宽度
   GetSystemMetrics(SM_CXVSCROLL);

例如:

case WM_CREATE:

        hWndScroll = CreateWindow(L"scrollbar", L"", WS_CHILD | WS_VISIBLE | SBS_VERT, 100, 100
            , GetSystemMetrics(SM_CXVSCROLL), 200, hwnd, (HMENU)1, hInst, 0);
        return 0;

如图:
Windows滚动条类_第1张图片

可以用与窗口滚动条同样的函数来设置滚动条控件的范围和位置,区别是SB_VERT、SB_HORZ改为SB_CTL
例如:

case WM_CREATE:

        hWndScroll = CreateWindow(L"scrollbar", L"", WS_CHILD|WS_VISIBLE|SBS_VERT,100,100,GetSystemMetrics(SM_CXVSCROLL), 200, hwnd, (HMENU)1, hInst, 0);
        //设置范围
        SetScrollRange(hWndScroll, SB_CTL, 0, 200, TRUE);
        //设置滑块初始位置
        SetScrollPos(hWndScroll, SB_CTL, ipos, TRUE);
        break;
case WM_VSCROLL:

        switch (LOWORD(wParam))
        {
        case SB_LINEUP:
            ipos -= 1;
            break;
        case SB_LINEDOWN:
            ipos += 1;
            break;
        //case SB_THUMBPOSITION:
        case SB_THUMBTRACK:
            ipos = HIWORD(wParam);
        default:
            break;
        }
        SetScrollPos(hWndScroll, SB_CTL, ipos, TRUE);
        break;

控件的句柄一定要是静态或者全局变量,否则以创建窗口后控件句柄就又被初始化了。

你可能感兴趣的:(windows,Class,控件,wm,scrollbar)