Eugie » 14 авг 2006, 20:51
Диалоговое окно не является дочерним по отношению к главному, для них используется другое отношение - ownership (владение). Т.е. главное окно - owner, а диалоговое - owned window. Дескриптор владельца окна возвращает функция GetWindow(<...>, GW_OWNER). Отношение владения устанавливается между т.н. окнами верхнего уровня (имеют тип WS_OVERLAPPED или WS_POPUP) и фактически означает следующее:
1) владеемое окно всегда находится над владельцем в Z-порядке;
2) при изменении видимости владельца аналогично меняется видимость владеемых им окон;
3) при разрушении владельца автоматически разрушаются владеемые им окна.
Отношение parent/child другое: дочерние окна всегда имеют тип WS_CHILD, а их родители могут быть любого типа. Дочернее окно гораздо теснее связано с родителем, чем владеемое окно с владельцем. В частности, оно всегда позиционируется и отображается в клиентской области родительского окна.
Функция GetNextWindow() работает независимо с тремя иерархиями окон (topmost, top-level и child), возвращая следующее/предыдущее окно в Z-порядке той иерархии, которой принадлежит опрашиваемое окно. Например, можно с ее помощью выполнить ту же работу, что и EnumChildWindows(), если в качестве 1-го параметра передать дескриптор первого дочернего окна (относительно данного родителя) и пройтись в цикле по всем окнам данной иерархии.
Диалоговое окно не является дочерним по отношению к главному, для них используется другое отношение - ownership (владение). Т.е. главное окно - [i]owner[/i], а диалоговое - [i]owned window[/i]. Дескриптор владельца окна возвращает функция GetWindow(<...>, GW_OWNER). Отношение владения устанавливается между т.н. окнами верхнего уровня (имеют тип WS_OVERLAPPED или WS_POPUP) и фактически означает следующее:
1) владеемое окно всегда находится над владельцем в Z-порядке;
2) при изменении видимости владельца аналогично меняется видимость владеемых им окон;
3) при разрушении владельца автоматически разрушаются владеемые им окна.
Отношение parent/child другое: дочерние окна всегда имеют тип WS_CHILD, а их родители могут быть любого типа. Дочернее окно гораздо теснее связано с родителем, чем владеемое окно с владельцем. В частности, оно всегда позиционируется и отображается в клиентской области родительского окна.
Функция GetNextWindow() работает независимо с тремя иерархиями окон (topmost, top-level и child), возвращая следующее/предыдущее окно в Z-порядке той иерархии, которой принадлежит опрашиваемое окно. Например, можно с ее помощью выполнить ту же работу, что и EnumChildWindows(), если в качестве 1-го параметра передать дескриптор первого дочернего окна (относительно данного родителя) и пройтись в цикле по всем окнам данной иерархии.