scrollBar的使用及对话框的标准滚动的使用

1.使用scrollBar控件条的使用

        首先,假设添加的是水平滚动条,给滚动条控件关联一个控件变量m_hscroll;

        在初始化对话框函数中设置滚动条的范围m_hscroll.SetScrollRange(0,100);

  最大值最小值设置,和设置一开始的滚动条滑块的位置m_hscroll.SetScrollPos(5);

然后,添加滚动条的消息响应命令WM_HSCROLL,会自动添加void CColorDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)。

在该函数内部的程序如下所示

void CColorDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

int Pos=m_hscroll.GetScrollPos();
movealways=Pos*unitMove;//已经移动的距离
CDC *pDC=GetDlgItem(IDC_PICTURE)->GetDC();//该句是其他功能语句,与滚动条无关
    switch(nSBCode)
{
case SB_LINEUP:
Pos-=1;
if (Pos<0)
{
  Pos=0;
}

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways-unitMove,0,SRCCOPY);

m_hscroll.SetScrollPos(Pos);
break;
case SB_LINEDOWN:
Pos+=1;
if (Pos>100)
{
Pos=100;
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways+unitMove,0,SRCCOPY);

m_hscroll.SetScrollPos(Pos);


break;
case SB_PAGEUP:
Pos-=10;
if (Pos<0)
{
Pos=0;
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways-(unitMove*10),0,SRCCOPY);
m_hscroll.SetScrollPos(Pos);
break;
case SB_PAGEDOWN:
Pos+=10;
if (Pos>100)
{
Pos=100;
}
           pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways+(unitMove*10),0,SRCCOPY);
  m_hscroll.SetScrollPos(Pos);
break;
case SB_TOP:
Pos=0;
m_hscroll.SetScrollPos(Pos);
break;
case SB_BOTTOM:
Pos=100;
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,xlast-rect.Width(),0,SRCCOPY);
m_hscroll.SetScrollPos(Pos);
break;
case SB_THUMBPOSITION:
Pos=nPos;
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,unitMove*nPos,0,SRCCOPY);
m_hscroll.SetScrollPos(Pos);
break;
case SB_THUMBTRACK:   // Drag scroll box to specified position. nPos is the
Pos=nPos;
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,unitMove*Pos,0,SRCCOPY);
m_hscroll.SetScrollPos(Pos);
break;

         }

//CDialog::OnHScroll(nSBCode, nPos, pScrollBar);使用自己添加的scrollBar时,注释该句,否则无法设定Pos的值,它总是使Pos=0
}

2.对话框标准滚动条的使用

首先,在OnInitDialog函数进行初始设置

BOOL CColorDlg::OnInitDialog()
{
CDialog::OnInitDialog();


// TODO:  在此添加额外的初始化
SCROLLINFO vinfo;
  vinfo.cbSize=sizeof(vinfo);
  vinfo.fMask=SIF_ALL;
vinfo.nPage=10;
  vinfo.nMax=100;
  vinfo.nMin=0;
SetScrollInfo(SB_HORZ,&vinfo);

return TRUE;  // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

同理,添加消息响应命令WM_HSCROLL,会自动添加void CColorDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)。

void CColorDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
  SCROLLINFO scrollinfo;
GetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    movealways=scrollinfo.nPos*unitMove;//已经移动的距离
CDC *pDC=GetDlgItem(IDC_PICTURE)->GetDC();
    switch(nSBCode)
{
case SB_LINEUP:

  scrollinfo.nPos-=1;
if (scrollinfo.nPos<scrollinfo.nMin)
  {
scrollinfo.nPos=scrollinfo.nMin;
  }

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways-unitMove,0,SRCCOPY);
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);

break;
case SB_LINEDOWN:
  scrollinfo.nPos+=1;
 
  if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos=scrollinfo.nMax;
  }

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways+unitMove,0,SRCCOPY);
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);

break;
case SB_PAGEUP:
  scrollinfo.nPos-=10;
  if (scrollinfo.nPos<scrollinfo.nMin)
{
  scrollinfo.nPos=scrollinfo.nMin;

  }

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways-(unitMove*10),0,SRCCOPY);
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);

break;
case SB_PAGEDOWN:
  scrollinfo.nPos+=10;
  if (scrollinfo.nPos>scrollinfo.nMax)
  {
scrollinfo.nPos=scrollinfo.nMax;
  }

           pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,movealways+(unitMove*10),0,SRCCOPY);
   SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
  
break;
case SB_TOP:
scrollinfo.nPos=scrollinfo.nMin;
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
break;
case SB_BOTTOM:
scrollinfo.nPos=scrollinfo.nMax;
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,xlast-rect.Width(),0,SRCCOPY);
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
break;
case SB_THUMBPOSITION:
scrollinfo.nPos=nPos;
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,unitMove*nPos,0,SRCCOPY);
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
break;
case SB_THUMBTRACK:   // Drag scroll box to specified position. nPos is the
scrollinfo.nPos = nPos; 
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,unitMove*Pos,0,SRCCOPY);
 SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
break;

}

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值