在VS编译器中调用WM_VSCROLL,WM_HSCROLL函数,并建立消息响应:
void CImagePanel::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nCurpos,nMin,nMax,nThumbWidth;
SCROLLINFO siInfo;
GetScrollInfo(SB_VERT,&siInfo);
nCurpos = siInfo.nPos;
nMin = siInfo.nMin;
nMax = siInfo.nMax;
nThumbWidth = siInfo.nPage;
switch (nSBCode)
{
case SB_THUMBTRACK:///////拖动滚动框到指定位置
nCurpos = GetScrollPos(SB_VERT);
ScrollWindow(0,-(nPos-nCurpos));
SetScrollPos(SB_VERT,nPos);
break;
case SB_LINELEFT:////向左滚动一个单位
nCurpos = GetScrollPos(SB_VERT);
SetScrollPos(SB_VERT,nCurpos-1);
if (nCurpos !=0)
ScrollWindow(0,1);
break;
case SB_LINERIGHT:////向右滚动一个单位
nCurpos = GetScrollPos(SB_VERT);
SetScrollPos(SB_VERT,nCurpos+1);
if (nCurpos+nThumbWidth < nMax)
ScrollWindow(0,-1);
break;
case SB_PAGELEFT: //在滚动块的上方空白滚动区域单击,增量为6
SetScrollPos(SB_VERT,nCurpos-6);
if (nCurpos+nThumbWidth >0)
ScrollWindow(0,6);
break;
case SB_PAGERIGHT: //在滚动块的下方空白滚动区域单击,增量为6
SetScrollPos(SB_VERT,nCurpos+6);
if (nCurpos+nThumbWidth < nMax)
ScrollWindow(0,-6);
break;
case SB_LEFT:
SetScrollPos(SB_VERT,0);
ScrollWindow(0,nCurpos);
break;
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CImagePanel::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nCurpos,nMin,nMax,nThumbWidth;
//定义滚动信息
SCROLLINFO siInfo;
//获取水平滚动条的滚动信息
GetScrollInfo(SB_HORZ,&siInfo);
//获取当前的滚动位置
nCurpos = siInfo.nPos;
//获取滚动范围
nMin = siInfo.nMin;
nMax = siInfo.nMax;
//获取滚动块大小
nThumbWidth = siInfo.nPage;
switch (nSBCode)
{
break;
case SB_THUMBTRACK: //拖动滚动块
//滚动窗口到指定的位置
ScrollWindow(-(nPos-nCurpos),0);
//设置滚动条新的位置
SetScrollPos(SB_HORZ,nPos);
break;
case SB_LINELEFT : //单击左箭头
SetScrollPos(SB_HORZ,nCurpos-1);
if (nCurpos != 0)
ScrollWindow(1,0);
break;
case SB_LINERIGHT: //单击右箭头
SetScrollPos(SB_HORZ,nCurpos+1);
if (nCurpos+nThumbWidth < nMax)
ScrollWindow(-1,0);
break;
case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击,增量为6
SetScrollPos(SB_HORZ,nCurpos-6);
if (nCurpos+nThumbWidth >0)
ScrollWindow(6,0);
break;
case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击,增量为6
SetScrollPos(SB_HORZ,nCurpos+6);
if (nCurpos+nThumbWidth <nMax)
ScrollWindow(-6,0);
break;
case SB_LEFT:
SetScrollPos(SB_HORZ,0);
ScrollWindow(nCurpos,0);
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
代码实现: