关于BITBLT用法?截图老是黑的?
代码如下:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpclassname As String, ByVal lpWindowName As String) As Long'定义全局变量
Public S1_left
Public S1_right
Public S1_up
Public S1_downS1_left = 380
S1_right = 650
S1_up = 40
S1_down = 80Private Sub Command2_Click()
'上面S1 图象复制到pic2
hwnd = FindWindow(vbNullString, "资源管理器")
Mybit = BitBlt(Picture2.hDC, 0, 0, S1_right - S1_left, S1_down - S1_up, hwnd, S1_left, S1_down, SRCCOPY)End Sub出来老是黑的,求解!'获取窗口句柄代码 经过测试没问题!

解决方案 »

  1.   

    '获取句柄后,你少了一个动作 GETDC(句柄)Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
    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 Sub Form_Load()
       '将 Picture1 之长宽设定成和屏幕一样大小
       Picture1.Width = Screen.Width
       Picture1.Height = Screen.Height
    End SubPrivate Sub Form_Unload(Cancel As Integer)
       Call ReleaseDC(HwndVal, HdcVal)
       End
    End SubPrivate Sub Command1_Click()
       Dim HwndVal&, HdcVal&
       Picture1.AutoRedraw = True
       HwndVal = GetDesktopWindow
       HdcVal = GetDC(HwndVal)
       Call BitBlt(Picture1.hdc, 0, 0, Screen.Width \ 15, Screen.Height \ 15, HdcVal, 0, 0, vbSrcCopy)
       Picture1.Picture = Picture1.Image
       Call ReleaseDC(HwndVal, HdcVal)
    End Sub
      

  2.   

    更正 Dim HwndVal&, HdcVal&将上面这行放到最上面的通用区