Как нарисовать прозрачное изображение с помощью WinAPI ImageList_DrawIndirect? - PullRequest
3 голосов
/ 21 марта 2011

Мне нужно нарисовать 32-битное изображение из собственного списка изображений API с указанным уровнем прозрачности, но я не могу этого сделать.Я использую вызов ImageList_DrawIndirect и состояние изображения ILS_ALPHA в структуре IMAGELISTDRAWPARAMS, переданное в ImageList_DrawIndirect, но, похоже, оно не работает должным образом.ComCtl из v6 "привязан" к моему приложению, поэтому это не является причиной проблемы.

Как это сделать?

Мой код выглядит так:

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.

1 Ответ

2 голосов
/ 21 марта 2011

Этот код отлично работает для меня в моем приложении.Под этим я подразумеваю, что у меня в приложении один и тот же код, за исключением того, что я не устанавливаю rgbBk.

Я предполагаю, что изображения в вашем списке изображений каким-то образом потеряли свой альфа-канал.

Я удивлен, что вы установили rgbBk, потому что я считаю, что это не влияет на изображения с альфа-каналом.

...