[COLOR="SeaGreen"]// переменные и структуры[/COLOR]
DC32 : dword
Cbmp : dword
рDC : dword
srcPoint : POINTAPI
winSize : Size
blendFunc32bpp : BLENDFUNCTION
[COLOR="SeaGreen"]// создаем контекст[/COLOR]
DC32 = CreateCompatibleDC (0)
Cbmp = CreateBitmap (Width, Height, 1, 32, 0)
call SelectObject (CDC, Cbmp)
call DeleteObject (Cbmp)
[COLOR="SeaGreen"]/*
рисуем в созданном крнтексте
*/[/COLOR]
[COLOR="SeaGreen"]// кладем его на форму[/COLOR]
call SetWindowLong (hWnd, GWL_EXSTYLE, WS_EX_LAYERED)
srcPoint.X = 0
srcPoint.Y = 0
winSize.cx = Width
winSize.cy = Height
blendFunc32bpp.AlphaFormat = AC_SRC_ALPHA
blendFunc32bpp.BlendFlags = 0
blendFunc32bpp.BlendOp = AC_SRC_OVER
blendFunc32bpp.SourceConstantAlpha = 255 [COLOR="SeaGreen"]//255 - уровень прозрачности всей формы[/COLOR]
hDC = GetWindowDC (hWnd)
call UpdateLayeredWindow (hWnd, hDC, 0, winSize, DC32, srcPoint, 0, blendFunc32bpp, ULW_ALPHA)
BITMAP на LAYERED окне.
Когда рисуешь традиционным методом, прозрачность окна передается изображению...
Цитата: PROG_MAN
Как нарисовать непрозрачный BITMAP на прозрачном LAYERED окне?
Когда рисуешь традиционным методом, прозрачность окна передается изображению...
Когда рисуешь традиционным методом, прозрачность окна передается изображению...
Тут другой подход нужет. Ты передаеш прозрачность просто всему LAYERED окну, а для того чтобы сделать окно с разными степенями прозрачности в разных его областях надо создать 32x битный DC, нарисовать в нем только 32x битные битмапы (иначе вместо битмапа козяблики будут :)) и наложить его на форму. Собсно, реализация:
Код:
На CD32 можно нарисовать что надо (имееться ввиду любую 32х битную картинку bmp, png, и.тд.), потом наложить все ето на форму.Правдо у етого метода есть недостаток: контролы которые на форме исчезают из видимости, но попрежнему могут принимать сообщения.
Если надо, могу выложить мою DLL'ку для более удобного накладывания контекста на форму.