3

我需要从具有指定透明度级别的本机 API 图像列表中绘制 32 位图像,但我不能这样做。我正在使用传递给的结构中的ImageList_DrawIndirect调用和ILS_ALPHA图像状态,但它似乎没有按预期工作。v6 的 ComCtl 已“附加”到我的应用程序,因此这不是问题的原因。IMAGELISTDRAWPARAMSImageList_DrawIndirect

怎么做?

我的代码如下所示:

Dim idp As IMAGELISTDRAWPARAMS

idp.cbSize = Len(idp)
idp.himl = m_hIml
idp.hdcDst = hdc
idp.rgbBk = -1
idp.x = xPixels
idp.y = yPixels
idp.i = 0
idp.fState = ILS_ALPHA
idp.Frame = 128

ImageList_DrawIndirect(idp)

它是 VB6,但没关系——事实上,我们现在只使用纯 WinAPI。

4

1 回答 1

2

该代码在我的应用程序中非常适合我。我的意思是我的应用程序中有相同的代码,唯一的例外是我没有设置rgbBk.

我的猜测是,您的图像列表中的图像以某种方式丢失了它们的 alpha 通道。

看到你设置了我很惊讶,rgbBk因为我相信它对带有 alpha 的图像没有影响。

于 2011-03-21T09:10:51.207 回答