Re[5]: WinAPI Q&A из #5-2004
От: kero Россия  
Дата: 01.07.06 06:33
Оценка: 9 (2)
Здравствуйте, 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.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.