【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添加(本处已经添加,所以显示有所不同)
6、生成的函数如下
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);
}