【MFC笔记】滚动条控件Scroll Bar实例

最终想实现的功能,在长波形中通过滚动条框选一段波形,放大显示在波形图中。

【MFC笔记】滚动条控件Scroll Bar实例

现在控制滚动条,将控件的位置信息显示在编辑框内。

【MFC笔记】滚动条控件Scroll Bar实例

1、新建MFC工程,选择对话框模式

2、添加滚动条控件Scroll Bar和编辑框控件到窗口

3、编辑框添加变量,选择值,类型为int,命名myCString;滚动条添加变量为类型,命名myCScrollBar

4、初始化程序中添加代码,设置滚动条的范围和当前值,设置编辑框的内容为当前值。

    // TODO: 在此添加额外的初始化代码
    myCScrollBar.SetScrollRange(1, 100);//设置范围1-100,最大32767
    myCScrollBar.SetScrollPos(1);//设置默认的位置是1
    SetDlgItemInt(IDC_EDIT1, 1);//设置默认的位置是1,IDC_EDIT1是编辑框的ID

5、重载CWnd::OnHScroll函数以实现滚动功能。选择类视图,找到滚动条所在的窗口视图的类(本例),选择属性,点击消息,找到WM_HSCROLL,在右边选择ADD添加(本处已经添加,所以显示有所不同)

【MFC笔记】滚动条控件Scroll Bar实例

6、生成的函数如下

【MFC笔记】滚动条控件Scroll Bar实例

7、添加内容源程序,实现是滚动条的控制

void CMFCApplication5Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    int pos = myCScrollBar.GetScrollPos();    // 获取水平滚动条当前位置  

    switch (nSBCode)
    {
    case SB_LINELEFT:  pos -= 1; break;// 如果向左滚动一列,则pos减1  
    case SB_LINERIGHT:   pos += 1; break;        // 如果向右滚动一列,则pos加1  
    case SB_PAGELEFT:   pos -= 10;   break;// 如果向左滚动一页,则pos减10
    case SB_PAGERIGHT: pos += 10;  break;// 如果向右滚动一页,则pos加10  
    case SB_LEFT:  pos = 1;  break; // 如果滚动到最左端,则pos为1  
    case SB_RIGHT:   pos = 100;    break;// 如果滚动到最右端,则pos为100,我们设置的范围是1-100  
    case SB_THUMBPOSITION:   pos = nPos;   break; // 如果拖动滚动块滚动到指定位置,则pos赋值为nPos的值
        // 下面的myCScrollBar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值  
    default:
        SetDlgItemInt(IDC_EDIT1, pos);//显示
        return;
    }

   myCScrollBar.SetScrollPos(pos);    // 设置滚动块位置  

    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}