Форум: "WinAPI";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизTransparent icons and Active Desktop Найти похожие ветки
← →
YY (2003-07-21 22:53) [0]Уж и не знаю, куда податься....
Может, тут кто-нибудь сможет подсказать, как сделать прозрачным фон иконок на рабочем столе при включённом Active Desktop?
Точнее, проблема со своевременным обновлением этого фона под иконками.
Вот такой код
LVHandle:=FindWindowEx(FindWindowEx(FindWindow("Progman","Program Manager"),0,"SHELLDLL_DefView",""),0,"SysListView32","");
ListView_SetTextBkColor(LVHandle,$FFFFFFFF);
InvalidateRect(LVHandle,0,True);
UpdateWindow(LVHandle);
без AD работает прекрасно, но с включённым Active Desktop фон остаётся на месте и "стирается" только если провести оконом по иконкам.
Некоторые считают это глюком, но, и в правду, IMHO Active Desktop освещён в документации Microsoft крайне скупо и как он работает не понятно.
← →
Klev (2003-07-21 23:42) [1]Вообщем я сам не использую Active desktop, и другим не советую.
Но если запустить что-нибудь похожее на Spy32 for windowz(утилитку для просмотра информации об окнах), то можно заметить, что при включенном AD появляется новое окно, с классом "Internet Explorer_Server". Его-то и надо перерисовать.
Вот кусочек кода(мой вариант):
uses windows,CommCtrl;
procedure Desktop_transparent;
var Window,ie: HWND;
begin
Window := FindWindow("Progman", "Program Manager");
Window := FindWindowEx(Window, HWND(nil), "SHELLDLL_DefView", "");
Window := FindWindowEx(Window, HWND(nil), "SysListView32", "");
ListView_SetTextBkColor(Window, $ffffffff);
ListView_SetTextColor(Window, 16777215);
ListView_RedrawItems(Window, 0, ListView_GetItemCount(Window) - 1);
UpdateWindow(Window);
ie:=findwindow("Internet Explorer_Server",nil);
InvalidateRect(ie,0,True);
( ie)Вообщем я сам не использую Active desktop, и другим не советую.
Но если запустить что-нибудь похожее на Spy32 for windowz(утилитку для просмотра информации об окнах), то можно заметить, что при включенном AD появляется новое окно, с классом "Internet Explorer_Server". Его-то и надо перерисовать.
Вот кусочек кода(мой вариант):
uses windows,CommCtrl;
procedure Desktop_transparent;
var Window,ie: HWND;
begin
Window := FindWindow("Progman", "Program Manager");
Window := FindWindowEx(Window, HWND(nil), "SHELLDLL_DefView", "");
Window := FindWindowEx(Window, HWND(nil), "SysListView32", "");
ListView_SetTextBkColor(Window, $ffffffff);
ListView_SetTextColor(Window, 16777215);
ListView_RedrawItems(Window, 0, ListView_GetItemCount(Window) - 1);
UpdateWindow(Window);
ie:=findwindow("Internet Explorer_Server",nil);
InvalidateRect(ie,0,True);
updatewindow(ie);
end;
← →
YY (2003-07-25 00:15) [2]Спасибо большое. Действительно, надо было просто обновить это окно. Однако тут есть одна неприятность: вместе с этим окном перерисовываются и все окна, его перекрывающие (грубо говоря, все развёрнутые окна). Поэтому вопрос несколько меняется: как бы мне обновить окно, не перерисовывая перекрывающих его окон?
Например, когда я нажимаю F5, перерисовывается только Desktop и все окна остаются в покое.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c