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();

}

 

  
posted @ 2021-05-19 19:11  初吻给了烟灬  阅读(312)  评论(2编辑  收藏  举报