同一时刻是相同的: Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Command1_Click() Debug.Print GetDC(Me.hwnd) Debug.Print Me.hDC '输出的值相同 End SubPrivate Sub Command2_Click() Debug.Print GetDC(Picture1.hwnd) Debug.Print Picture1.hDC '输出的值相同 End Sub
Option Explicit 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 Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Form_Click() Dim h As Long h = GetDC(Command1.hwnd) Picture1.AutoRedraw = False BitBlt Picture1.hDC, 0, 0, 140, 140, h, 0, 0, &HCC0020 End Sub 我调试过,可以正常显示。
3.getwindowdc是获得窗口的所有DC
我在PICTUREBOX里加了一个图片,然后用BITBLT把PICTUREBOX的HDC传到另一个PICTUREBOX里可以正常显示出来,但是想把COMMANDBUTTON 或别的没自带HDC属性的控件用GETDC或GETWINDOWDC得到他的DC然后再BITBLT到另一个PICTUREBOX里却无法正常显示
PICTUREBOX的HDC和其他用API取得的DC有什么不同之处呢
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Command1_Click()
Debug.Print GetDC(Me.hwnd)
Debug.Print Me.hDC
'输出的值相同
End SubPrivate Sub Command2_Click()
Debug.Print GetDC(Picture1.hwnd)
Debug.Print Picture1.hDC
'输出的值相同
End Sub
201402244 1627465614
-1895749140 654387328
1744907728 268503970
每次都不一样
Debug.Print GetDC(Picture1.hwnd), Picture1.hDC
End Sub
'连续单击N次的输出
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
'-620688964 -620688964
Option Explicit
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
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Form_Click()
Dim h As Long h = GetDC(Command1.hwnd)
Picture1.AutoRedraw = False
BitBlt Picture1.hDC, 0, 0, 140, 140, h, 0, 0, &HCC0020
End Sub
我调试过,可以正常显示。
之前好像看了下,
那个窗体好像用GDI处理过