CScrollView中的坐标问题

本文深入解析了CScrollView类如何自动调整传递给OnDraw成员函数的CPaintDC设备环境对象的视口原点,以及如何在自定义设备环境中手动调用CScrollView::OnPrepareDC进行调整。重点解释了CClientDC与CRectangular存储关系及变换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在调用派生类的OnDraw成员函数之前,CScrollViewCScrollViewCScrollViewCScrollView自动调整传递给OnDraw的 CPaintDC设备环境对象的视口原点。

       为了为滚动窗口调整视口原点,CScrollView重载CView::OnPrepareDC。这种调整对 于CScrollView传递给OnDraw的CPaintDC设备环境来说是自动的,但你必须为自己所使 用的其它设备环境(例如CClientDC)自己调用CScrollView::OnPrepareDC。

        以前总是不懂为什么CClientDC一定要用CRectangular来存储,因为本来就这么大,left和right肯定是0。这显然不正确,因为在CScrollView中调用CClientDC就可以看得,left和right就不是0,0。它得到的是经过变换后的相对于TotalSize的坐标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值