19,468
社区成员
发帖
与我相关
我的任务
分享
dc.StretchBlt(
0, //选择在目标DC什么位置(X坐标)开始显示
0, //选择在目标DC什么位置(Y坐标)开始显示
m_rcClient.Width(), //选择在目标DC显示的宽度
m_rcClient.Height(), //选择在目标DC显示的高度
m_MemDC.GetMemoryDC(), //源DC
0, //截取源DC的区域,起始X坐标
0, //截取源DC的区域,起始Y坐标
nPicWidth, //截取源DC的宽度
nPicHeight, //截取源DC的高度
SRCCOPY); //拷贝的模式
2.缩放
直接缩放Client的大小就可以,并记录缩放比例
3.图形的移动与拉伸。
在OnMouseMove、OnLButtonDown、OnLButtonUp相关函数中,先做鼠标偏移
1)获得鼠标在缩放后的图片的位置。
2)计算鼠标在1:1图片的位置
3)对图形进行操作。记录操作图形后,在1:1图片中的相关参数(坐标、长宽等等)
(因为绘制时就是在1:1图片中绘制的,所以只记录1:1下的参数就好了)
PS: 这种做法,避免了图形坐标的转换,只需要转换鼠标坐标即可。
但是这样做,图形的线宽PenWidth会随着比例放大而放大。
所以在缩放的步骤中,应该多加一个步骤,调整PenWidth,让PenWidth不跟随图形的缩放而放大缩小。
以上是我目前已经实现的做法,而且比较简洁,图形不会发生偏移。
楼主可以参考一下!