Module APIModule APIVB.Net快速移动图像的实例 DeclareFunction CreateCompatibleDC()Function CreateCompatibleDC Lib"gdi32.dll" (ByVal hdc As IntPtr) As IntPtr DeclareFunction SelectObject()Function SelectObject Lib"gdi32.dll" (ByVal hdc As IntPtr, ByVal hgdiobj As IntPtr) As IntPtr DeclareFunction ReleaseDC()Function ReleaseDC Lib"gdi32.dll" (ByVal hWnd As IntPtr, ByVal hDC As IntPtr) AsInteger DeclareFunction GetStretchBltMode()Function GetStretchBltMode Lib"gdi32.dll" (ByVal hdc As IntPtr) AsInteger DeclareFunction SetStretchBltMode()Function SetStretchBltMode Lib"gdi32" (ByVal hdc As IntPtr, ByVal iStretchMode AsInteger) AsInteger DeclareFunction DeleteObject()Function DeleteObject Lib"gdi32.dll" (ByVal hObject As IntPtr) As IntPtr DeclareFunction DeleteDC()Function DeleteDC Lib"gdi32.dll" (ByVal hDc As IntPtr) As IntPtr DeclareFunction BitBlt()Function BitBlt Lib"GDI32.DLL" ( _ ByVal hdcDest As IntPtr, _ ByVal nXDest AsInteger, _ ByVal nYDest AsInteger, _ ByVal nWidth AsInteger, _ ByVal nHeight AsInteger, _ ByVal hdcSrc As IntPtr, _ ByVal nXSrc AsInteger, _ ByVal nYSrc AsInteger, _ ByVal dwRop As TernaryRasterOperations) AsBoolean DeclareFunction StretchBlt()Function StretchBlt Lib"gdi32.dll" ( _ ByVal hdcDest As IntPtr, _ ByVal nXOriginDest AsInteger, _ ByVal nYOriginDest AsInteger, _ ByVal nWidthDest AsInteger, _ ByVal nHeightDest AsInteger, _ ByVal hdcSrc As IntPtr, _ ByVal nXOriginSrc AsInteger, _ ByVal nYOriginSrc AsInteger, _ ByVal nWidthSrc AsInteger, _ ByVal nHeightSrc AsInteger, _ ByVal dwRop As TernaryRasterOperations) AsBoolean Enum TernaryRasterOperationsEnum TernaryRasterOperations AsInteger SRCCOPY =&HCC0020 SRCPAINT =15597702'dest = source OR dest SRCAND =8913094'dest = source AND dest SRCINVERT =6684742'dest = source XOR dest SRCERASE =4457256'dest = source AND (NOT dest ) NOTSRCCOPY =3342344'dest = (NOT source) NOTSRCERASE =1114278'dest = (NOT src) AND (NOT dest) MERGECOPY =12583114'dest = (source AND pattern) MERGEPAINT =12255782'dest = (NOT source) OR dest PATCOPY =15728673'dest = pattern PATPAINT =16452105'dest = DPSnoo PATINVERT =5898313'dest = pattern XOR dest DSTINVERT =5570569'dest = (NOT dest) BLACKNESS =66'dest = BLACK WHITENESS =16711778'dest = WHITE End Enum End Module
PublicClass Form1Class Form1 Dim offset As Point Dim MousePressPoint As Point Dim Gr As Graphics Dim srcBitmap As Bitmap Dim srcHDC, desHDC As IntPtrVB.Net快速移动图像的实例 Dim HBitmapSrc As IntPtr PrivateSub Panel1_DoubleClick()Sub Panel1_DoubleClick(ByVal sender AsObject, ByVal e As System.EventArgs) Handles Panel1.DoubleClick Dim cd AsNew OpenFileDialog cd.Filter ="bmp文件 (*.bmp)|*.bmp|jpg文件 (*.jpg)|*.jpg|gif文件 (*.gif)|*.gif|所有文件|*.*" If cd.ShowDialog = Windows.Forms.DialogResult.OK Then srcBitmap =New Bitmap(cd.FileName) offset =New Point(0, 0) Panel1.Invalidate() EndIf End Sub PrivateSub PictureBox1_MouseDown()Sub PictureBox1_MouseDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown MousePressPoint = e.Location End Sub PrivateSub PictureBox1_MouseMove()Sub PictureBox1_MouseMove(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove If e.Button = Windows.Forms.MouseButtons.Left Then Windows.Forms.Cursor.Current = Cursors.Hand offset.X += e.X - MousePressPoint.X offset.Y += e.Y - MousePressPoint.Y MousePressPoint = e.Location CallMe.MyReDraw(offset.X, offset.Y) EndIf End Sub PrivateSub PictureBox1_Paint()Sub PictureBox1_Paint(ByVal sender AsObject, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint CallMe.MyReDraw(offset.X, offset.Y) End Sub Sub MyReDraw()Sub MyReDraw(ByVal x AsInteger, ByVal y AsInteger) If srcBitmap IsNothingThenExit Sub If srcHDC.Equals(IntPtr.Zero) Then srcHDC = CreateCompatibleDC(IntPtr.Zero) HBitmapSrc = srcBitmap.GetHbitmap() SelectObject(srcHDC, HBitmapSrc) EndIf If desHDC.Equals(IntPtr.Zero) Then IfIsNothing(Gr) Then Gr = Panel1.CreateGraphics desHDC = Gr.GetHdc() 'SetStretchBltMode(desHDC, 3) EndIf Call BitBlt(desHDC, 0, 0, Panel1.ClientSize.Width, Panel1.ClientSize.Height, srcHDC, -x, -y, TernaryRasterOperations.SRCCOPY) Gr.ReleaseHdc(desHDC) desHDC =Nothing End Sub PrivateSub Form1_FormClosing()Sub Form1_FormClosing(ByVal sender AsObject, ByVal e As System.Windows.Forms.FormClosingEventArgs) HandlesMe.FormClosing IfNotIsNothing(srcBitmap) Then srcBitmap.Dispose() IfNot srcHDC.Equals(IntPtr.Zero) Then DeleteDC(srcHDC) IfNot desHDC.Equals(IntPtr.Zero) Then DeleteDC(desHDC) IfNot HBitmapSrc.Equals(IntPtr.Zero) Then DeleteObject(HBitmapSrc) IfNotIsNothing(Gr) Then Gr.Dispose() GC.Collect() End SubVB.Net快速移动图像的实例 End Class