您的位置:首页 > 编程语言

Windows编程入门(7)--ScrollBar控件的使用

2013-01-24 22:15 281 查看
原文链接http://blog.csdn.net/acdnjjjdjkdckjj/article/details/6024008

在对话框中添加一个垂直滚动条控件,关联一个变量CScrollBar m_vScroll,在头文件定义CRect rt_mvScroll保存滚动条控件的位置,

定义一个int nVscroll,保存滑块的位置在OnInitDialog()里面添加

[c-sharp:firstline[1]]
view plaincopyprint?

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);     

]

[cpp:firstline[1]]
view plaincopyprint?

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);  
  
  
}  

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消息

[cpp:firstline[1]]
view plaincopyprint?

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);  
}  

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);
}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC Windows