MFC滚动条的使用

         发现接触了那么久的MFC基于对话框的程序,发现从来没有为对话框添加过滚动条,当要使用时好害怕!很难的样子,网上的各种api解释又是一大堆,有的是sdk上的,有的是mfc上的把滚动条控件当成变量后的调用方法,最后一种是滚动条留给了CWnd接口后的函数,但是却没有例子程序。下面使用的是第三种的CWnd上的对滚动条的访问函数:

首先在属性上把Vertical Scroll 选为true。然后添加2个消息WM_SIZE    ,  WM_VSCROLL   .

http://blog.csdn.net/shimachao/article/details/8690955 这里有比较详细的api解释。

void SubDlgNewest::OnSize(UINT nType, int cx, int cy)     // 之所以在这里初始化设置滚动条是因为窗口大小的改动往往也要把滚动条,滑块也应该跟着改变才能看起来协调。

{
CDialogEx::OnSize(nType, cx, cy);


// TODO: 在此处添加消息处理程序代码
SCROLLINFO vinfo; 
vinfo.cbSize = sizeof(vinfo);
vinfo.fMask = SIF_ALL;
vinfo.nPage = 1;
vinfo.nMax= 100;
vinfo.nMin = 0;
vinfo.nTrackPos = 0;
vinfo.nPos = 0; 

SetScrollInfo(SB_VERT,&vinfo);
}




void SubDlgNewest::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
SCROLLINFO ScrollInfo;
ScrollInfo.cbSize=sizeof(ScrollInfo);
ScrollInfo.fMask = SIF_ALL;
GetScrollInfo(SB_VERT,&ScrollInfo);


int delta=0;
switch(nSBCode)
{
case SB_PAGEUP:
case SB_LINEUP:
if(ScrollInfo.nPos  > ScrollInfo.nMin) 
delta -= 5;      // 单位长度
break;
case SB_PAGEDOWN:
case SB_LINEDOWN:
if(ScrollInfo.nPos  < ScrollInfo.nMax) 
delta += 5;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
delta = ScrollInfo.nTrackPos-ScrollInfo.nPos;
break;
}
if(delta !=0 )
{// you can adjust m_Offset in OnInitDialog() for "abc" start point
ScrollWindow(0,-delta);        // 以下2条语句更新对应的界面
UpdateWindow();
ScrollInfo.nPos += delta;       // 以下3条语句用于更新滑块的新位置
ScrollInfo.fMask=SIF_POS | SIF_RANGE;
SetScrollInfo(SB_VERT,&ScrollInfo);
}
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值