请问:为什么BitBlt这个API和这个MERGECOPY常量一起使用的时候,对图片好象没有反应呢?请热心的朋友,帮帮忙哦!在此,先谢过帮忙的朋友了!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 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 LongPrivate Const BLACKNESS = &H42           ' (DWORD) dest = BLACK
Private Const DSTINVERT = &H550009       ' (DWORD) dest = (NOT dest)
Private Const MERGECOPY = &HC000CA       ' (DWORD) dest = (source AND pattern)
Private Const MERGEPAINT = &HBB0226      ' (DWORD) dest = (NOT source) OR dest
Private Const NOTSRCCOPY = &H330008      ' (DWORD) dest = (NOT source)
Private Const NOTSRCERASE = &H1100A6     ' (DWORD) dest = (NOT src) AND (NOT dest)
Private Const PATCOPY = &HF00021         ' (DWORD) dest = pattern
Private Const PATINVERT = &H5A0049       ' (DWORD) dest = pattern XOR dest
Private Const PATPAINT = &HFB0A09        ' (DWORD) dest = DPSnoo
Private Const SRCAND = &H8800C6          ' (DWORD) dest = source AND dest
Private Const SRCCOPY = &HCC0020         ' (DWORD) dest = source
Private Const SRCERASE = &H440328        ' (DWORD) dest = source AND (NOT dest )
Private Const SRCINVERT = &H660046       ' (DWORD) dest = source XOR dest
Private Const SRCPAINT = &HEE0086        ' (DWORD) dest = source OR dest
Private Const WHITENESS = &HFF0062       ' (DWORD) dest = WHITE
Private Sub Option1_Click()
  Dim a As Long
  
  CommonDialog1.ShowColor
  
  a = BitBlt(Picture1.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, BLACKNESS)
  
  Picture1.Refresh
End SubPrivate Sub Option2_Click()
  Dim b As Long
  
  b = BitBlt(Picture2.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, DSTINVERT)
  
  Picture2.Refresh
End SubPrivate Sub Option3_Click()
  Dim c As Long
  
  c = BitBlt(Picture3.hDC, 0, 0, 300, 300, Picture4.hDC, 300, 300, MERGECOPY)
  
  Picture3.Refresh
End SubPrivate Sub Option4_Click()
  Dim d As Long
  
  d = BitBlt(Picture4.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, MERGEPAINT)
  
  Picture4.Refresh
End Sub

解决方案 »

  1.   

    ROP码 
     含义 
     
    BLACKNESS 
     输出黑色 
     
    DSTINVERT 
     反转目的位图 
     
    MERGECOPY 
     用与操作把图案(Pattern)与源位图融合起来 
     
    MERGEPAINT 
     用或操作把反转的源位图与目的位图融合起来 
     
    NOTSRCCOPY 
     把源位图反转然后拷贝到目的地 
     
    NOTSRCERASE 
     用或操作融合源和目的位图,然后再反转 
     
    PATCOPY 
     把图案拷贝到目的位图中 
     
    PATINVERT 
     用异或操作把图案与目的位图相融合 
     
    PATPAINT 
     用或操作融合图案和反转的源位图,然后用或操作把结果与目的位图融合 
     
    SRCAND 
     用与操作融合源位图和目的位图 
     
    SRCCOPY 
     把源位图拷贝到目的位图 
     
    SRCERASE 
     先反转目的位图,再用与操作将其与源位图融合 
     
    SRCINVERT 
     用异或操作融合源位图和目的位图 
     
    SRCPAINT 
     用或操作融合源位图和目的位图 
     
    WHITENESS 
     输出白色 
     
      

  2.   

    这个说明我有,我是想知道:为什么BitBlt这个API和这个MERGECOPY常量一起使用的时候,对图片好象没有反应呢?
      

  3.   

    http://www.cnblogs.com/del/archive/2008/06/25/1229469.html上有一个Delphi做的bitblt光栅运算效果的演示,好象和vb的效果不同.不仅MERGECOPY,其它也有不少效果和应有效果不一致的.我认为这是VB本身的问题.
      

  4.   

    MERGECOPY 方式下参数 hSrcDC 与其他方式不一致!
      

  5.   


    a = BitBlt(Picture1.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, BLACKNESS) 
    b = BitBlt(Picture2.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, DSTINVERT) 
    c = BitBlt(Picture3.hDC, 0, 0, 300, 300, Picture4.hDC, 300, 300, MERGECOPY) 
    d = BitBlt(Picture4.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, MERGEPAINT) 虽然没看到其他代码,但是画图所用的源图片应该是一样的吧!
    你做 MERGECOPY 时 Picture4 中有图像吗?