Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
ВнизКак рисовать на обоях, вместо обоев? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c