你的 BitBlt 调用在哪里?没调用怎么猜啊!

解决方案 »

  1.   

    Sub saveMyScreen(filePath As String)
        Dim dskWnd As Long, dskHDC As Long, rc As RECT, fW As Long, fH As Long
        Dim memDC As Long, hBmp As Long, ret As Long
        
        dskWnd = GetDesktopWindow
        dskHDC = GetDC(dskWnd)
        GetWindowRect Me.hwnd, rc
        fW = rc.Right - rc.Left
        fH = rc.Bottom - rc.Top    Debug.Print fW, fH
        memDC = CreateCompatibleDC(dskHDC)
        hBmp = CreateCompatibleBitmap(dskHDC, fW, fH)
        ret = SelectObject(memDC, hBmp)
        ret = BitBlt(memDC, 0, 0, fW, fH, dskHDC, rc.Left, rc.Top, vbSrcCopy)
        ret = OpenClipboard(dskWnd)
        ret = EmptyClipboard()
        ret = SetClipboardData(2, hBmp)     '2=CF_BITMAP
        ret = CloseClipboard()
        SelectObject memDC, ret
        ReleaseDC dskWnd, dskHDC
        
        SavePicture Clipboard.GetData, filePath
    End Sub
      

  2.   

    我原先的代码  Sub saveMyScreen(filePath As String) '第一步 截屏幕        Dim lngDesktopHwnd As Long
            Dim lngDesktopDC As Long
           lngDesktopHwnd = Form1.hWnd
           lngDesktopDC = GetDC(lngDesktopHwnd)       Call BitBlt(Form1.hDC, 0, 0, Form1.ScaleWidth, Form1.ScaleHeight, lngDesktopDC, 0, 0, SRCCOPY)       Set Form1.Picture = Form1.Image
           SavePicture Form1.Picture, filePath  'filePath为截屏要保存的路径       Call ReleaseDC(lngDesktopHwnd, lngDesktopDC)
    End Sub
      

  3.   

    Form1.ScaleWidth, Form1.ScaleHeight 的单位不是像素吧。截的图远比窗体本身要大。