MFC滚动条往下拖的时候,GetClientRect 位置会改变,为什么
我用双缓存画图,OnDraw上面就是写了个GetClientRect来获得客户区的位置但是当滚动条往下拖动的时候,这个位置就不准确了,也就是说我必须把滚动条拖到最上边,鼠...
我用双缓存画图,OnDraw上面就是写了个GetClientRect 来获得客户区的位置
但是当滚动条往下拖动的时候,这个位置就不 准确了,也就是说我必须把滚动条拖到最上边,鼠标画图才以0,0 的左上角为准,进行画图,否则线条和鼠标位置会出现很大偏差,经常导致线在上面,鼠标在下面,而且线绝对画不到客户区原来区域的下面(有滚动条一般都代表画布很大张,比如客户区只有1024 X 768 ) 但是内存DC有1024X 2048大小),这样一来多出的1300高度是画不了任何东西的,白创建了。
即使鼠标在下面的X100,Y1800位置附近画画,线也是显示在上面的X100,Y600附近显示线(坐标偏差) 展开
但是当滚动条往下拖动的时候,这个位置就不 准确了,也就是说我必须把滚动条拖到最上边,鼠标画图才以0,0 的左上角为准,进行画图,否则线条和鼠标位置会出现很大偏差,经常导致线在上面,鼠标在下面,而且线绝对画不到客户区原来区域的下面(有滚动条一般都代表画布很大张,比如客户区只有1024 X 768 ) 但是内存DC有1024X 2048大小),这样一来多出的1300高度是画不了任何东西的,白创建了。
即使鼠标在下面的X100,Y1800位置附近画画,线也是显示在上面的X100,Y600附近显示线(坐标偏差) 展开
1个回答
展开全部
滚动坐标系转换问题。
在CScrollView中有三个坐标系,Screen Client Scroll。你获取到Client坐标之后,
要加上GetScrollPosition才是滚动坐标,也就是实际画布坐标。
所以,这不是误差,是坐标系计算少加了滚动初始位置。
在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));
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询