AlphaBlend不适用于XP,但适用于Vista和Windows 7,8

时间:2013-01-25 16:04:09

标签: api alphablending

我正在使用AlphaBlend。没什么特别的。

我的代码在Vista,Windows 7和Windows 8上运行良好,但在Windows XP上运行不正常。

通常AlphaBlend返回1,但在XP上它返回0。 我在2台XP电脑上测试过。

我完全不知所措。

GetLastError返回“Successfully completed”。

我很确定AlphaBlend应该适用于XP。 有没有人知道如何继续?

我的(VB6-)代码是

    Dim LBF As Long
    Dim bf As BLENDFUNCTION
    With bf
        .BlendOp = AC_SRC_OVER
        .SourceConstantAlpha = 255
    End With

    Call CopyMemory(LBF, bf, Len(bf))    'Copy struct into a Long var

(......其他一些东西......)

  Dim iRet&
    iRet = AlphaBlend(Me.Picture1.hdc, 0, 0, lDestWidth, lDestHeight, lOtherDC, 0, 0, (rOtherWin.Right - rOtherWin.Left), (rOtherWin.Bottom - rOtherWin.Top), LBF)

所有值都有效且符合预期,但AlphaBlend仍然返回0。

谢谢。

2 个答案:

答案 0 :(得分:0)

我发现了AlphaBlend失败的原因。 我尝试从一个只有一点点屏幕的DC的AlphaBlend。 如果它完全在屏幕内,AlphaBlend效果很好。

我不确定为什么会这样。如果有人知道,请告诉我!

答案 1 :(得分:0)

根据AlphaBlend的文档:源矩形必须完全位于源表面内,否则会发生错误,函数返回FALSE。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183351(v=vs.85).aspx