1.先要设置窗体的属性Horizontal Scrollbar及Vertical Scrollbar属性为true
2.在对话框的头文件添加下面事件
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
3.在对话框的CPP文件添加下面程序
BEGIN_MESSAGE_MAP(CXXXX, CDialog)
ON_WM_VSCROLL()
ON_WM_HSCROLL()
END_MESSAGE_MAP()
在OnInitDialog()方法中添加
RECT rect;
GetClientRect(&rect);
SetScrollRange(SB_HORZ, 0, rect.right-rect.left, TRUE);
SetScrollRange(SB_VERT, 0, rect.bottom-rect.top, TRUE);
void CXXXX::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO scrollInfo;
GetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
switch (nSBCode)
{
case SB_LINEUP:
scrollInfo.nPos -= 1;
if (scrollInfo.nPos < scrollInfo.nMin)
{
scrollInfo.nPos = scrollInfo.nMin;
break;
}
SetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
ScrollWindow(0, 1);
break;
case SB_LINEDOWN:
scrollInfo.nPos += 1;
if (scrollInfo.nPos > scrollInfo.nMax)
{
scrollInfo.nPos = scrollInfo.nMax;
break;
}
SetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
ScrollWindow(0, -1);
break;
case SB_TOP:
ScrollWindow(0, (scrollInfo.nPos - scrollInfo.nMin) * 1);
scrollInfo.nPos = scrollInfo.nMin;
SetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
break;
case SB_BOTTOM:
ScrollWindow(0, -(scrollInfo.nMax - scrollInfo.nPos) * 1);
scrollInfo.nPos = scrollInfo.nMax;
SetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
break;
case SB_PAGEUP:
scrollInfo.nPos -= 1;
if (scrollInfo.nPos < scrollInfo.nMin)
{
scrollInfo.nPos = scrollInfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollInfo,SIF_ALL);
ScrollWindow(0, 1 * 1);
break;
case SB_PAGEDOWN:
scrollInfo.nPos += 1;
if (scrollInfo.nPos > scrollInfo.nMax)
{
scrollInfo.nPos = scrollInfo.nMax;
break;
}
SetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
ScrollWindow(0, -1 * 1);
break;
case SB_ENDSCROLL:
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
char mstr[64]={0};
sprintf(mstr,"nPos1:%d nPos1:%d/n",scrollInfo.nPos,nPos);
OutputDebugString(mstr);
ScrollWindow(0, (scrollInfo.nPos - nPos) );
scrollInfo.nPos = nPos;
SetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL);
break;
}
}
void CXXXX::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO scrollInfo;
GetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
switch (nSBCode)
{
case SB_LINEUP:
scrollInfo.nPos -= 1;
if (scrollInfo.nPos < scrollInfo.nMin)
{
scrollInfo.nPos = scrollInfo.nMin;
break;
}
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
ScrollWindow(0, 10);
break;
case SB_LINEDOWN:
scrollInfo.nPos += 1;
if (scrollInfo.nPos > scrollInfo.nMax)
{
scrollInfo.nPos = scrollInfo.nMax;
break;
}
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
ScrollWindow(0, -10);
break;
case SB_TOP:
ScrollWindow(0, (scrollInfo.nPos - scrollInfo.nMin) * 10);
scrollInfo.nPos = scrollInfo.nMin;
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
break;
case SB_BOTTOM:
ScrollWindow(0, -(scrollInfo.nMax - scrollInfo.nPos) * 10);
scrollInfo.nPos = scrollInfo.nMax;
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
break;
case SB_PAGEUP:
scrollInfo.nPos -= 5;
if (scrollInfo.nPos < scrollInfo.nMin)
{
scrollInfo.nPos = scrollInfo.nMin;
break;
}
SetScrollInfo(SB_HORZ,&scrollInfo,SIF_ALL);
ScrollWindow(0, 10 * 5);
break;
case SB_PAGEDOWN:
scrollInfo.nPos += 5;
if (scrollInfo.nPos > scrollInfo.nMax)
{
scrollInfo.nPos = scrollInfo.nMax;
break;
}
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
ScrollWindow(0, -10 * 5);
break;
case SB_ENDSCROLL:
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
ScrollWindow((scrollInfo.nPos - nPos) * 10, 0 );
scrollInfo.nPos = nPos;
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
break;
}
}
即可实现对话框实现水平垂直滚动条的功能;
也就是添加水平及垂直滚动的事件