Win32 滚动条控件

1.创建控件

HWND hScrollBar = ::CreateWindow(

        WC_SCROLLBAR,                           //控件类名

        NULL,                                   //窗口标题文本

        WS_VISIBLE | WS_CHILD | SBS_TOPALIGN,   //控件风格样式

        10, 100, 200, 40,                       //控件显示位置坐标

        m_hWnd,                                 //父窗口句柄

        (HMENU)IDC_SCROLLBAR1,                  //控件ID号

        m_hInstance,                            //程序实例句柄

        0);                                     //附加数据

         

2.设置最小值和最大值(SBM_SETRANGE) 

SendMessage(hScrollBar, SBM_SETRANGE, 0, 100);

wParam:  为最小值

lParam:     为最大值


3.设置滑块的位置(SBM_SETPOS)

SendMessage(hScrollBar, SBM_SETPOS, 1, TRUE);

wParam:  为要设定的位置

lParam:  TRUE为是否刷新窗口,FALSE为不刷新

4.获得滑块当前位置(SBM_GETPOS)

int pos = SendMessage(hCtrl, SBM_GETPOS, 0, 0);

5.通知消息

水平通知消息(WM_HSCROLL)

垂直通知消息(WM_VSCROLL)

水平通知消息示例:

LRESULT MyDialog::OnhScroll(WPARAM wParam, LPARAM lParam)

{

    int nSbCode = LOWORD(wParam);  //获得控件通知消息码

    HWND hCtrl = (HWND)lParam;    //控件句柄

    /*WORD lPos = HIWORD(wParam);*/只有拖动滑块时才有滑块当前位置信息

    int pos = SendMessage(hCtrl, SBM_GETPOS, 0, 0);  //获得当前滑块位置

    switch (nSbCode)

    {

    case SB_LINELEFT:  //点击左边按钮消息

        pos-=5;

        break;

    case SB_LINERIGHT:  //点击右边按钮消息

        pos+=5;

        break;

    case SB_PAGELEFT: //点击滑块左边滚动条空白翻页消息

        pos -= 20;

        break;

    case SB_PAGERIGHT:  //点击滑块右边空白处为翻页消息

        pos += 20;

        break;

        /*case SB_THUMBTRACK:  //拖动滑块时消息

            SendMessage(hCtrl, SBM_SETPOS, lPos, 1);

            return true;*/

    case SB_THUMBPOSITION:  //拖动滑块放开消息

        pos = HIWORD(wParam);   

        break;

    }

    SendMessage(hCtrl, SBM_SETPOS, pos, 1); //设置当前位置=pos,并重绘控件

    CString str;

    str.Format(TEXT("%d"), pos);

    SetDlgItemText(IDC_STATIC1, str);

    return LRESULT();

}

  
签名:GreenLeaf1976
原文地址:https://www.cnblogs.com/greenleaf1976/p/14786602.html