Windows滚动条类

本文介绍了如何在Windows中创建滚动条控件,包括使用预定义的scrollbar类,滚动条样式SBS_VERT和SBS_HORZ。滚动条控件的尺寸可变,并且通过发送WM_VSCROLL和WM_HSCROLL消息进行交互。区别于窗口滚动条,滚动条控件的句柄在WM_VSCROLL消息的lParam中体现。创建和操作滚动条控件的函数与窗口滚动条类似,但需使用SB_CTL作为参数。
摘要由CSDN通过智能技术生成

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

创建窗口滚动条控件:使用预定义的滚动条类(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;

如图:

可以用与窗口滚动条同样的函数来设置滚动条控件的范围和位置,区别是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;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值