Declare Function TransparentBlt Lib "msimg32" (ByVal hDestDC As Long, ByVal xDest As Long, ByVal yDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSRC As Long, ByVal crTransparent As Long) As Long
我用以上的API函数,为什么程序运行久了后,画图线出现异常,电脑桌面屏幕变花
请问哪位知道为什么?
还有我在一本书找到作者编的TransparentBlt,我不知道它具体的原理,麻烦哪位说说呗
Public Sub TransparentBlt(DstDC As Long, SrcDC As Long, ByVal SrcX As Integer, ByVal SrcY As Integer, ByVal SrcW As Integer, ByVal SrcH As Integer, _
DstX As Integer, DstY As Integer, TransColor As Long)
    
  Dim nRet As Long
  Dim MonoMaskDC As Long, hMonoMask As Long
  Dim MonoInvDC As Long, hMonoInv As Long
    
  Dim ResultDstDC As Long, hResultDst As Long
  Dim ResultSrcDC As Long, hResultSrc As Long
    
  Dim hPrevMask As Long, hPrevInv As Long
  Dim hPrevSrc As Long, hPrevDst As Long
    
  Dim oldBC As Long, OldMode As Integer
    
  MonoMaskDC = CreateCompatibleDC(DstDC)
  MonoInvDC = CreateCompatibleDC(DstDC)
    
  hMonoMask = CreateBitmap(SrcW, SrcH, 1, 1, ByVal 0&)
  hMonoInv = CreateBitmap(SrcW, SrcH, 1, 1, ByVal 0&)
    
  hPrevMask = SelectObject(MonoMaskDC, hMonoMask)
  hPrevInv = SelectObject(MonoInvDC, hMonoInv)
    
  ResultDstDC = CreateCompatibleDC(DstDC)
  ResultSrcDC = CreateCompatibleDC(DstDC)
    
  hResultDst = CreateCompatibleBitmap(DstDC, SrcDC, SrcH)
  hResultSrc = CreateCompatibleBitmap(DstDC, SrcDC, SrcH)
    
  hPrevDst = SelectObject(ResultDstDC, hResultDst)
  hPrevSrc = SelectObject(ResultSrcDC, hResultSrc)
    
  oldBC = SetBkColor(SrcDC, TransColor)
  nRet = BitBlt(MonoMaskDC, 0, 0, SrcW, SrcH, SrcDC, SrcX, SrcY, vbSrcCopy)
  TransColor = SetBkColor(SrcDC, oldBC)
    
  nRet = BitBlt(MonoInvDC, 0, 0, SrcW, SrcH, MonoMaskDC, 0, 0, vbNotSrcCopy)
    
  nRet = BitBlt(ResultDstDC, 0, 0, SrcW, SrcH, DstDC, DstX, DstY, vbSrcCopy)
    
  nRet = BitBlt(ResultDstDC, 0, 0, SrcW, SrcH, MonoMaskDC, 0, 0, vbSrcAnd)
    
  nRet = BitBlt(ResultSrcDC, 0, 0, SrcW, SrcH, SrcDC, SrcX, SrcY, vbSrcCopy)
    
  nRet = BitBlt(ResultSrcDC, 0, 0, SrcW, SrcH, MonoInvDC, 0, 0, vbSrcAnd)
    
  nRet = BitBlt(ResultDstDC, 0, 0, SrcW, SrcH, ResultSrcDC, 0, 0, vbSrcInvert)
    
  nRet = BitBlt(DstDC, DstX, DstY, SrcW, SrcH, ResultDstDC, 0, 0, vbSrcCopy)
    
  hMonoMask = SelectObject(MonoMaskDC, hPrevMask)
  DeleteObject hMonoMask
    
  hMonoInv = SelectObject(MonoInvDC, hPrevInv)
  DeleteObject hMonoInv
    
  hResultDst = SelectObject(ResultDstDC, hPrevDst)
  DeleteObject hResultDst
    
  hResultSrc = SelectObject(ResultSrcDC, hPrevSrc)
  DeleteObject hResultSrc
    
  DeleteDC MonoMaskDC
  DeleteDC MonoInvDC
  DeleteDC ResultDstDC
  DeleteDC ResultSrcDC
    
End Sub