Здравствуйте, Andrew S, Вы писали:
AS>"Свернуть все окна" на самом деле не сворачивает их, а перемещает за пределы десктопа (в чем можно убедиться, посмотрев их координаты в Spy++).
На самом деле операция "Свернуть все окна" на разные top-level окна действует по-разному.
1) У одних окон (например, многих дельфийских) — просто сбрасывается бит WS_VISIBLE.
2) Другие, если у них установлен бит WS_MINIMIZEBOX, перемещаются за пределы десктопа; при этом все-таки сворачиваются в полоску (ее при желании можно увидеть, например, через WM_PRINT).
3) А для окон без бита WS_MINIMIZEBOX у виндов припасен трюк с Z-order-ом (через Spy++ того не отследить, но можно вот
этим).
Вот фрагмент дерева окон до "свертывания" (речь о свертывании типа Win+D):
Z-ord hWnd Tree Status Width Height X Y Exec.file Class Text
0 00010014 Desktop > VE 0 1280 1024 0 0 csrss.exe #32769 ""
42 001701ba w > HE 0 1280 1024 0 0 explorer.exe WorkerW ""
226 00010086 w > VE 0 1280 1024 0 0 explorer.exe Progman "Program Manager"
227 00010090 .w VE 0 1280 994 0 0 explorer.exe SHELLDLL_DefView ""
228 00010092 ..w VE 0 1280 994 0 0 explorer.exe SysListView32 "FolderView"
229 00040250 ...w HE 0 0 0 0 0 explorer.exe SysHeader32 ""
А вот что происходит при "свертывании":
Z-ord hWnd Tree Status Width Height X Y Exec.file Class Text
0 00010014 Desktop > VE 0 1280 1024 0 0 csrss.exe #32769 ""
42 001701ba w > VE 0 1280 1024 0 0 explorer.exe WorkerW ""
43 00010090 .w VE 0 1280 994 0 0 explorer.exe SHELLDLL_DefView ""
44 00010092 ..w VE 0 1280 994 0 0 explorer.exe SysListView32 "FolderView"
45 00040250 ...w HE 0 0 0 0 0 explorer.exe SysHeader32 ""
229 00010086 w > VE 0 1280 1024 0 0 explorer.exe Progman "Program Manager"
Top-level окна между 45 и 229 — "свернуты" (т.е. Z-адвинуты под 'десктоп'-SysListView32 c hWnd=00010092).
(Visible/Hidden Enabled/Disabled)
P.S. Это все на XP.