ScrollBar的使用
设置多个ScrollBar进行参数控制:
ScrollBar的初始化:
mV1.SetScrollRange(1, 255); //mV1:ScrollBar控件变量1
mV1.SetScrollPos(20);
SetDlgItemInt(IDC_E1, 20);//IDC_E1:Edit控件ID1
mV2.SetScrollRange(1, 255); //mV2:ScrollBar控件变量2
mV2.SetScrollPos(30);
SetDlgItemInt(IDC_E2, 30);//IDC_E1:Edit控件ID1
主要通过CScrollBar*指针变量pScrollBar来进行不同ScrollBar控件的区分,这样就可以实现多个ScrollBar的独立控制[因为所有的水平ScrollBar控件消息都是通过OnHScroll来分发的]:
void CMy20161220TestControlBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int pos = pScrollBar->GetScrollPos(); // 获取水平滚动条当前位置
int id = 0;
switch (nSBCode)
{
// 如果向左滚动一列,则pos减1
case SB_LINELEFT:
pos -= 1;
break;
// 如果向右滚动一列,则pos加1
case SB_LINERIGHT:
pos += 1;
break;
// 如果向左滚动一页,则pos减10
case SB_PAGELEFT:
pos -= 10;
break;
// 如果向右滚动一页,则pos加10
case SB_PAGERIGHT:
pos += 10;
break;
// 如果滚动到最左端,则pos为1
case SB_LEFT:
pos = 1;
break;
// 如果滚动到最右端,则pos为100
case SB_RIGHT:
pos = 255;
break;
// 如果拖动滚动块滚动到指定位置,则pos赋值为nPos的值
case SB_THUMBPOSITION:
pos = nPos;
break;
// 下面的m_horiScrollbar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值
default:
if (pScrollBar == &mV1)
{
id = IDC_E1;
}else
id = IDC_E2;
SetDlgItemInt(id, pos);
return;
}
// 设置滚动块位置
pScrollBar->SetScrollPos(pos);
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}