Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BITMAP на LAYERED окне.

31K
11 сентября 2007 года
PROG_MAN
4 / / 11.09.2007
Как нарисовать непрозрачный BITMAP на прозрачном LAYERED окне?
Когда рисуешь традиционным методом, прозрачность окна передается изображению...
5.1K
11 сентября 2007 года
12345678
93 / / 16.12.2006
Цитата: PROG_MAN
Как нарисовать непрозрачный BITMAP на прозрачном LAYERED окне?
Когда рисуешь традиционным методом, прозрачность окна передается изображению...



Тут другой подход нужет. Ты передаеш прозрачность просто всему LAYERED окну, а для того чтобы сделать окно с разными степенями прозрачности в разных его областях надо создать 32x битный DC, нарисовать в нем только 32x битные битмапы (иначе вместо битмапа козяблики будут :)) и наложить его на форму. Собсно, реализация:

Код:
[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)


На CD32 можно нарисовать что надо (имееться ввиду любую 32х битную картинку bmp, png, и.тд.), потом наложить все ето на форму.Правдо у етого метода есть недостаток: контролы которые на форме исчезают из видимости, но попрежнему могут принимать сообщения.

Если надо, могу выложить мою DLL'ку для более удобного накладывания контекста на форму.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог