CScrollBar的使用

在对话框中添加一个垂直滚动条控件,关联一个变量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); }

 

 

 

 

你可能感兴趣的:(null)