Здравствуйте, Vaynamond, Вы писали:
V>Суть проблемы: если Окно_2 при выводе частично закрывает Окно_1, то когда активизируется Окно_1, Окно_2 продолжает
V>перекрывать Окно_1 (хотя становится неактивным и не имеет фокуса ввода).
Для дочерних окон понятие активности не используется, а фокус ввода не влияет на Z-order.
Т.к. оба дочерних окна имеют стиль WS_CLIPSIBLING, то при отрисовке нижнего будет клипаться кусок, закрытый верхним.
Т.е. автоматом желаемый функционал не получить.
Но можно вручную менять Z-order с помощью SetWindowPos при смене фокуса.
Например, ловим в дочерних окнах WM_SETFOCUS и ставим себя на вершину Z-order:
SetWindowPos(hWnd, HWHD_TOP, ... SWP_NOMOVE | SWP_NOSIZE);
Еще лучше с помощью BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos, чтобы меньше мерцало при переключении.
Здравствуйте, qaz77, Вы писали:
Q>Здравствуйте, Vaynamond, Вы писали:
V>>Суть проблемы: если Окно_2 при выводе частично закрывает Окно_1, то когда активизируется Окно_1, Окно_2 продолжает
V>>перекрывать Окно_1 (хотя становится неактивным и не имеет фокуса ввода).
Q>Для дочерних окон понятие активности не используется, а фокус ввода не влияет на Z-order.
Q>Т.к. оба дочерних окна имеют стиль WS_CLIPSIBLING, то при отрисовке нижнего будет клипаться кусок, закрытый верхним.
Q>Т.е. автоматом желаемый функционал не получить.
Q>Но можно вручную менять Z-order с помощью SetWindowPos при смене фокуса.
Q>Например, ловим в дочерних окнах WM_SETFOCUS и ставим себя на вершину Z-order:
Q>Q>SetWindowPos(hWnd, HWHD_TOP, ... SWP_NOMOVE | SWP_NOSIZE);
Q>
Q>Еще лучше с помощью BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos, чтобы меньше мерцало при переключении.
Получилось!
Огромный респект!