我用picture中间装一个image控件,这样我实现了能缩放,拖动一副很大的图片。
但是当图片很大时,缩小一些再拖动就明显感觉到一幌一幌的移动,速度很慢!不连贯。
这是为什么?在acdsee中就不会发生这种情况!想请教高手怎样解决这个问题!或责谁有仿ACDSEE的原程序提供!谢谢!
但是当图片很大时,缩小一些再拖动就明显感觉到一幌一幌的移动,速度很慢!不连贯。
这是为什么?在acdsee中就不会发生这种情况!想请教高手怎样解决这个问题!或责谁有仿ACDSEE的原程序提供!谢谢!
调试欢乐多
窗体上一个picturebox,一个image控件,注意:要将image控件画在picturebox中,代码如下:Option Explicit
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOMOVE = &H2
Private Const SWP_DRAWFRAME = &H20Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Sub ControlSize(ControlName As Control, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_THICKFRAME
Else
dwStyle = dwStyle - WS_THICKFRAME
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
Private Sub Form_Load()
Me.Picture1.BorderStyle = 0
Me.Image1.Stretch = True
Me.Image1.Move 0, 0, Me.Picture1.Width, Me.Picture1.Height
Me.Image1.Picture = LoadPicture("c:\mm.jpg")'这里换成你的图片路径
ControlSize Picture1, True
End SubPrivate Sub Picture1_Resize()
Me.Image1.Move 0, 0, Me.Picture1.Width, Me.Picture1.Height
End Sub
神阿!救救我吧!谁知道acdsee 是怎么实现大图片浏览的!
首先,将rainstormmaster(rainstormmaster) 代码中的Image改为PictureBox,即利用两层PictureBox去嵌套,然后用API中相关的绘图函数将图片放大或者缩小放到内层的PIctureBox里,在试试。基本原理就是,将改变大小后的图片重新绘制在去作移动的工作,Image没有hDC等参数,无法往上面绘图,所以只好用PictureBox了。rainstormmaster(rainstormmaster) 看样子比较熟悉这些API,不知道我的想法可行不可行,呵呵~~~我自己没有试过。
不过只能处理jpg和分辨率不大gif图像(记忆中gif超过700象素就不行了)