Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.29;
Скачать: CL | DM;

Вниз

Как рисовать на обоях, вместо обоев?   Найти похожие ветки 

 
alxx ©   (2002-04-12 16:17) [0]

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


 
Song ©   (2002-04-12 16:32) [1]

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


 
alxx ©   (2002-04-14 14:43) [2]

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


 
lipskiy ©   (2002-04-14 14:53) [3]

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


 
alxx ©   (2002-04-14 14:57) [4]

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


 
alxx ©   (2002-04-14 15:41) [5]

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


 
lipskiy ©   (2002-04-14 19:17) [6]

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


 
alxx ©   (2002-04-14 21:01) [7]

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

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


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

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


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

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


 
Alx2 ©   (2002-04-17 08:31) [10]

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


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

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


 
Alx2 ©   (2002-04-17 09:54) [12]

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


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

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

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


 
Alx2 ©   (2002-04-17 11:15) [14]

Рисует на 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;


 
alxx ©   (2002-04-17 21:11) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2002.04.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
6-94529
fixxxer
2002-02-14 18:28
2002.04.29
Как получить список компьютеров в локальной сети


1-94493
Satrap
2002-04-14 18:22
2002.04.29
MDI-приложение


7-94589
Sender
2002-01-22 23:12
2002.04.29
Коипоненты для com- порта в Delphi 6


1-94410
Каспер
2002-04-18 07:02
2002.04.29
Мигание на панеле задач


1-94362
Aleksandr
2002-04-17 12:19
2002.04.29
Как сделать, чтобы Делфи нормально ставила курсор на коде?