![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Aero Glass эффект [D5, D6, D7, Win2k, WinXP]
[dvs]digiman © (2005-11-09 23:00:00)Как можно похожий сабж реализовать (только не в viste):
- полупрозрачный заголовок
- градиентная прозрачность краев окон
- градиентная прозрачность тени окна (обычные виндовые тени от окон не в счет)
В качестве примера скин для winampa --Orion-- ( http://www.winamp.com/skins/details.php?id=144161или http://www.spuler.us/winamp/orion/orion.html)
[dvs]digiman (2005-11-11 14:21:00) [1]1) у меня битмап 300x110x32 с альфа каналом (подготовлен в шопе)
2) SetLayeredWindowAttributes я не использую
3) Я создаю окно уже со стилем WS_EX_LAYERED
> Wnd := CreateWindowEx(WS_EX_TOPMOST Or WS_EX_TOOLWINDOW
> Or WS_EX_LAYERED, ClassName,'abc',
> WS_POPUP, 100,100,300,110, 0,0,hInstance,Nil);
Antonn (2005-11-10 05:12:00) [2]во первых, нужен 32 битный битмап.
в вторых, если пользоваться UpdateLayeredWindow, то забыть про SetLayeredWindowAttributes
в третьих, на VCL нужно еще было свойство установить SetWindowLong(H,GWL_EXSTYLE, GetWindowLong(H,GWL_EXSTYLE) or WS_EX_LAYERED).
[dvs]digiman (2005-11-10 02:22:00) [3]Попробовал сделать прозрачное окно по альфа-каналу битмапа,
но чего-то не выходит с UpdateLayeredWindow...
Кусок кода (только winapi):
---------------------------------------------------------
//...
Var scrDC, wndDC, memDC : HDC;
hbm : HBITMAP;
pptSrc : TPOINT;
pBlend : TBLENDFUNCTION;
//...
If uMsg=WM_PAINT Then BitBlt(wndDC,0,0,Width,Height,memDC,0,0,SRCCOPY);
//...
Wnd := CreateWindowEx(WS_EX_TOPMOST Or WS_EX_TOOLWINDOW Or WS_EX_LAYERED,
ClassName,'abc', WS_POPUP, 100,100,300,110, 0,0,hInstance,Nil);
scrDC := GetDC(0);
wndDC := GetWindowDC(Wnd);
memDC := CreateCompatibleDC(wndDC);
hbm := LoadBitmap(hInstance, 'IMG'); // Картинка в ресурсе 300 x 110 x 32
SelectObject(memDC, hbm);
pptSrc.X := 0;
pptSrc.Y := 0;
With pBlend Do Begin
BlendOp := AC_SRC_OVER;
AlphaFormat := AC_SRC_ALPHA;
BlendFlags := 0;
SourceConstantAlpha := 128;
End;
UpdateLayeredWindow(Wnd,scrDC,Nil,Nil,memDC,@pptSrc,RGB(255,0,0),@pBlend,ULW_ALPHA);
//...
---------------------------------------------------------
Если вместо UpdateLayeredWindowиспользовать например
SetLayeredWindowAttributes(Wnd,0,128,LWA_ALPHA)
то появляется просто прозрачное окно с картинкой
[dvs]digiman (2005-11-09 23:04:00) [4]p/s/ прога у меня на winapi без vcl