Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как рисовать на обоях, вместо обоев? [D6, Win2k]


alxx ©   (2002-04-12 16:17:00) 

Не подскажете, как можно рисовать прямо на обоях (разместить поверх обоев свое окно), как например может делать Winamp"овская AVS (overlay mode)?


alxx   (2002-04-17 21:11:00) [1]

Спасибо за ответы. Попробую дальше поразбираться.
А может это правда какая-нибудь функция DirectX-а?


Alx2   (2002-04-17 11:15:00) [2]

Рисует на Desktop, правда значки затирает. IMHO надо InvalidateRgn заполнять еще.

cnv : TCanvas;
DC : HDC;
hw : HWND;
Begin
cnv := TCanvas.Create;
Try
hw := FindWindow("ProgMan", Nil);
DC := GetWindowDC(hw);
If DC <> 0 Then
Begin
cnv.Handle := DC;
cnv.Pen.COLOR := clRed;
For K := 1 To 100 Do
cnv.Rectangle(random(600), random(600), random(600), random(600));
ReleaseDC(hw, DC);
End;
Finally
cnv.Free;
End;


REA   (2002-04-17 10:52:00) [3]

WinSight говорит что иерархия окон такая -
Desktop - Progman (Explorer) - Shell_DLL - SysListView32 - SysHeader (Hidden)

не знаю чей Handle возвратит GetDesktopWindow, но если тот, что нужно, то и хорошо. (Я бы наверно рисовал поверх этого SysListView32, хотя далеко не уверен)


Alx2   (2002-04-17 09:54:00) [4]

>раскопать Handle нужного окна
GetDesktopWindow


REA   (2002-04-17 09:40:00) [5]

Можно еще прозондировать поглубже API функции и раскопать Handle нужного окна. Или еще посмотреть плагинсы к эксплореру - активный стол там или еще что.


Alx2   (2002-04-17 08:31:00) [6]

>А как за ними следить? Хотя вроде бы были функции... Разберусь.
Ставишь hook на Wm_onPaint "рабочего стола" и после его отработки дорисовываешь свое.


slym   (2002-04-17 07:29:00) [7]

hDC:=getDC(0);
и paint...
рисуй че надо, только проблема если десктоп обновляется, а делает он это часто, все ваши старания затираются...
рисуешь где нить в прозрачный битмап, ставишь хук на WM_PAINT и выкладываешь свой битмап на getDC(0)
можно сделать транспарент форму присвоить парента (десктоп) и рисовать на ней, только самому ее перерисовывать принудительно раз 25 в секунду, мерцает? дубл буфферинг... или опять Hoук


alxx   (2002-04-16 17:46:00) [8]

Никто не знает, как быть?


alxx   (2002-04-14 21:01:00) [9]

А как за ними следить? Хотя вроде бы были функции... Разберусь.
А вот на канве рабочего стола - с помощью дескриптора, который получить на его хэндл? А то я попробовал, чего-то не получилось. Интересно только - как это все будет тормозить?

А как же быть с иконками - они же должны прорисовываться. А их не отследить.


lipskiy   (2002-04-14 19:17:00) [10]

В реалтайме, имхо, только на канве рабочего стола, при этом надо следить за всеми окнами и их координатами и постоянно перерисовывать, если окна меняют свое положение.


alxx   (2002-04-14 15:41:00) [11]

Никто не знает?


alxx   (2002-04-14 14:57:00) [12]

Нет. Я хочу в реалтайме, а загрузка новых обоев, я так понимаю десять раз в секунду не получится. Может это какие-нибудь функции DirecrX"а? AVS то как-то делает.


lipskiy   (2002-04-14 14:53:00) [13]

Лучше взять файл обоев, испоганить его, и подсунуть системе как новые обои, имхо.


alxx   (2002-04-14 14:43:00) [14]

Ну и как нарисовать на канвасе рабочего стола?
Если использовать GetDesktopWindow - то получается хэндл вовсе не обоев, а всего рабочего стола, включая окна, которые на нем висят.


Song   (2002-04-12 16:32:00) [15]

Это назвается рисовать на канвасе рабочего стола.


Наверх

Титульная страница Поиск, карта сайта Написать письмо