MFC滚动条控件Scroll Bar

MFC工程试做滚动条控件ScrollBar过程中,重载OnHScroll()函数刷新当前滚动条位置,代码如下:voidCExample26Dlg::OnHScroll(U... MFC工程试做滚动条控件Scroll Bar过程中,重载OnHScroll()函数刷新当前滚动条位置,代码如下:

void CExample26Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int pos = m_horiScrollbar.GetScrollPos(); // 获取水平滚动条当前位置

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 = 100;
break;
// 如果拖动滚动块滚动到指定位置,则pos赋值为nPos的值
case SB_THUMBPOSITION:
pos = nPos;
break;
// 下面的m_horiScrollbar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值
default:
SetDlgItemInt(IDC_HSCROLL_EDIT, pos);
return;
}

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

CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
当我用鼠标拖动滚动条一直移动且不松开鼠标的过程中,会隔一段时间就接收到一次WM_HSCROLL消息,然后进入OnHScroll()函数刷新pos位置值么?还是在我松开鼠标的时候才进入OnHScroll()函数刷新pos位置值?新手求指教~
展开
 我来答
匿名用户
2016-05-23
展开全部
滚动事件,在父窗口接收。当scrollbar发生滚动时,会向父窗口发送滚动消息,比如对话框,你只需要重载OnHScroll和OnVScroll并再里面处理即可。
追问
谢谢你的回答!!!还想再问一个问题,当拖动滚动条移动时,应该会进下面这个分支:
case SB_THUMBPOSITION:
pos = nPos;
break;
那么nPos的值是在什么时候更新的呢?我在代码上看不到nPos被赋值的地方呀~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式