Есть четыре контекста (HDC) A - получен от BeginPaint B - получен от CreateCompatibleDC(A) C - получен от CreateCompatibleDC(A) D - получен от CreateCompatibleDC(A) В контекст B заселектили битмап, полученый через LoadBitmap(GetModuleHandle(0), ...) В контекст C заселектили битмап, полученый через CreateCompatibleBitmap(C, ...) В контекст D заселектили битмап, полученый через LoadBitmap(GetModuleHandle(0), ...) Теперь: TransparentBlt из C в B, а потом BitBlt из B в A - прекрасно работает. А вот TransparentBlt из D в C, потом TransparentBlt из C в B, а потом BitBlt из B в A - Дает полную лажу... Понимаю, что немного мутно, но может все-таки бага кому-то покажется очевидной?
_DEN_ Нет, тоже неправильно Работает так, как будто C - Это черно-белая картинка Может это важно, у окна над которым так издеваются есть стиль WS_EX_LAYERED. У него есть и альфа и прозрачный цвет. В моем случае белый.
_DEN_ Я тоже наступал на эти грабли(правда без прозрачности), и пришел к выводу что решение в CreateCompatibleBitmap(A, ...)
_DEN_ Если окно уже имеет свойство полупрозрачности, имеет смысл его сначала скопировать BitBlt (..., CAPTUREBLT | SRCCOPY), и уже потом использовать TransparentBlt.
Black_mirror Да та же фигня, от кого не закомпатиблиться alpet Не совсем понял, откуда куда скопировать? И в чем смысл?
_DEN_ Я собственно сам в сабже не сильно разобрался. Использовать BitBlt + CAPTUREBLT вообще нужно при копировании полупрозрачного окна в растр, видимо это к сабжу не относится. У тебя в самой задачи стоит что? Загрузить один растр(C), маскировать его вторым(D) (точнее скопировать его поверх другого, за исключением src-пикселов с выбранным цветом), потом еще раз маскировать, но уже в B и отобразить B на поверхности окна? В итоге в C, остануться черными пикселы (CreateCompatibleBitmap создает черный растр), которые были обьявлены прозрачными в D, в B остануться неизменными пикселы, что обьявлены прозрачными в C, и в A уже попадет некоторое количество пикселов от исходных растров. Вобщем интересно знать что из себя представляют растры для B и D, и какие цветовые ключи выбираются соотвественно. А заодно и понять что вообще требуется.
Не совсем понял суть, CreateCompatibleBitmap нельзя указывать контекст устройства памяти, должно быть A (Black_mirror правильно заметил). Посмотри во всех ли контекстах выбраны растры и т.п. То что ты написал должно работать. В buttons.exe я тоже использую стиль WS_EX_LAYERED (только alpha) и TransparentBlt (кнопка с регионом, круглая), в файле Transparent.asm аналог функции TransparentBlt (у меня в Win9x он лучше работает). _2020814180__Transparent.zip