Как child окну узнать что его родитель стал невидимым?
От: 23W http://kyselgov.pp.ua/
Дата: 05.11.10 15:28
Оценка:
Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?
Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает
Re: Как child окну узнать что его родитель стал невидимым?
От: invisibleshadow Россия  
Дата: 05.11.10 16:50
Оценка:
Здравствуйте, 23W, Вы писали:

23W>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?

23W>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает

WM_SHOWWINDOW — не смотрели?
Re[2]: Как child окну узнать что его родитель стал невидимым
От: 23W http://kyselgov.pp.ua/
Дата: 08.11.10 09:02
Оценка:
Здравствуйте, invisibleshadow, Вы писали:

I>Здравствуйте, 23W, Вы писали:


23W>>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?

23W>>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает

I>WM_SHOWWINDOW — не смотрели?


При скрытии родителя для дочерних окно WM_SHOWWINDOW не вызывается!
Re: Как child окну узнать что его родитель стал невидимым?
От: kero Россия  
Дата: 08.11.10 09:13
Оценка:
Здравствуйте, 23W, Вы писали:

23W>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?

23W>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает

А не приведете ли пример, когда "child окну узнать что его родитель стал невидимым" — жизненно необходимо ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: Как child окну узнать что его родитель стал невидимым
От: 23W http://kyselgov.pp.ua/
Дата: 08.11.10 09:53
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, 23W, Вы писали:


23W>>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?

23W>>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает

K>А не приведете ли пример, когда "child окну узнать что его родитель стал невидимым" — жизненно необходимо ?

Да запросто, чилд окно — навороченый контроль, который содержит в себе системные подконтроли, которые при отрисовке он должен модифицировать (именно модифицировать а не перекрыть через custom draw) для этого он использует layered window, который может быть только стиля WS_POPUP. При скрытии контроля (сворачивают родителя или скрываю его), нужно спрятать и оторваный иерархически (по родительству) layered window.

Оттакоевот!
Re: Как child окну узнать что его родитель стал невидимым?
От: nullptr_t  
Дата: 08.11.10 11:19
Оценка:
Здравствуйте, 23W, Вы писали:

23W>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?


только сабкласс (SetWindowSubclass на родителя, отлов WM_WINDOWPOSCHANGED)

23W>Да запросто, чилд окно — навороченый контроль, который содержит в себе системные подконтроли, которые при отрисовке он должен модифицировать (именно модифицировать а не перекрыть через custom draw) для этого он использует layered window, который может быть только стиля WS_POPUP. При скрытии контроля (сворачивают родителя или скрываю его), нужно спрятать и оторваный иерархически (по родительству) layered window.


крутой костыль
Re[3]: Как child окну узнать что его родитель стал невидимым
От: kero Россия  
Дата: 08.11.10 12:30
Оценка:
Здравствуйте, 23W, Вы писали:

K>>А не приведете ли пример, когда "child окну узнать что его родитель стал невидимым" — жизненно необходимо ?


23W>Да запросто, чилд окно — навороченый контроль, который содержит в себе системные подконтроли, которые при отрисовке он должен модифицировать (именно модифицировать а не перекрыть через custom draw) для этого он использует layered window, который может быть только стиля WS_POPUP. При скрытии контроля (сворачивают родителя или скрываю его), нужно спрятать и оторваный иерархически (по родительству) layered window.


Выходит, "знать" надо не дочернему окну, а некоему попапу
Ну, и что мешает назначить парента дочернего — еще и владельцем этого попапа?
С тем, чтобы owner при своем скрытии/появлении вызывал (например — в обработчике WM_WINDOWPOSCHANING) ShowOwnedPopups.
При минимизации же owner-а — owned скрывается автоматически.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: Как child окну узнать что его родитель стал невидимым
От: 23W http://kyselgov.pp.ua/
Дата: 08.11.10 13:19
Оценка:
Здравствуйте, nullptr_t, Вы писали:

_>только сабкласс (SetWindowSubclass на родителя, отлов WM_WINDOWPOSCHANGED)

Спасибо, только что так и сделал... Ни один другой метод не работает

_>крутой костыль

а по другому никак! надо же как-то кастомизировать отрисовку стандартных элементов (прогресс бара например), чтобы не повторять в кастом-драве его код отрисовки полностью. Вот лейером его накрыть и все подправить — другое дело фотошоп, блин...
Re[4]: Как child окну узнать что его родитель стал невидимым
От: 23W http://kyselgov.pp.ua/
Дата: 08.11.10 13:23
Оценка:
Здравствуйте, kero, Вы писали:

K>Выходит, "знать" надо не дочернему окну, а некоему попапу

K>Ну, и что мешает назначить парента дочернего — еще и владельцем этого попапа?
K>С тем, чтобы owner при своем скрытии/появлении вызывал (например — в обработчике WM_WINDOWPOSCHANING) ShowOwnedPopups.
K>При минимизации же owner-а — owned скрывается автоматически.

Парент дочернего — не мое окно, я им не управляю (это какой-то левый вьювер или диалог в котором крутится мой дочерний контроль). и эта "собака"-парент и не думает вызывать ShowOwnedPopups ни в WM_WINDOWPOSCHANING, ни в WM_SHOWWINDOWS ни где-либо еще
Пришлось сделать над ним сабклас, теперь я им управляю как хочу... сам обрабатываю WM_WINDOWPOSCHANING и вызываю SetWindowPos(), т.к. ShowOwnedPopups() имеет дурные ограничения — " if a pop-up window is hidden by using the ShowWindow function, subsequently calling ShowOwnedPopups with the fShow parameter set to TRUE does not cause the window to be shown" ! Бахнутся можно от такой фразы в MSDN.
Re[5]: Как child окну узнать что его родитель стал невидимым
От: kero Россия  
Дата: 08.11.10 13:34
Оценка:
Здравствуйте, 23W, Вы писали:

23W>Парент дочернего — не мое окно,


Эту инфу вы, значит, на закуску оставили?? Мда...
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: Как child окну узнать что его родитель стал невидимым
От: 23W http://kyselgov.pp.ua/
Дата: 08.11.10 13:38
Оценка:
Здравствуйте, kero, Вы писали:

K>Эту инфу вы, значит, на закуску оставили?? Мда...

извините... больше не буду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.