> 老怪 撰寫於文章 <78e2la$635@netnews.hinet.net>...
>
> 龍太陽 撰寫於文章 <78cslm$mms@netnews.hinet.net>...
> > 除了使用 xxx.printform 這方法外,還有沒有其他方法?
Form 上的畫面(含 Control) 的輸出
----------------------------------------------------------------------------
----
'測試本範例至少要於 Form 上放置 Picture1 ,其他物件則隨意。
'本範例只及於表單的內含區,Title 及 Menu 不包括在內。
Option Explicit
'BitBlt API 函數有一個特性,它利用 DC 為標識,可以把一個物件的所有 Image
'(包括其所含內容物件之 Image )轉移到另一 DC 標識的物件上。不過此函數有兩要點
'一、單位為 Pixel ,所以截取範圍要經過 ScaleX,ScaleY 函數轉換。
'二、截取範圍超過來源 DC 標識物件,會把 Screen 的背景也抓進來,造成不相干圖
'像之截取,所以一定要準確算出截取範圍的大小。
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long)
As Long
'圖像截取之長度及寬度
Dim sx As Single, sy As Single
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'按下 CTRL+ALT+S 則抓圖存檔
If Shift = vbCtrlMask + vbAltMask And KeyCode = vbKeyS Then
With Picture1
.AutoRedraw = True
BitBlt Picture1.hdc, 0, 0, sx, sy, Me.hdc, 0, 0, vbSrcCopy
SavePicture .Image, App.Path & "\Test.bmp"
.AutoRedraw = False
End With
End If
End Sub
Private Sub Form_Load()
Me.KeyPreview = True
End Sub
Private Sub Form_Resize()
'單位換算成 Pixel
With Me
sx = ScaleX(.ScaleWidth, Me.ScaleMode, vbPixels)
sy = ScaleY(.ScaleHeight, Me.ScaleMode, vbPixels)
End With
'依 Form 大小調整 Picture1 大小
With Picture1
.Width = Me.ScaleWidth + .Width - .ScaleWidth
.Height = Me.ScaleHeight + .Height - .ScaleHeight
.Visible = False
End With
End Sub