原文链接http://blog.csdn.net/acdnjjjdjkdckjj/article/details/6024008
在对话框中添加一个垂直滚动条控件,关联一个变量CScrollBar m_vScroll,在头文件定义CRect rt_mvScroll保存滚动条控件的位置,
定义一个int nVscroll,保存滑块的位置在OnInitDialog()里面添加
- CRect rect;
- GetClientRect(rect);
- SCROLLINFO si;
- si.cbSize = sizeof(SCROLLINFO);;
- si.nMin = 0;
- si.nMax = 100;
- si.nPage = 5 ;
- si.fMask = SIF_POS|SIF_RANGE|SIF_PAGE;
- m_vScroll.SetScrollInfo(&si, TRUE);
- m_vScroll.GetWindowRect(rt_mvScroll);//滚动条所在的位置
- ScreenToClient(rt_mvScroll);
响应对话框中WM_VScorll消息
- void CScrollDemoDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- SCROLLINFO si;
- si.cbSize = sizeof(si);
- m_vScroll.GetScrollInfo(&si, SIF_POS|SIF_PAGE|SIF_RANGE);
- nVscroll = si.nPos;
- switch(nSBCode)
- {
- case SB_LINEDOWN: nVscroll += 10;
- if (nVscroll > (si.nMax - si.nMin - si.nPage ))
- {
- nVscroll = si.nMax - si.nMin - si.nPage;
- }
- break;
- case SB_LINEUP: nVscroll -= 10;
- if (nVscroll < si.nMin)
- {
- nVscroll = 0;
- }
- break;
- case SB_PAGEDOWN: nVscroll += si.nPage;
- if (nVscroll > (si.nMax - si.nMin - si.nPage))
- {
- nVscroll = si.nMax - si.nMin - si.nPage;
- }
- break;
- case SB_PAGEUP: nVscroll -= si.nPage;
- if (nVscroll < si.nMin)
- {
- nVscroll = 0;
- }
- break;
- case SB_THUMBTRACK: nVscroll = nPos; break;
- }
- ScrollWindow(0, -(nVscroll -si.nPos) , NULL ,NULL);
- m_vScroll.MoveWindow(rt_mvScroll, TRUE);
- si.fMask = SIF_POS;
- si.nPos = nVscroll;
- m_vScroll.SetScrollInfo(&si, TRUE);
- CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
- }
响应WM_MOUSEWHELL消息
- BOOL CScrollDemoDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- //向下滚
- if (zDelta == -120)
- {
- nVscroll += 10;
- OnVScroll(SB_PAGEDOWN, nVscroll, &m_vScroll);
- }
- else if (zDelta == 120)
- {
- nVscroll -= 10;
- OnVScroll(SB_PAGEUP, nVscroll, &m_vScroll);
- }
- m_vScroll.MoveWindow(rt_mvScroll, TRUE);
- return CDialog::OnMouseWheel(nFlags, zDelta, pt);
- }