MFC滚动条往下拖的时候,GetClientRect 位置会改变,为什么

我用双缓存画图,OnDraw上面就是写了个GetClientRect来获得客户区的位置但是当滚动条往下拖动的时候,这个位置就不准确了,也就是说我必须把滚动条拖到最上边,鼠... 我用双缓存画图,OnDraw上面就是写了个GetClientRect 来获得客户区的位置
但是当滚动条往下拖动的时候,这个位置就不 准确了,也就是说我必须把滚动条拖到最上边,鼠标画图才以0,0 的左上角为准,进行画图,否则线条和鼠标位置会出现很大偏差,经常导致线在上面,鼠标在下面,而且线绝对画不到客户区原来区域的下面(有滚动条一般都代表画布很大张,比如客户区只有1024 X 768 ) 但是内存DC有1024X 2048大小),这样一来多出的1300高度是画不了任何东西的,白创建了。
即使鼠标在下面的X100,Y1800位置附近画画,线也是显示在上面的X100,Y600附近显示线(坐标偏差)
展开
 我来答
bhtzu
2013-01-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4203万
展开全部
滚动坐标系转换问题。
在CScrollView中有三个坐标系,Screen Client Scroll。你获取到Client坐标之后,
要加上GetScrollPosition才是滚动坐标,也就是实际画布坐标。
所以,这不是误差,是坐标系计算少加了滚动初始位置。
追问
具体怎么加上啊,就差这个了
追答
这个要具体根据代码,其实就是说,当你向双缓冲画布画的时候,要加上GetScrollPosition。
举例:在OnMouseMove中:
CPoint sOrg = GetScrollPosition();
CPoint p = point;
p.Offset(sOrg);//这里是关键
memDC.MoveTo(p);
memDC.LineTo(p.Offset(2,2));
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式