Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?
Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает
Re: Как child окну узнать что его родитель стал невидимым?
Здравствуйте, 23W, Вы писали:
23W>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ? 23W>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает
WM_SHOWWINDOW — не смотрели?
Re[2]: Как child окну узнать что его родитель стал невидимым
Здравствуйте, invisibleshadow, Вы писали:
I>Здравствуйте, 23W, Вы писали:
23W>>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ? 23W>>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает
I>WM_SHOWWINDOW — не смотрели?
При скрытии родителя для дочерних окно WM_SHOWWINDOW не вызывается!
Re: Как child окну узнать что его родитель стал невидимым?
Здравствуйте, 23W, Вы писали:
23W>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ? 23W>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает
А не приведете ли пример, когда "child окну узнать что его родитель стал невидимым" — жизненно необходимо ?
Здравствуйте, kero, Вы писали:
K>Здравствуйте, 23W, Вы писали:
23W>>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ? 23W>>Т.к. при изменении состояния родительского окна WM_WINDOWPOSCHANGED child окнам система не посылает
K>А не приведете ли пример, когда "child окну узнать что его родитель стал невидимым" — жизненно необходимо ?
Да запросто, чилд окно — навороченый контроль, который содержит в себе системные подконтроли, которые при отрисовке он должен модифицировать (именно модифицировать а не перекрыть через custom draw) для этого он использует layered window, который может быть только стиля WS_POPUP. При скрытии контроля (сворачивают родителя или скрываю его), нужно спрятать и оторваный иерархически (по родительству) layered window.
Оттакоевот!
Re: Как child окну узнать что его родитель стал невидимым?
Здравствуйте, 23W, Вы писали:
23W>Как child окно (например контроль в диалоге или вьювере) может узнать что родительское окно было скрыто или появилось ?
только сабкласс (SetWindowSubclass на родителя, отлов WM_WINDOWPOSCHANGED)
23W>Да запросто, чилд окно — навороченый контроль, который содержит в себе системные подконтроли, которые при отрисовке он должен модифицировать (именно модифицировать а не перекрыть через custom draw) для этого он использует layered window, который может быть только стиля WS_POPUP. При скрытии контроля (сворачивают родителя или скрываю его), нужно спрятать и оторваный иерархически (по родительству) layered window.
крутой костыль
Re[3]: Как child окну узнать что его родитель стал невидимым
Здравствуйте, 23W, Вы писали:
K>>А не приведете ли пример, когда "child окну узнать что его родитель стал невидимым" — жизненно необходимо ?
23W>Да запросто, чилд окно — навороченый контроль, который содержит в себе системные подконтроли, которые при отрисовке он должен модифицировать (именно модифицировать а не перекрыть через custom draw) для этого он использует layered window, который может быть только стиля WS_POPUP. При скрытии контроля (сворачивают родителя или скрываю его), нужно спрятать и оторваный иерархически (по родительству) layered window.
Выходит, "знать" надо не дочернему окну, а некоему попапу
Ну, и что мешает назначить парента дочернего — еще и владельцем этого попапа?
С тем, чтобы owner при своем скрытии/появлении вызывал (например — в обработчике WM_WINDOWPOSCHANING) ShowOwnedPopups.
При минимизации же owner-а — owned скрывается автоматически.
Здравствуйте, nullptr_t, Вы писали:
_>только сабкласс (SetWindowSubclass на родителя, отлов WM_WINDOWPOSCHANGED)
Спасибо, только что так и сделал... Ни один другой метод не работает
_>крутой костыль
а по другому никак! надо же как-то кастомизировать отрисовку стандартных элементов (прогресс бара например), чтобы не повторять в кастом-драве его код отрисовки полностью. Вот лейером его накрыть и все подправить — другое дело фотошоп, блин...
Re[4]: Как child окну узнать что его родитель стал невидимым
Здравствуйте, 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 окну узнать что его родитель стал невидимым