Владелец окна Win32 против окна Родитель? - PullRequest
49 голосов
/ 03 февраля 2009

В программировании на Win32, в чем разница между родителем окна и владельцем окна? Я думал, что понял, потом наткнулся на этот код:

SetWindowLong(handle, GWL_HWNDPARENT, foo);

Это фактически устанавливает владельца окна, а не его родителя - несмотря на использование GWL_HWNDPARENT. Являются ли термины родитель / владелец взаимозаменяемыми или на самом деле есть разница?

Ответы [ 3 ]

27 голосов
/ 05 марта 2009

Владение - это связь между двумя окнами верхнего уровня, в то время как Parent - это связь между верхним уровнем и WS_CHILD, или WS_CHILD и другим WS_CHILD.

Родителем кнопки является форма, в которой она находится, в то время как окно сообщения принадлежит той форме, которая ее показала.

Прочтите эту статью от Microsoft Иерархия и стили окон Win32 , чтобы получить более четкое понимание владения, родительских функций, ZOrder, SetWindowLong, GetWindow и всех других неприятных битов API Win32 для создания оконных отношений.

РЕДАКТИРОВАТЬ: Похоже, Microsoft удалил этот контент, вот еще один разумный краткое изложение владения / воспитания .

19 голосов
/ 03 февраля 2009

Владелец - это Окно *, ответственное за элемент управления или диалог (например, ответственное за создание / уничтожение окна).

Родитель является следующим старшим окном * для элемента управления или диалога в цепочке окон, но на самом деле не отвечает за него (не обязательно заботится о его жизненном цикле и т. Д.) Родитель окна также может быть его владельцем.

* Окно против окна: Окно - это фактическое окно, отображаемое на экране; Окно - это любой объект с HWND (включая кнопки, панели и т. д.).

1 голос
/ 18 января 2015

Чен в блоге читает. Ключевым моментом для меня является то, что стиль WS_CHILD должен использоваться в дочернем окне. Вы можете попытаться создать дочернее окно и передать родительский дескриптор в CreateWindow (), но если у вас не установлен стиль WS_CHILD, у двух окон будет отношение владелец, а не отношение родитель / потомок.

...