图形如果不是矢量图的话,缩放一定会失真的。
实现按住图片移动的话,你可以用两个picturebox,picturebox1用来保存原始图形(必须隐藏),picturebox2用来显示当前图形,等鼠标移动的时候,计算鼠标移动的距离,然后根据picturebox1的图形,取他相应的部分,放到picturebox2中,就实现了。
实现按住图片移动的话,你可以用两个picturebox,picturebox1用来保存原始图形(必须隐藏),picturebox2用来显示当前图形,等鼠标移动的时候,计算鼠标移动的距离,然后根据picturebox1的图形,取他相应的部分,放到picturebox2中,就实现了。
解决方案 »
- 达人帮忙~Winsock(高分马上奉送)
- 关于vb使用GOTO语句的问题!盼大虾们赐教!
- 如何动态增加ComboBox 和 label
- 如何在Word当前位置插入一横线阿
- 用installshield6.20制作VB应用程序的安装程序出现问题--急急急!!!!!
- vb 操作excel 使用pagesetup类的问题
- 不用绑定就可以从数据库中读出并显示出相应的图片数据
- 高分求助!
- 运用vb6.0进行文件操作遇到的一个奇怪BUG!
- VB用winsock控件和西门子PLC通讯
- 哪有類似OUTLOOK中的垂直菜單控件可以下載,需要支持真彩圖標的
- 谁有sql 2000 有关锁的详细资料.....100分
至于移动效果,我的想法是在PictureBox里放一个image,然后用Mouse_Move来响应移动,不知有什么更好的办法?
http://www.dapha.net/vb/list.asp?id=849
Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
说明
将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。这个函数会在设备场景中定义一个目标矩形,并在位图中定义一个源图象。源矩形会根据需要进行伸缩,以便与目标矩形的大小相符
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,目标设备场景
x,y Long,目标矩形左上角的x,y坐标,以逻辑坐标表示
nWidth,nHeight Long,目标矩形的宽度和高度,以逻辑坐标表示
hSrcDC Long,源设备场景。如光栅运算未指定一个源,则这个参数应为零
xSrc,ySrc Long,用源DC的逻辑坐标表示的源矩形左上角位置
nSrcWidth,nSrcHeight Long,分别指定用逻辑单位(以源DC为基础)传输的一幅图象的宽度和高度。如其中有一个参数的符号(指正负号)与对应的目标参数不符,位图就会在对应的轴上作镜像转换处理
dwRop Long,传输过程中进行的光栅运算。如刷子属于光栅运算的一部分,就使用选入目标DC的刷子
注解
可用GetDeviceCaps函数判断特定的设备场景是否支持此函数
不可选择对源位图进行剪切或旋转处理,源位图也不能是一个图元文件设备场景
====================================================================
SetStretchBltMode VB声明
Declare Function SetStretchBltMode Lib "gdi32" Alias "SetStretchBltMode" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long
说明
指定StretchBlt 和 StretchDIBits函数的伸缩模式。这种伸缩模式定义了Windows如何对伸缩过程中剔除的扫描线进行控制。对于VB窗体和控件,倘若在API绘图过程中使用这个函数,建议恢复原来的StretchBlt模式
返回值
Long,上一次伸缩模式的值,零表示失败
参数表
参数 类型及说明
hdc Long,设备场景的句柄
nStretchMode Long,新伸缩模式建立在下述任何一个常数的基础上,它们均在API32.TXT文件中得到了定义:
STRETCH_ANDSCANS 默认设置。剔除的线段与剩下的线段进行AND运算。这个模式通常应用于采用了白色背景的单色位图
STRETCH_DELETESCANS 剔除的线段被简单的清除。这个模式通常用于彩色位图
STRETCH_ORSCANS 剔除的线段与剩下的线段进行OR运算。这个模式通常应用于采用了白色背景的单色位图
STRETCH_HALFTONE 目标位图上的像素块被设为源位图上大致近似的块。这个模式要明显慢于其他模式
注解
如果要对伸缩模式有一个更深刻的印象,可想象一下对白色图象中的一条白色细线进行压缩。压缩过程中,像素会从图象中删去。为避免线段消失,在删除它们之前,有必要先对线段中的像素与邻近像素进行AND运算。为达到这个目的,应考虑选用STRETCH_ANDSCANS伸缩模式
Public MoveIns As Single '地图移动间隔
Public MapX As Single, MapY As Single '地图的位置
Public MouseX As Single, MouseY As Single '鼠标位置Private Sub picMap_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = 1 Then
MouseX = x
MouseY = y
End IfEnd SubPrivate Sub picMap_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = 1 Then
If x < MouseX Then
MapX = MapX - MoveIns
End If
If x > MouseX Then
MapX = MapX + MoveIns
End If
If MapX > 0 Then
MapX = 0
End If
If MapX < -(imgStoreMap.Width - picMap.ScaleWidth) Then
MapX = -(imgStoreMap.Width - picMap.ScaleWidth)
End If
MouseX = x
If y < MouseY Then
MapY = MapY - MoveIns
End If
If y > MouseY Then
MapY = MapY + MoveIns
End If
If MapY > 0 Then
MapY = 0
End If
If MapY < -(imgStoreMap.Height - picMap.ScaleHeight) Then
MapY = -(imgStoreMap.Height - picMap.ScaleHeight)
End If
MouseY = y
picMap.PaintPicture imgStoreMap.Picture, MapX, MapY
End IfEnd Sub
取图片框尺寸(PixSize)。
取图片顶点坐标。
根据顶点坐标PixViewTop裁减图片框尺寸的区域在图片框显示。
宽度(PixViewTop.X-PixSize.Max)
宽度(PixViewTop.Y-PixSize.Yax)
MouseDown事件:
取鼠标坐标。PixStartMouseMove事件:
取鼠标当前坐标。PixNow根据PixNow的X和Y减PixStart的X和Y取偏移量PixMag图片顶点坐标加偏移量
根据顶点坐标裁减图片框尺寸的区域在图片框显示。