使用CScrollView创建滚动条

     滚动条的作用在于当绘制的图形超过客户区的大小的时候,通过滚动条的移动来观测整个图形,VC中提供了CScrollView类来完成滚动条的绘制,在创建工程的时候的第六步,将基类选择为CSrollView。如果之前已经选择CView为基类,请将你的程序进行如下改动:(1)将CXXXView.cpp和CXXXView.h中的CView全部替换为CSrollView(XXX为工程名称)(2)通过ClassWizard为CXXXView添加响应函数OnInitialUpdate(),并添加一下代码:
    CSize sizeTotal;
    sizeTotal.cx=sizeTotal.cy=0;
    SetScrollSizes(MM_TEXT,SizeTotal);

这段代码的作用在于完成滚动条的初始化,如果不添加编译时没有问题但运行时出错,SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault )四个参数的含义分别是:nMapMode指映射模式,sizeTotal代表滚动条的范围,sizePage代表点击滚动条空白处时滚动条移动的距离,sizeLine代表点击端点处滚动条移动的距离。

    设置完成后,在OnDraw中把你绘图使用的参数传递给SetScrollSizes(),确定滚动条的范围,此处有一注意事项:在绘图的过程中使用CDC *pDC直接调用绘制,不要使用CClientDC dc(this)的dc来进行绘制,否则将导致滚动条的移动时图形没有任何变化(曾经花了两天时间才发现这个问题的解决方法,笨啊!)

建议最好添加如下代码:

//这个很重要
void CProgramView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
 // TODO: Add your specialized code here and/or call the base class
 
 CScrollView::OnPrepareDC(pDC, pInfo);
}

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

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

 CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值