对话框滚动条与显示区的处理

 

[VC/C++]对话框滚动条与显示区的处理

作者:茂叶 [转贴] 浏览量: 3909 发表日期:2006-8-19 更新日期:2006-8-19

void CSystemdlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
{  
// TODO: Add your message handler code here and/or call default  

SCROLLINFO scrollinfo;  
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
switch (nSBCode)  
{  
case SB_BOTTOM:  
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10);  
scrollinfo.nPos = scrollinfo.nMax;  
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
break;  
case SB_TOP:  
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);  
scrollinfo.nPos = scrollinfo.nMin;  
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
break;  
case SB_LINEUP:  
scrollinfo.nPos -= 1;  
if (scrollinfo.nPos{  
scrollinfo.nPos = scrollinfo.nMin;  
break;  
}  
SetScrollInfo(SB_VERT,&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_VERT,&scrollinfo,SIF_ALL);  
ScrollWindow(0,-10);  
break;  
case SB_PAGEUP:  
scrollinfo.nPos -= 5;  
if (scrollinfo.nPos{  
scrollinfo.nPos = scrollinfo.nMin;  
break;  
}  
SetScrollInfo(SB_VERT,&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_VERT,&scrollinfo,SIF_ALL);  
ScrollWindow(0,-10*5);  
break;  
case SB_ENDSCROLL:  
// MessageBox("SB_ENDSCROLL");  
break;  
case SB_THUMBPOSITION:  
// ScrollWindow(0,(scrollinfo.nPos-nPos)*10);  
// scrollinfo.nPos = nPos;  
// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
break;  
case SB_THUMBTRACK:  
ScrollWindow(0,(scrollinfo.nPos-nPos)*10);  
scrollinfo.nPos = nPos;  
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
break;  
}  

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

void CSystemdlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
{  
// TODO: Add your message handler code here and/or call default  

SCROLLINFO scrollinfo;  
GetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
switch (nSBCode)  
{  
case SB_LEFT:  
ScrollWindow((scrollinfo.nPos-scrollinfo.nMin)*10,0);  
scrollinfo.nPos = scrollinfo.nMin;  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
break;  
case SB_RIGHT:  
ScrollWindow((scrollinfo.nPos-scrollinfo.nMax)*10,0);  
scrollinfo.nPos = scrollinfo.nMax;  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
break;  
case SB_LINELEFT:  
scrollinfo.nPos -= 1;  
if (scrollinfo.nPos{  
scrollinfo.nPos = scrollinfo.nMin;  
break;  
}  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
ScrollWindow(10,0);  
break;  
case SB_LINERIGHT:  
scrollinfo.nPos += 1;  
if (scrollinfo.nPos>scrollinfo.nMax)  
{  
scrollinfo.nPos = scrollinfo.nMax;  
break;  
}  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
ScrollWindow(-10,0);  
break;  
case SB_PAGELEFT:  
scrollinfo.nPos -= 5;  
if (scrollinfo.nPos{  
scrollinfo.nPos = scrollinfo.nMin;  
break;  
}  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
ScrollWindow(10*5,0);  
break;  
case SB_PAGERIGHT:  
scrollinfo.nPos += 5;  
if (scrollinfo.nPos>scrollinfo.nMax)  
{  
scrollinfo.nPos = scrollinfo.nMax;  
break;  
}  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
ScrollWindow(-10*5,0);  
break;  
case SB_THUMBPOSITION:  
break;  
case SB_THUMBTRACK:  
ScrollWindow((scrollinfo.nPos-nPos)*10,0);  
scrollinfo.nPos = nPos;  
SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
break;  
case SB_ENDSCROLL:  
break;  
}  

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

 

 

From : http://www.maoyeah.com/display.asp?boardid=3&id=10

 

你可能感兴趣的:(对话框滚动条与显示区的处理)