导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

怎样实现对话框的滚动?

happyechobj 2009-08-20 05:47:47
如题,希望能具体点,急!
...全文
29 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
[Quote=引用 3 楼 caszhao 的回复:]
先在属性那里把对话框的滚动条沟上,比如勾上垂直滚动条。然后在对话框中生成OnVScroll事件。

void CIPictureDlg::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);
}

在使用之前,设置一下滚动条范围
SetScrollRange(SB_VERT,0, 100,1);
[/Quote]

up
回复
caszhao 2009-08-20
先在属性那里把对话框的滚动条沟上,比如勾上垂直滚动条。然后在对话框中生成OnVScroll事件。

void CIPictureDlg::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);
}

在使用之前,设置一下滚动条范围
SetScrollRange(SB_VERT,0, 100,1);
回复
MoXiaoRab 2009-08-20
乖乖,对话框的滚动?把对话框卷起来?
回复
schlafenhamster 2009-08-20
什么叫“对话框的滚动”,希望能具体点。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……