首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么使Dialog带有滚动条

2013-04-20 
如何使Dialog带有滚动条各位大虾,小弟在开发中遇到一个问题,望能得到解决:我需求在一个CDialog的某个区域

如何使Dialog带有滚动条
各位大虾,小弟在开发中遇到一个问题,望能得到解决:
     我需求在一个CDialog的某个区域上覆盖一个新的CDialog窗体,但是覆盖的窗体横向面积大于这个区间,所以需要在子窗体上带有横向的滚动条,望各位大虾指点如何为CDialog窗体添加横向滚动条,不胜感激~!
     原本想Create一个CScrollBar上去,但是用SPY++工具观察某些类似窗体,SCROLL是窗体的一部分,所以理解为MFC应该有提供现成的方法使CDialog窗体带有滚动条,望高手指点~!!!
    
[解决办法]
对话框属性上勾上Horizontal Scroll属性
[解决办法]

引用:
引用:
对话框属性上勾上Horizontal Scroll属性


勾选了,可是拖动滚动条好像没有效果~!!

处理WM_HSCROLL和WM_VSCROLL消息

void CXXDlg::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.nMin) 

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.nMin) 

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 CXXDlg::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.nMin) 

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.nMin) 

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

热点排行